記事「データサイエンスと機械学習(第21回):ニューラルネットワークと最適化アルゴリズムの解明」についてのディスカッション

 

新しい記事「データサイエンスと機械学習(第21回):ニューラルネットワークと最適化アルゴリズムの解明」はパブリッシュされました:

ニューラルネットワーク内部で使用される最適化アルゴリズムを解明しながら、ニューラルネットワークの核心に飛び込みます。この記事では、ニューラルネットワークの可能性を最大限に引き出し、モデルを精度と効率の新たな高みへと押し上げる重要なテクニックご紹介します。

最近では誰もが人工知能に興味を持っているようです。人工知能はどこにでもあります。オープンAIの背後にいるグーグルやマイクロソフトのようなハイテク業界の大物は、エンターテインメント、医療業界、芸術、創造性など、さまざまな側面や業界でAIの適応を推進しています。 

MQL5コミュニティでもこの傾向が見られます。当然です。Metatrader5に行列とベクトルONNXを導入したことで、あらゆる複雑さの人工知能取引モデルを作成できるようになりました。線型代数学の専門家である必要も、システムに含まれるすべてを理解できるオタクである必要もなくなったのです。

にもかかわらず、機械学習の基本を見つけることはかつてないほど難しくなっています。しかし、それらはAIについての理解を確固たるものにするのと同じくらい重要な知識です。自分の作業の理由を知ることで柔軟になり、選択肢を行使できるようになります。機械学習についてはまだお話ししていないことがたくさんあります。本日は、最適化アルゴリズムにはどのようなものがあるのか、また、最適化アルゴリズム間にどのような違いがあるのか、いつ、どの最適化アルゴリズムを選択すればニューラルネットワークのパフォーマンスと精度が向上するのかをご紹介します。

neural network optimizers

作者: Omega J Msigwa

 

記事のスクリプトではエラーが出る:

2024.11.21 15:09:16.213 Optimisation Algorithms testScript(EURUSD,M1) Zero divide, check divider for zero to avoid this error in 'D:¥Market¥MTMT5¥MQL5¥Scripts¥Optimization Algorithms testScript.ex5'.

 
Andrey Dik (EURUSD,M1) Zero divide, check divider for zero to avoid this error in 'D:¥Market¥MTMT5¥MQL5¥Scripts¥Optimization Algorithms testScript.ex5'.

問題は、スクリプトがトレーニングデータのファイルを見つけられなかったことだと判明した。しかし、いずれにせよ、データファイルが見つからない場合、プログラムはこのようなケースに対処しなければならない。

しかし、今そのような問題が起きている:

2024.11.21 17:27:37.038 Optimisation Algorithms testScript (EURUSD,M1) 50 undeleted dynamic objects found:
2024.11.21 17:27:37.038 最適化アルゴリズム testScript (EURUSD,M1) 10 objects of class 'CTensors'
2024.11.21 17:27:37.038 最適化アルゴリズム testScript (EURUSD,M1) 40 objects of class 'CMatrix'
2024.11.21 17:27:37.038 最適化アルゴリズム testScript (EURUSD,M1) 14816 バイトのリークメモリが見つかりました。

クラスのオブジェクトが削除されていないようです。
 
Andrey Dik #:

問題は、スクリプトがトレーニング用のデータ・ファイルを見つけられなかったことだった。しかし、いずれにせよ、データファイルが見つからない場合、プログラムはこのようなケースに対処しなければならない。

しかし今、そのような問題が起きている:

2024.11.21 17:27:37.038 Optimisation Algorithms testScript (EURUSD,M1) 50 undeleted dynamic objects found:
2024.11.21 17:27:37.038 最適化アルゴリズム testScript (EURUSD,M1) 10 objects of class 'CTensors'
2024.11.21 17:27:37.038 最適化アルゴリズム testScript (EURUSD,M1) 40 objects of class 'CMatrix'
2024.11.21 17:27:37.038 最適化アルゴリズム testScript (EURUSD,M1) 14816 バイトのリークメモリが見つかりました。

クラスオブジェクトが削除されていないようです。

これは、1つのクラスの1つのインスタンスに対して、1つの "fit "関数しか呼び出されないはずだからです。複数のfit関数を呼び出した結果、メモリ内に複数のテンソルが作成された。


 /*
 メモリから削除されずに残るオブジェクトが多すぎます。
 フィット関数を実行するたびに、クラスの各インスタンスを削除し、再度呼び出すのが最善の方法です。
*/

  nn.fit(x_train, y_train, new OptimizerMinBGD(nn_learning_rate), nn_epochs, nn_batch_size, show_batch);
  nn.fit(x_train, y_train, new OptimizerRMSprop(nn_learning_rate, 0.1), nn_epochs, nn_batch_size, show_batch);
  nn.fit(x_train, y_train, new OptimizerAdaGrad(nn_learning_rate), nn_epochs, nn_batch_size, show_batch);
  nn.fit(x_train, y_train, new OptimizerAdam(nn_learning_rate), nn_epochs, nn_batch_size, show_batch);
  nn.fit(x_train, y_train, new OptimizerAdaDelta(nn_learning_rate), nn_epochs, nn_batch_size, show_batch);
  nn.fit(x_train, y_train, new OptimizerNadam(nn_learning_rate), nn_epochs, nn_batch_size, show_batch);
   
  delete nn; 

このようになるはずだ;

//---

  nn = new CRegressorNets(hidden_layers, AF_RELU_, LOSS_MSE_); 
  
  x_train = scaler.fit_transform(x_train);

  nn.fit(x_train, y_train, new OptimizerMinBGD(nn_learning_rate), nn_epochs, nn_batch_size, show_batch);
   
  delete nn; 
  
//---

  nn = new CRegressorNets(hidden_layers, AF_RELU_, LOSS_MSE_); 
  
  x_train = scaler.fit_transform(x_train);

  nn.fit(x_train, y_train, new OptimizerAdam(nn_learning_rate), nn_epochs, nn_batch_size, show_batch);
   
  delete nn;