市场礼仪或雷区中的良好风度 - 页 16

 
paralocus писал(а)>>

中子,我需要短暂的休息。我必须再次重新思考所有的事情,并把它变成至少一个神经元的代码。总之,一两天后,我们将继续。

我真的很感激!

好的。

 
Neutron >> :

好的。

你好,中子。在这里,我做了一些东西。

我为ORO算法做了这么一个小网格。



事实上,这里是网格本身的代码(这是头文件Neyro_test.mqh)。

extern int neyrons = 3;
extern int in = 5;

double Data[3][5] = {0.0,0.0,0.0,0.0,1.0,
0.0,0.0,0.0,0.0,1.0,
0.0,0.0,0.0,0.0,1.0 };

double W[4][5] = {-0.786, 0.359,-0.186, 0.891, 0.238,
0.711,-0.923, 0.088, 0.417,-0.112,
-0.867,-0.229, 0.321, 0.921,-0.941,
0.995,-0.712, 0.012,-0.625, 0.0 };

//----------------------------
double OUT(int bar = 1)
{
int i;
double res = 0.0;

GetInd(bar);
res = W[3,0]*RSI_1() + W[3,1]*RSI_2() + W[3,2]*RSI_3() + W[3,3];

return(res);
}

double RSI_1()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[0,i] * Data[0,i];

return(th(res));
}

double RSI_2()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[1,i] * Data[0,i];

return(th(res));
}

double RSI_3()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[2,i] * Data[0,i];

return(th(res));
}

//----------

void OPO(double de)
{
int i;
for(i = 0; i < 4; i++)
W[3,i] += de;
}

//---------------------------------------------------------------------

void GetInd(int i)
{
int dt = 7,per = 14, prc = 0;
double ue_in = 0.02,kf = 3.0;

Data[0,0] = th((iRSI(NULL,0,per,prc,i)*ue_in - 1.0)*kf);
Data[0,1] = th((iRSI(NULL,0,per,prc,i+dt)*ue_in - 1.0)*kf);
Data[0,2] = th((iRSI(NULL,0,per,prc,i+dt*2)*ue_in - 1.0)*kf);
Data[0,3] = th((iRSI(NULL,0,per,prc,i+dt*3)*ue_in - 1.0)*kf);
}
//-------------------------------------------

double th(double x)
{
double sh,ch;
sh = MathExp(x) - MathExp(-x);
ch = MathExp(x) + MathExp(-x);
return(sh/ch);
}



下面是我在一个空的专家顾问中尝试的教学方式。

extern int cikl = 10;
static int prevtime = 0;


#include <Neyro_test.mqh>
//-----------------------------------
int init()
{
return(0);
}

int deinit()
{
return(0);
}
//-------------------------------------
int start()
{
static double test, control;

if(Time[0] == prevtime)
return(0);
prevtime = Time[0];

int pr = 14, pc = 0, i;
double in = 0.02, k = 3.0;


for(i = cikl; i > 2; i--)
{
test = OUT(i);
control = th((iRSI(NULL,0,pr,pc,i-1)*in - 1.0)*k);
OPO(test - control);
}

Comment("\r\n ВЕСА ВЫХОДНОГО НЕЙРОНА : ",W[3,0],", ",W[3,1],", ",W[3,2],", ",W[3,3]);
return(0);

}



基本上,这个网格会 "失灵"。加权系数在10步(条)后变得高得离谱。我找了很久,寻找代码中的错误,发现它能正常工作。

也就是说,如果我们只是把在网格输出处获得的误差加到输出层的所有权重上,那么这些系数往往会增长得太快。

标度表不能容纳...-:)到目前为止,我只尝试将错误传播到输出层的权重上。

问题一:我做错了什么?

问题二。

我想在网格的输出中得到成功买入/卖出的概率,或者得到抽竹子的建议。但是这个网格被训练来预测n+1条的RSI的值...

这对我有什么好处?

 

在ORO函数中,权重没有被正确修改

阅读该理论,至少在这里

 
maxfade >> :

在ORO函数中,权重没有被正确修改

至少在这里 读到了这个理论

谢谢你,但我不明白那里的情况。

 

输出层的误差应该用公式e=OUT*(1-OUT)*(TEST-OUT)来计算(这是针对逻辑 传递函数的,对于双曲正切,公式似乎有点不同,但也不是太复杂)。

神经元的权重应根据w+=nju*e*out进行修改,其中nju是一个学习步骤。

如果步长过大--网络将不稳定,权重将无限增加(在你的案例中,你使用的是(TEST-OUT),没有使用所有其他的乘法器)。

如果太小--网络将需要太长的时间来学习,并可能遇到局部最小值。

 
maxfade >> :

输出层的误差应该用公式e=OUT*(1-OUT)*(TEST-OUT)来计算(这是针对逻辑传递函数的,对于双曲正切,公式似乎有点不同,但也不是太复杂)。

神经元的权重应根据w+=nju*e*out进行修改,其中nju是一个学习步骤。

如果步长过大--网络将不稳定,权重将无限增加(在你的案例中,你使用的是(TEST-OUT),没有使用所有其他的乘法器)。

如果它太小,它将需要太长的时间来学习,并可能遇到局部最低点。


谢谢,我现在就去试试。

 
maxfade >> :

