記事についてのディスカッション

 

新しい記事「ニューラルネットワークができるように(その7).適応的最適化法」はパブリッシュされました:

以前の記事では、ネットワーク内のすべてのニューロンに対して同じ学習率を用いてニューラルネットワークをトレーニングするためにストキャスティクススロープ降下法を使用しました。 本論文では、各ニューロンの学習速度を変化させることができる適応学習法に着目します。 その是非についても検討していきたいと思います。

アダム法による最適化のテストは、以前のテストで使用されたのと同じ条件で行われました:シンボルEURUSD、タイムフレームH1、20個の連続したローソク足のデータがネットワークに供給され、トレーニングは過去2年間のヒストリーを使用して実行されます。 テスト用にFractal_OCL_Adam Expert Advisorを作成しました。 このExpert Advisorは、Fractal_OCLEAをベースに、メインプログラムのOnInit関数でニューラルネットワークを記述する際にAdam最適化手法を指定して作成しました。

      desc.count=(int)HistoryBars*12;
      desc.type=defNeuron;
      desc.optimization=ADAM;

ニューロン層やニューロンの数は変わっていません。

このEAは、ゼロ値を除いて-1から1までのランダムな加重で初期化されました。 テスト中、2回目のトレーニングエポック後には、ニューラルネットワークの誤差は30%程度に安定していました。 ご記憶の通り、ストキャスティクススロープ降下法で学習した場合、5回目の学習エポックを経て、誤差は42%程度に安定しました


ミスフラクタルのチャートを見ると、トレーニング全体を通して徐々に値が上がっていることがわかります。 しかし、12回のトレーニングエポックを経て、徐々に値の成長率が低下していきます。 エポック14回目以降は72.5%でした。 ストキャスティックスロープ降下法を用いて同様のニューラルネットワークを学習したところ、10エポック後のフラクタルの欠落率は学習率の差で97~100%でありました。


作者: Dmitriy Gizlyk

 

+

これはMLPの例ですか? アダムによって学習は速くなりましたか?前回はエポック学習にとても時間がかかったのを覚えている

確率的勾配は確かに非常に長い時間を要する

 

記事をありがとう。

学習損失関数を計算するための他の方法を整理する予定はありますか?

 

ドミトリー・ギズリク- あなたは理論だけでなく実践もしているのですか、それとも永遠の「先生」なのですか?

実践とは、あなたのメソッドの助けを借りて取引を成功させることですか?

Dmitriy Gizlyk
Dmitriy Gizlyk
  • www.mql5.com
Опубликовал статью Нейросети — это просто (Часть 7): Адаптивные методы оптимизации В предыдущих статьях для обучения нейронной сети использовался метод стохастического градиентного спуска с применением единого коэффициента обучения для всех нейронов в сети. В данной статье предлагаю посмотреть в сторону адаптивных методов обучения, которые...
 
Boris Egorov:

ドミトリー・ギズリク- あなたは理論以外に実践を積んでいるのか、それとも永遠の "教師 "なのか?

実践とは、あなたの手法の助けを借りて取引を成功させることですか?

あなたは記事にお金を印刷するマシンを含めるようにしたいですか?

男は、ネットワークアーキテクチャとその組織のバリエーションについて話している、何が面白いのか、ネットワークに何を供給するかはユーザー次第です。

 

質問CLayerクラスで列挙と変数を作る目的は何ですか?

enum ENUM_BUFFERS
  {
   WEIGHTS,
   DELTA_WEIGHTS,
   OUTPUT,
   GRADIENT,
   FIRST_MOMENTUM,
   SECOND_MOMENTUM
  };

と変数を作る目的は何ですか?

class CLayer: public CArrayObj
  {
private:
...
   int               hWeights;
   int               hDeltaWeights;
   int               hOutput;
   int               hGradient;
...   
  };

コードを見ても用途がわかりません。

 
Aleksei Lesnikov:

質問どのような目的で移籍が行われるのですか?

とCLayerクラスの変数は何のために作られるのですか?

コードを見ても用途がわかりません。

ご指摘ありがとうございます。これらは下書きから残っているものなので、削除して構いません。

 

ファイルを読み込もうとして、こんなエラーに遭遇したことのある方はいらっしゃいますか?

OnInit - 198 ->AUDNZDの 読み込みエラー

 
Borys Ivanov #:

ファイルを読み込もうとしたときに、このエラーに遭遇したことのある方はいらっしゃいますか?

