之前做textcnn模型训练的时候,最后会用到优化器,tensorflow提供了几种不同的优化函数,对比如下,参考了一篇文章,感觉写的很形象,链接:http://www.imooc.com/article/264477。
这些优化函数都是继承自Optimizer 的子函数。有时候遇到梯度消失,局部最优解导致收敛变慢的情况,可能是优化函数选择的不合适,或者激活函数不合适。
几个常见的
-
Gradient Decent
这是最基础的梯度下降算法,更新权重W,不多解释。
W += - α * dx
其中 α是learning rate(学习速率)。我们可以把下降的损失函数看成一个机器人,由于在下降的时候坡度不是均匀的,机器人会左右摇摆,所以下降速度会比较慢,有时候遇到局部最优,还可能在原地徘徊好长时间。 -
Momentum
顾名思义这个优化算法实际上给了一个动量,让机器人下降的的时候带一个惯性,下降的速度就加快了。
算法如下:
m = b1*m - α * dx
W += m -
AdaGrad
这个算法是通过动态改变学习速率,提高下降速度,相当于给机器人穿上一个左右侧滑有阻力的鞋子,让它只好沿着正确的方向下滑。
v = dx^2
W += -(α/sqrt(v)) * dx
-
RMSProp
这个算法相当于在AdaGrad中引入了Momentum的惯性
v = b1 * v + (1-b1)*dx^2
W += -(α/sqrt(v)) * dx
但是RMSprop缺少了Momentum的变量m -
Adam
Adam是目前用得最广的优化算法,它结合了AdaGrad和Momentum的优点(所以叫才Adam嘛)
m = b1m + (1-b1)dx
v = b2v + (1-b2)dx^2
W += -(α*m/sqrt(v)) * dx
这个算法相当于给机器人一个惯性,同时还让它穿上了防止侧滑的鞋子,当然就相当好用用啦。
网友评论