训练神经网络的问题之一是再训练。这是算法学习到可以很好地处理它所看到的数据的时候,但是在其他情况下,它可以应对更糟的情况。在本文中,我们描述了如何通过结合梯度下降训练和进化方法来解决此问题。

如果有人想更好地理解下面将要讨论的内容,则可以在中心阅读这些文章:article1和article2
( , , , )
, , . .
, , . , .
P.S. , , ., , , . .
:
-
- N -
- K
- -
- ( )
- 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) . — . ?
- .
.
, . accuracy , , . . ( 2).
.
? ? . SGD () . . , .
:
Accuracy 47.81% — .
Accuracy 47.72% — SGD.
. 40 . SGD . .
4 , resnet18 accuracy. accuracy. .
. .
, . , .
, .
.. , . . , .
.
:
- , .
- . , .
- . .
- 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
Loss — , . SGD , , .
Validation — accuracy. , - 5 SGD , , , SGD+
Final score — accuracy , .
: SGD , c .
, , , , Google .
accuracy
:
- Adam, , . .
- 可以使突变成为优化程序的一部分,而不是为此编写单独的shell
- 花了比我们计划多几倍的时间
我们很高兴不仅收到有关内容的反馈,而且也收到有关文章本身的反馈。如果您对这个主题感兴趣或感兴趣,那么也可以写信,很高兴聊聊,也许我们错过了一些。
有用的链接
- 添加梯度噪声可改善超深层网络的学习
- 用于深度神经网络优化的演化随机梯度下降
- 进化策略作为强化学习的可扩展替代方案