Обсуждение статьи "Машинное обучение и Data Science (Часть 21): Сравниваем алгоритмы оптимизации в нейронных сетях"

 

Опубликована статья Машинное обучение и Data Science (Часть 21): Сравниваем алгоритмы оптимизации в нейронных сетях:

В этой статье мы заглянем в самую глубь нейронных сетей и поговорим об используемых в них алгоритмах оптимизации. В частности обсудим ключевые методы, которые позволяют раскрыть потенциал нейронных сетей и повысить точность и эффективность моделей.

Кажется, сегодня все интересуются искусственным интеллектом. Он повсюду, и крупные игроки в технологической индустрии, такие как Google и Microsoft, стоящие за openAI, продвигают использование ИИ в самых различных аспектах и отраслях, таких как развлечения, индустрия здравоохранения, искусство, творчество, и т. д. 

Идея нейронных сетей и машинного обучения уже давно доступна и в MetaTrader 5. Например, в языке есть нативная поддержка матриц и векторов и архитектуры ONNX. Стало возможным создавать торговые модели с искусственным интеллектом любой сложности. Вам даже не нужно быть экспертом в линейной алгебре или других смежных науках, чтобы понимать все, что происходит в системе.

Несмотря на все это, сейчас труднее найти основы машинного обучения, чем когда-либо. Но без базовых знаний невозможно понять, как работает ИИ и как его можно использовать. Понимание того, что нужно делать и для чего, делает вас гибче и позволяет реализовать разные возможности. Есть очень много вещей, которые нам предстоит обсудить в области машинного обучения. Сегодня мы поговорим об алгоритмах оптимизации, узнаем, что это такое и как они соотносятся друг с другом, когда и какой алгоритм оптимизации следует выбрать для повышения производительности и точности нейронных сетей.

Оптимизаторы нейронных сетей

Автор: Omega J Msigwa

 

Скрипт из статьи выдаёт ошибку:

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

 
Andrey Dik #:

Скрипт из статьи выдаёт ошибку:

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

Проблема оказалась в том, что скрипт не нашел файл с данными для обучения. Но, в любом случае, программой должен обрабатываться такой случай, если файл с данными не найден.

Но теперь такая проблема:

2024.11.21 17:27:37.038    Optimization Algorithms testScript (EURUSD,M1)    50 undeleted dynamic objects found:
2024.11.21 17:27:37.038    Optimization Algorithms testScript (EURUSD,M1)       10 objects of class 'CTensors'
2024.11.21 17:27:37.038    Optimization Algorithms testScript (EURUSD,M1)       40 objects of class 'CMatrix'
2024.11.21 17:27:37.038    Optimization Algorithms testScript (EURUSD,M1)    14816 bytes of leaked memory found

Похоже, не удалены объекты классов.
 
Andrey Dik #:

Проблема оказалась в том, что скрипт не нашел файл с данными для обучения. Но, в любом случае, программой должен обрабатываться такой случай, если файл с данными не найден.

Но теперь такая проблема:

2024.11.21 17:27:37.038    Optimization Algorithms testScript (EURUSD,M1)    50 undeleted dynamic objects found:
2024.11.21 17:27:37.038    Optimization Algorithms testScript (EURUSD,M1)       10 objects of class 'CTensors'
2024.11.21 17:27:37.038    Optimization Algorithms testScript (EURUSD,M1)       40 objects of class 'CMatrix'
2024.11.21 17:27:37.038    Optimization Algorithms testScript (EURUSD,M1)    14816 bytes of leaked memory found

Похоже, не удалены объекты классов.

Это связано с тем, что для одного экземпляра класса должна быть вызвана только одна функция «подгонки». Я вызвал несколько функций подгонки, что приводит к созданию нескольких тензоров в памяти. Это было в образовательных целях.

/*
   Calling multiple fit functions of one neural network class in one program is a bad Idea, too many objects will
   be left undeleted from memory, the best Idea would be to delete each instance of a class and call it again after each 
   fit fuction.
*/

  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;