机器学习系列(4):除了上双路泰坦,你还有优化算法

 反向传播算法是不错,可是训练时间有点长啊,怎么办,再加GPU?这里是机器学习系列第四篇,带你走进各种优化算法。 

 

图片挂了,大家可以移步以下链接:

https://mp.weixin.qq.com/s?__biz=MzU4NTY1NDM3MA==&mid=2247483786&idx=1&sn=e65a1480c67bd27e14de01691bbb732e&chksm=fd860887caf18191f3c7b8948a141553b24af074defb463654c82bced567ddfe549053a70902&token=255604471&lang=zh_CN#rd

                                                                                                     

                                                            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中给出。

 

点击【蓝字链接】,本期代码github链接

 

 

 

往期精彩推荐

机器学习系列(1):十分钟掌握深度学习的原理、推导与实现
机器学习系列(2):初始化的一小步,网络性能的一大步      
机器学习系列(3):几分钟了解正则化及其python实现         

 

 

你的每一次改变,都深深打动我的心,有你的存在,未来才更加清晰。

-by LSayhi的神经网络

 

▼更多原创干货和最新资讯,请关注我吧▼

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值