市場のエチケット、あるいは地雷原でのマナー - ページ 16

 
paralocus писал(а)>>

中性子、ちょっとタイムアウトします。もう一度すべてを考え直して、少なくとも1つのニューロンに対するコードに落とし込まなければならないのです。とにかく、1日、2日、そして続きを。

本当にありがとうございました。

オッケーです。

 
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);
}



ここでは、空のExpert Advisorで教えてみることにしました。

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ステップ(バー)を超えるととんでもなく高くなる。コードに間違いがないか長い間探した結果、その通りに動作することがわかりました。

つまり、グリッドの出力で得られた誤差を出力層のすべての重みに加えるだけでは、これらの係数は急激に大きくなりすぎる傾向があるのです。

スキューバダイナミクスでは対応できない...。-:)今のところ、出力層の重みにのみ誤差を伝播させるようにしています。

質問1:私は何か悪いことをしたのでしょうか?

質問2.

グリッドの出力で売り買いが成功する確率や、竹を割ったような推奨値を出したい。しかし、このグリッドは、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に 等しくなることは明らかである。誤差ベクトルは、最初の(2回目、3回目など)学習エポックが終了するまでにのみ生成されます。その形成方法は次の通りである。

1.学習の最初のステップ(各エポックには合計n 個ある)では、各重みに対して個別の誤差を形成し、重みの補正は行わない。そして、第二段階では、同様の補正を行った上で、前の補正に追加する、といった具合です。n回 です。各重量に対して、(各項の符号を考慮した)合計の補正値を得ることができます。ここで重要なポイントがあります。この最終補正は使用しないでください。ウェイトがバラバラになってしまいます補正ベクトルノルムで割る必要があります。そのためには、各ウェイトの1トレーニングエポック内の各補正の二乗和を個別にカウントする。エポック その中のnサイクル)が終了したらすぐに、各重みの平方和の平方根を個別にとり、個人的にこのノルムで各補正値を割る。重量ごとに補正しています。

2. 訓練の目的(符号または振幅)に応じて、10~1000個の訓練エポックを使用します。同じように進める。重要なポイント:エポックからエポックへ進むとき、ウェイト補正の振幅が単調に減少することを厳密に観察する必要があります。グリッドは、誤差関数ポテンシャルの最小値を深く深く探すことを怠ってはならない。シンプルに実現されています。エポック終了時、重み補正の前に、補正器に値1-j/Nを 掛ける。ここで、 Nは 学習エポック数、jは 現在のエポック数である。

3.CETIのトレーニング中に一部の重みが飽和するのを防ぐため、次の重み補正の直後にすべての重みに双曲線正接を作用させる必要がある。この方法は目立ちませんが、非常に効果的です。使用するFAは滑らかで単調なため、すべてのウェイトが常に±1の範囲に収まり、演技という行為が少女に「ヒステリー」を起こさせることはないのである。

以上、今回はこの辺で。消化し、質問する。

RSIからBuy/Sellに移行する方法については、むしろあなたへの質問です - 何しろ、あなた自身がその動きを思いついたのですから。例えば、私が「予測」したものは、エントリーにも使います(Buy/Sellもきっちり予測しています)。だから、矛盾がないのです。そして、そのキッチンの窓の前にある車の色で、任意のアパートの壁紙の色を予測しようとしている...。

 

実装の詳細を思い出しながら記事を書いているうちに、不正確な点がいくつか出てきました。

コードを見てみると、新しい予測に切り替わるとき、つまり毎エポックではなく、新しいデータが入ってきてネットワークを再トレーニングする必要があるときに、重みのFAに一度だけ影響を与えていたことが判明しました。

もうひとつ。重みの補正は、FA微分によるニューロン出力と、信号が入力されたニューロン出力(振幅、符号を考慮)の誤差の積である。

あるペルセプトロンのノンリニア出力(例)の場合はこんな感じです。

ここで、エポックはインデックス Lで 番号付けされている。あえてMathCadで表示することで、より分かりやすくなっています。In - 入力数, x - 入力ベクトル.あとはクリアなようです。

 
Neutron >> :

RSIからBuy/Sellに切り替える方法については、むしろあなたへの質問です。その動きはあなた自身が考え出したものです。例えば、私が予測したことは、エントリーにも使います(Buy/Sellにも正確に予測します)。だから、矛盾がないのです。そして、任意のアパートの壁紙の色を、そのアパートのキッチンの窓の前にある車の色で予測しようとしている...。

こんにちは、ニュートロンです。

私は今、あなたが書いたことを扱っています。ただ、数学は本当に頭の中がきしむんです。プログラミングはもう少し簡単です。壁紙の件ですが、おっしゃるとおりで、同じ壁紙でも別の工場にするとか(結果は同じになると思いますが)、グリッドに何を入れるかはまだ決まっていません。このフォーラムでこの記事を 読み、ニューラルネットに興味を持つようになりました。そして、その記事では、ご存知のように、1つの入力貧しいパーセプトロンに、フォーラムの賢い仲間は、AO指数(またはAC - 私は常にそれらを混同する)を押し、見るために何かを持つために、彼らは言及指数(dt / DL)のグラフィックにパーセプトロンの入力を共有することによって、 "クラスタ "に分割しました。彼らはそれをすべて「NEUROSETTING」と呼び、さらには「TRADING WITHIN THE NETHERLANDS O...」と呼んでいます。(いや、そういう意味ではなく)「SLIVE AUTOMATIZATION」。それは、大金だ...。をテスターで確認。

よし...は余談でしたね。

それで、その記事と(そこからのリンクで)いくつかの似たような記事の後、私はパーセプトロンをいろいろと試し始めたんです。とにかく、あの歌のようなものです。

"ヴァンカはベンチに座り、ペニスで3コペックを叩いている。

3ルーブルを稼ぎたい - 何も出てこない!"

しかし、トレーディングに利用する目的で非生産者に興味を持つことは、時を経ても変わらず、さらに大きくなっています。RSIクラスタリング以上のものがまだ思いつかないということは、おじさんのせいではなく、「諸刃の剣」なんですね。つまり、入力メッシュに何をどのように入れるかを知るためには、そのメッシュがどのように配置されているかを知る必要があり、知るだけでなく、できるようになることも必要なのです。少なくとも、あまり複雑な形ではなく、実作業で安定した作業を行うには十分なものです。だから、私はあなたに目をつけたのです。


P.S.私が「あなた」に行ったことは何もないのですか?その方が親切ですからね。