OnInit - 198 -> AUDNZDの読み込みエラー。

このメッセージは、事前にトレーニングされたネットワークが読み込まれていないことを知らせるものです。EAを初めて実行する場合は、このメッセージに注意する必要はありません。すでにニューラルネットワークをトレーニング済みで、引き続きトレーニングを行いたい場合は、ファイルからのデータ読み込みエラーがどこで発生したかを確認する必要があります。

残念ながら、エラーコードが明記されていないため、詳細についてはお答えできません。
 
Dmitriy Gizlyk #:

このメッセージは、事前にトレーニングされたネットワークがロードされていないことを知らせるだけです。EAを初めて実行する場合は、このメッセージに注意する必要はありません。すでにニューラルネットワークをトレーニング済みで、引き続きトレーニングを行いたい場合は、ファイルからのデータ読み込みエラーがどこで発生したかを確認する必要があります。

残念ながら、エラーコードが明記されていませんので、これ以上のことは言えません。


こんにちは。

もう少し詳しくお話ししましょう。

Expert Advisorを初めて起動するとき。コードを修正したところ

 dError=Net.getRecentAverageError();
         if(add_loop)
           {
            Net.Save(FileName+".nnw",dError,dUndefine,dForecast,dtStudied,false);
            printf("Era %d -> error %.2 f %% forecast %.2 f",count,dError,dForecast);
           }
         ChartScreenShot(0,FileName+IntegerToString(count)+".png",750,400);
         int h=FileOpen(CSV,FILE_READ|FILE_WRITE|FILE_CSV);
         if(h!=INVALID_HANDLE)
           {
            FileSeek(h,0,SEEK_END);
            FileWrite(h,eta,count,dError,dUndefine,dForecast);
            FileFlush(h);
            FileClose(h);
            Print("Файл должен быть создан ChartScreenShot ");
           }
          else Print("Операция FileOpen ChartScreenShot неудачна, ошибка ",GetLastError()); 
        }
     }

ログにはこのように書かれています:

KO 0 18:49:15.205 Core 1 NZDUSD: 27 バイトの履歴データをロードして 0:00:00.001 に同期します。

FI 0 18:49:15.205 Core 1 NZDUSD: 履歴を 2016.01.04 から 2022.06.28 に同期

FF 0 18:49:15.205 Core 1 2019.01.01 00:00:00 OnInit - 202 -> Error of reading AUDNZD_PERIOD_D1_ 20Fractal_OCL_Adam 1.nnw prev Net 0

CH 0 18:49:15.205 Core 1 2019.01.01 00:00:00 OpenCL: GPU デバイス 'gfx902' が選択されました。

KN 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Era 1 -> error 0.01 % forecast 0.01

QK 0 18:49:15.205 Core 1 2019.01.01 00:00 作成するファイル ChartScreenShot

HH 0 18:49:15.205 Core 1 2019.01.01 00:00 時代 2 -> エラー 0.01 % 予想 0.01

CP 0 18:49:15.205 Core 1 2019.01.01 00:00 作成するファイル ChartScreenShot

PS 2 18:49:19.829 Core 1 接続解除

OL 0 18:49:19.829 Core 1 接続クローズ

NF 3 18:49:19.829 テスター ユーザーにより停止


И в директории "C:\Users\Borys\AppData\Roaming\MetaQuotes\Tester\BA9DEC643240F2BF3709AAEF5784CBBC\Agent-127.0.0.1-3000\MQL5\Files"

このファイルが作成される:

Fractal_10000000.csv

#define  FileName        Symb.Name()+"_"+EnumToString((ENUM_TIMEFRAMES)Period())+"_"+IntegerToString(HistoryBars,3)+StringSubstr(__FILE__,0,StringFind(__FILE__,".",0))
#define  CSV             "Fractal_"+StringSubstr(DoubleToString(eta),2)+".csv"

が作成される:

0.1 1 0.006391065067727753 0.30606698779533065 0.009849141883310947
0.1 2 0.01416031275898674 0.320172057079727 0.009671500063084178
0.1 1 0.021322935369592233 0.4824709164481285 0.009510368103745911
0.1 2 0.03047882579179044 0.4736268224037817 0.009336035129387396
0.1 1 0.04096262961921367 0.4747386346906194 0.009164897823757697
0.1 2 0.04745129346676422 0.9935630387598718 0.1983981648307233

といった具合だ。

