Entrenamiento espartano de la red neuronal

Uno de los problemas de entrenar redes neuronales es el reciclaje. Esto es cuando el algoritmo aprendió a funcionar bien con los datos que vio, pero en otros lo hace peor. En el artículo, hablamos sobre cómo tratamos de resolver este problema combinando el aprendizaje con el descenso de gradiente y un enfoque evolutivo.


imagen


Si alguien quiere comprender mejor lo que se discutirá a continuación, puede leer estos artículos en el centro : artículo1 y artículo2


( , , , )


, , . .


, , . , .


P.S. , , ., , , . .


:


-


  1. N -
  2. K
  3. -
  4. ( )
  5. goto 1

:


— CIFAR10
— resnet18
— SGD
— CrossEntropyLoss
— accuracy
5
50 ,
40-50


: , ..


№1. .


.


: Adding Gradient Noise Improves Learning for Very Deep Networks, Evolutionary Stochastic Gradient Descent for Optimization of Deep Neural Networks.


For i in range(N):
    N  - 
       SGD
   #   
   For k in range(K):
         
             .

, .


G .


:


  1. , , .
  2. ( 1) . — . ?
  3. .

.


imagen
1. accuracy.

, . accuracy , , . . ( 2).


imagen
2. .

.
? ? . SGD () . . , .


:
Accuracy 47.81% — .
Accuracy 47.72% — SGD.


. 40 . SGD . .


imagen
1. ccuracy, resnet18, CIFAR10 10 , SGD. 40 5 . . SGD, .
imagen
:--:
2. ccuracy, resnet18, CIFAR10 10 , SGD. 40 5 . accuracy. SGD, .

4 , resnet18 accuracy. accuracy. .


. .
, . , .


, .


.. , . . , .


.


:


  1. , .
  2. . , .


  1. . .
  2. backward.

№2.


OpenAI Evolution Strategies as a Scalable Alternative to Reinforcement Learning, https://github.com/staturecrane/PyTorch-ES


For i in range(N):
    N  -   SGD
   For k in range(K):
         
         
          
     


— . -1 1 σ, .



normalized_rewards = (rewards - np.mean(rewards)) / np.std(rewards)
for index, param in enumerate(self.weights):
   A = np.array([p[index] for p in population])
   rewards_pop = torch.from_numpy(np.dot(A.T,normalized_rewards).T).float()
   param.data = param.data + LEARNING_RATE/(POPULATION_SIZE * SIGMA) * rewards_pop

. - . , . .



/ — SGD+
/ — SGD


CPretrained

Loss — , . SGD , , .


Validation — accuracy. , - 5 SGD , , , SGD+


Final score — accuracy , .


: SGD , c .
, , , , Google .


accuracy


Pretrained
SGD47.72%68.56 %
47.81%68.61 %
SGD + OpenAI49.82%69.45 %

:


  1. Adam, , . .
  2. Era posible hacer que las mutaciones formaran parte del optimizador, en lugar de escribir un shell separado para esto
  3. Tomó varias veces más tiempo del que planeamos

Estaremos encantados de recibir comentarios no solo sobre el contenido, sino también sobre el artículo en sí. Si está interesado en este tema o estaba interesado, entonces escriba también, sería genial hablar, tal vez nos perdimos algo.


Enlaces útiles


  1. Agregar ruido de degradado mejora el aprendizaje para redes muy profundas
  2. Descenso de gradiente estocástico evolutivo para la optimización de redes neuronales profundas
  3. Estrategias de evolución como una alternativa escalable al aprendizaje por refuerzo

All Articles