深度神经网络常用优化算法

MINI-BRATCH

这个就是把一个大训练集分成几个小训练集去训练

主要原因,,,,是因为训练集太大,显存塞不下

这样的话,loss会有一定波动,就是有时上升,有时下降,但总体趋势是下降的

最后精度上升到一个值后,训练很多次都没有上升,训练完成

 

动量梯度下降:

简单来说就是在训练一整个训练集的时候

w =  w - dw_change

b同理

 

dw_change 是这么得出来的

以下dw_change简写为dw_c

 

dw_c1 = a * dw_c0 + (1 - a) * dw1

dw_c2 = a * dw_c1 + (1 - a) * dw2

 

实际上就是削弱了一个训练集对w的影响

其实这个东西更像一个求平均值的过程,因为有求了这个平均值所以,我们loss上下摆动的幅度会变小

而且我们想最优解移动的步伐会加大(因为累加了之前的数嘛)

这样就加速了训练

 

红点是最优解

蓝色是用普通的梯度下降

红色是用动量梯度下降法

 

但是有一个问题,就是在做指数加权平均时,在训练刚开始的阶段,由于我们的训练样本对w,b的影响较小,使得训练变慢

这个时候可以暂时先不用指数加权平均,之后再用,比如训练了200个样本之后

也可以熬过前面这训练刚开始的阶段

 

我一般选择熬过这一阶段,因为另一个方法写起来太复杂了

 

RMS_Prob

s_dw = b * s_dw + (1 - b) * dw * dw

w = w - a * (dw/更号(s_dw))

对于b也是这样的

 

那么对于某一步而言,如果这一步在某一维(wi)上波动较大

那么dw变大  ->  s_dw变大

 dw/更号(s_dw) 变小

减小了这一步在wi这一维上的波动

 

同理, 如果这一步在某一维上的波动过小

那RMS_Prop也能提高在这一维上的波动

 

总的来说,RMS_Prob会让loss的下降在一定的,我们可以接受的范围内波动

从而使训练的方向更多的指向最优解,加速训练过程

 

Adam优化算法:

可以看见,我的动量梯度下降是优化的分子,RMS_Prob是优化的分母

两个加起来就是Adam了

这里就不做详细描述了

 

也就是说Adam有4个超参数

learning_rate, a1(动量梯度下降), a2, b(RMS_Prob)

 

posted @ 2018-04-25 21:21  shensobaolibin  阅读(256)  评论(0编辑  收藏  举报