再起動しても同じエラーが表示され、.csv ファイルは上書きされます

つまり、Expert はファイルが見つからないため、常にトレーニング中なのです。

また、2つ目の質問として、ネットワークがトレーニングされているときに売り注文を出すためのコード(出力ニューロンからデータを読み取る)を教えてください。


記事と回答に感謝します。

 
Borys Ivanov #:


こんにちは。

詳しくお話ししましょう。

Expert Advisor を初めて起動したとき、次のようなメッセージが表示されます。このコードの修正で

ログにこう書かれています:

KO 0 18:49:15.205 Core 1 NZDUSD: 27 バイトの履歴データをロードして、0:00:00.001 に同期します。

FI 0 18:49:15.205 Core 1 NZDUSD: 履歴は 2016.01.04 から 2022.06.28 まで同期された。

FF 0 18:49:15.205 Core 1 2019.01.01 00:00:00 OnInit - 202 -> AUDNZD_PERIOD_D1_ 20Fractal_OCL_Adam 1.nnwの読み取りエラー prev Net 0

CH 0 18:49:15.205 Core 1 2019.01.01 00:00:00 OpenCL: GPU デバイス 'gfx902' が選択されました。

KN 0 18:49:15.205 Core 1 2019.01.01 00:00:00 Era 1 -> error 0.01 % forecast 0.01

QK 0 18:49:15.205 Core 1 2019.01.01 00:00 作成するファイル ChartScreenShot

HH 0 18:49:15.205 Core 1 2019.01.01 00:00 時代 2 -> エラー 0.01 % 予想 0.01

CP 0 18:49:15.205 Core 1 2019.01.01 00:00:00 ファイルを作成する必要があります ChartScreenShot

PS 2 18:49:19.829 Core 1 接続解除

OL 0 18:49:19.829 Core 1 接続終了

NF 3 18:49:19.829 Tester stopped by user


И в директории "C:\Users\Borys\AppData\Roaming\MetaQuotes\Tester\BA9DEC643240F2BF3709AAEF5784CBBC\Agent-127.0.0.1-3000\MQL5\Files"

このファイルは作成される:

Fractal_10000000.csv

が作成されます:

0.1 1 0.006391065067727753 0.30606698779533065 0.009849141883310947
0.1 2 0.01416031275898674 0.320172057079727 0.009671500063084178
0.1 1 0.021322935369592233 0.4824709164481285 0.009510368103745911
0.1 2 0.03047882579179044 0.4736268224037817 0.009336035129387396
0.1 1 0.04096262961921367 0.4747386346906194 0.009164897823757697
0.1 2 0.04745129346676422 0.9935630387598718 0.1983981648307233

その他

もう一度実行すると、同じエラーが表示され、.csvファイルは上書きされる

つまり、Expert Advisorはファイルが見つからないため、常に学習中なのだ。

また、2つ目の質問ですが、ネットワークが学習されたときに売り注文を出すためのコード(出力ニューロンからデータを読み出すためのコード)を教えてください。


記事と回答に感謝します。


あなたはストラテジーテスターでニューラルネットワークを訓練しようとしています。それはお勧めできません。あなたが学習ロジックにどのような変更を加えたのか、私にはわかりません。この記事では、モデルのトレーニングはループで構成されています。そして、モデルが完全にトレーニングされるか、EA が停止するまで、このサイクルが繰り返されました。そして、過去のデータは直ちにダイナミック・アレイに完全にロードされました。私はこのアプローチを使ってリアルタイムでExpert Advisorを実行した。学習期間は外部パラメータで設定した。

ストラテジーテスターでExpert Advisorを起動すると、パラメータで指定した学習期間がテスト期間の最初からヒストリーの深さにシフトされる。また、MT5 ストラテジーテスターの各エージェントは独自の「サンドボックス」で動作し、ファイルを保存します。そのため、ストラテジーテスターでExpert Advisorを再実行すると、以前に学習したモデルのファイルが見つかりません。

Expert Advisorをリアルタイムモードで実行し、EAの動作停止後に拡張子がnnwのファイルが作成されることを確認してみてください。これが学習済みモデルのファイルです。

実際の取引でモデルを使用するには、Net.FeedForwardメソッドのパラメータに現在の市場状況を渡す必要があります。そして、Net.GetResultメソッドを使ってモデルの結果を取得します。後者のメソッドの結果、バッファにはモデルの作業結果が格納されます。