“ 反向传播算法是不错,可是训练时间有点长啊,怎么办,再加GPU?这里是机器学习系列第四篇,带你走进各种优化算法。 ”
图片挂了,大家可以移步以下链接:
00 内容概览
机器学习系列(4):提高深度网络性能之 - 优化算法
深度学习中反向传播的目标是,找到最优的参数(如W、b),使得cost function最小(或者一个泛化性能足够好的极小值),如何使得代价函数更好收敛以及如何加快收敛过程,分别对应着深度网络对精度和速度的要求,那么好的优化算法就显得至关重要了,一个好的优化算法可以在精度与速度之间寻求平衡,或者同时提高两者。
优化算法:
-
梯度下降
-
mini-bacth梯度下降
-
随机梯度下降
-
动量梯度下降
-
RMSprop
-
Adam
-
学习率衰减
-
AdamW ( 待单独更新 )
Python实现:
-
见文章内容
申明
本文原理解释及公式推导部分均由LSayhi完成,供学习参考,可传播;代码实现部分的框架由Coursera提供,由LSayhi完成,详细数据及代码可在github查阅。
https://github.com/LSayhi/DeepLearning
微信公众号:AI有点可ai
01 优化算法介绍
一、 Bacth梯度下降
-
Bacth梯度下降指的是批量梯度下降(Batch Gradient Descent),是在寻找最优参数W和b的过程中,我们使用凸优化理论中的梯度下降方式,而且每一步操作都是对整个训练集(所有m个样本)一起操作的。批量梯度下降算法,for l = 1, …, L:
这里的L指的是网络层数,alpha 指的是学习率(learning_rate). -
批量体现在,将所有m个样本向量化,这样就可以避免使用显式for循环,从而降低时间复杂度,这样做的好处是能够大大减小梯度下降所需的的时间,很可能原本需要几天的过程,现在只需几个小时。
Figure 1:梯度下降是沿着代价函数梯度下降最快的方向更新参数
二、Mini-bacth 梯度下降
-
Mini-bacth梯度下降是指将所有m个样本分为多个小集合(每个小集合就称为mini-bacth),然后再分别应用梯度下降法,这样做的原因是,虽然批量梯度下降法已经通过向量化大大减小了训练时间,但是当训练集的数目很大的话,处理速度仍然很慢,因为你必须每次处理所有的训练样本,然后更新参数,再不断迭代。Mini-bacth梯度下降把m个样本分成了很多子训练集,先处理一个子集,更新参数,然后再处理一个子集,再更新参数,这样会让算法速度更快。
-
mini-bacth梯度下降速度比bacth梯度下降更快,但由于不是对整个训练集进行操作,最优化的过程“摆动性”更强,会在cost function会在最小值附近摆动。
Figure 2:mini-bacth示意图
三、Stochastic梯度下降
-
Stochastic梯度下降即随机梯度下降,随机梯度下降可以看作是mini-batch的大小为1,这种方式最优化过程摆动性比mini-batch还要强,但是优点是速度会比mini-batch还要快。
Figure 1 : SGD vs GD
"+" denotes a minimum of the cost. SGD leads to many oscillations to reach convergence. But each step is a lot faster to compute for SGD than for GD, as it uses only one training example (vs. the whole batch for GD).
Figure 2 : SGD vs Mini-Batch GD
"+" denotes a minimum of the cost. Using mini-batches in your optimization algorithm often leads to faster optimization.
四、momentun
-
Momentun梯度下降能够使得以上三种方式的梯度下降更加快速。以最常用的mini-batch梯度下降为例,在最小化cost function的过程中,在纵轴方向会不停摆动,如果想要加速收敛,需调大学习率,但是就会引起cost再最小值附近摆动加大,如果调小学习率,那么收敛的速度减慢,如何在不影响cost收敛精度的同时加快收敛?momentum梯度下降刚好解决了这一问题,我们使用新的参数更新方式,使得最优化过程中,纵轴的摆动减小,横轴的速度加大,这样可以实现加快收敛。
-
Momentun梯度下降实现方式,, beta is the momentum and alpha is the learning rate.
Figure 3: The red arrows shows the direction taken by one step of mini-batch gradient descent with momentum. The blue points show the direction of the gradient (with respect to the current mini-batch) on each step. Rather than just following the gradient, we let the gradient influence and then take a step in the direction of .
五、RMSprop
-
RMSprop可以加速梯度下降,momentum是对dW、db先指数加权平均,而RMSprop是对dW、db的平方指数加权平均,更新参数时也不同,详见公式。以二维平面为例,这样做的效果是,减缓纵轴方向,加快横轴方向,当然处于高维空间时,RMSprop同样是消除摆动,加快收敛。
六、Adam
-
Adam算法是Adapitive Moment Estimation。深度学习的历史中出现了很多优化算法,有许多适用有局限,momentum和RMSprop是两种经受住考验的算法,而Adam算法就是将两种算法结合的算法,这是一种极其常用的算法,被证明能适用于不同的神经网络结构。
-
where:
-
t counts the number of steps taken of Adam
-
L is the number of layers
-
and are hyperparameters that control the two exponentially weighted averages.
-
is the learning rate
-
is a very small number to avoid dividing by zero
七、学习率衰减
-
学习率衰减是随时间慢慢减小学习率,开始阶段可以使用较大的学习率,加快收敛速度,当接近最小值时可以减小学习率,从而提高收敛精度。下图蓝色线为学习率固定时cost减小的曲线,由于alpha不随迭代次数变小,代价函数可能会在最小值附近抖动;蓝色线为学习率衰减情况,一开始由于alpha较大,收敛速度较快,接近最小值时,alpha减小,抖动减小,更容易收敛。
03 python实现
3.1 本文相应的代码及资料已经以.ipynb文件和.pdf形式在github中给出。
-
.ipynb文件在链接/Coursera-deeplearning深度学习/课程2/week2/
-
.pdf文件在链接/Coursera-deeplearning深度学习
点击【蓝字链接】,本期代码github链接
往期精彩推荐
机器学习系列(1):十分钟掌握深度学习的原理、推导与实现
机器学习系列(2):初始化的一小步,网络性能的一大步
机器学习系列(3):几分钟了解正则化及其python实现
你的每一次改变,都深深打动我的心,有你的存在,未来才更加清晰。
-by LSayhi的神经网络
▼更多原创干货和最新资讯,请关注我吧▼