如果步长过大--网络将不稳定,权重将无限增加(就像你的情况一样,你使用(TEST-OUT)而不使用所有其他乘数)。

如果它太小,它将需要太长的时间来学习,并可能遇到局部最低点。


我有点困惑的是,修改的结果是权重的 "相对位置 "保持不变。这是因为所有传入的权重,作为修改的结果,以相同的数量变化。在这种情况下,原来的权重比例是随机设置的。应该这样吗?

 

你好,paralocus.

让我们一步步来吧。你有一个长度为n 次的训练向量,我们需要生成一个误差向量来修正网络的所有权重。很明显,向量的长度将等于算上恒定水平权重的权重数w 。误差向量只在第一个(第二个、第三个等)训练纪元结束时产生。它的形成方法如下。

1.在训练的第一步(每个epoch中共有n个),我们为每个权重形成一个单独的误差,不对权重进行修正。然后,在第二步,在形成了类似的修正后,将其加入到前一个步骤中,等等。n次。你可以得到每个权重的总校正(考虑到每个项的符号)。这里有一个重要的问题。不应使用这种最后的修正 - 砝码会变成碎片!"。它应该除以校正矢量规范。要做到这一点,要分别计算每个权重在一个训练纪元内的每个校正的平方之和。只要我们完成一个纪元 其中的n个周期),分别取每个权重的平方根之和,并亲自用这个准则除以每个修正。我们纠正每一个重量。

2. 10至1000个训练纪元,取决于训练的目的(符号或振幅)。以同样的方式进行。重要的一点:当从一个纪元到另一个纪元时,你应该严格观察权重校正的振幅的单调下降。网格不应偷懒,在误差函数潜力中寻找更深更深的最小值。它的实现很简单。在一个历时结束时,在权重校正之前,将校正器乘以数值1-j/N,其中 N 是训练历时数,j是 当前历时数。

3.为了防止CETI的某些权重在其训练过程中出现不可避免的饱和效应,有必要在下一次权重校正后立即用双曲切影响所有权重。这个程序并不明显,但极其有效。由于所使用的FA的平滑性和单调性,所有的权重将始终保持在+/-1的范围内,而且行为不会引起女孩的 "癔症"。

暂时就这些了。消化并提出问题。

至于,如何从RSI到买入/卖出的问题,这更像是一个针对你的问题--毕竟,你自己想出了这个动作。例如,我 "预测 "的东西,也用于进场(而我预测的正是买入/卖出)。这就是为什么没有矛盾的原因。而你试图通过厨房窗前的汽车颜色来预测一个任意单位的墙纸颜色......。

 

当我在写帖子时记住了执行的细节,有一些不准确的地方。

我看了看代码,原来我是在切换到新的预测时影响了一次权重上的FA,也就是说,不是每一个epoch,而是在新的数据进来时有必要重新训练网络。

还有一件事。权重的校正是由FA导数和神经元输出(振幅,考虑到符号)的误差的乘积,信号是从该神经元输入的。

下面是一个具有非线性输出的perseptron的情况(例如)。

这里的历时是用索引 L 来编号的。我特意在MathCad中显示,这样更清楚。In--输入的数量,x--输入矢量。其余的似乎都很清楚。

 
Neutron >> :

至于如何从RSI切换到买入/卖出,这更像是一个问你的问题--你自己想出了这一招。比如说我,我预测的东西,我也会进入(而且我预测的正是买/卖)。这就是为什么没有矛盾的原因。而你试图通过一个任意单位的厨房窗户前的汽车的颜色来预测该单位的墙纸的颜色......

你好,中子。

我现在就在处理你写的东西。只是,数学在我的脑子里真的是吱吱作响。编程更容易一些。而关于墙纸--你说得很对--但我还是不知道在网格里放什么,除了所有相同的墙纸,但另一个工厂(我想结果会是一样的)。在这里,我在论坛上看到这篇文章,它开始了我对神经网络的兴趣。在那篇文章中,如你所知,在一个输入差的感知器上,论坛上聪明的家伙们推了AO指数(或AC--我经常混淆它们),为了有东西可看,他们通过共享感知器的输入,把它分成 "群组",在提到指数(dt/dl)的图形上。他们把这一切称为 "NEUROSETTING",甚至是 "在荷兰境内的交易"。(不,我不是这个意思)SLIVE AUTOMATIZATION"。那是一大笔钱...。在一个测试器中。

好了...那是一个离题。

所以,在那篇文章和几篇类似的文章之后(通过其中的链接),我开始以不同的方式尝试使用感知器。总之,这就像那首歌。

"凡卡 "坐在长椅上,用他的小弟弟捣鼓着三个戈比。

想赚3个卢布--什么都没有出来!"

然而,我对非种植者的兴趣,以在交易中使用他们为目的,一直保持,甚至随着时间的推移而增长。事实上,我还想不出比RSI集群更好的东西--这不是我叔叔的错,但它是 "一根两头的棍子"。即知道什么和如何放入输入网格,我需要知道这些网格是如何安排的,不仅要知道,而且要能做到这一点。至少在一些不是很复杂的形式下,但足以让人在现实中稳定工作。这就是为什么我求助于你。


P.S. 没有什么,我去了一个 "你"?这样就更亲切了。