深度学习《CNN架构续篇 - 梯度下降的优化》

骚话一下:
今天是2020年10月2号,继续学习。本文依然是《CNN架构》的延续博文,重点介绍优化的新的梯度下降算法。

一:梯度下降的种类
说到梯度下降的方法,确实是求最优解的比较好的途径了,一步一步通过迭代到达最优解,之前在机器学习的博文里面,我们也是学习到了梯度下降的很多运用场景。
今天我们来说一下,我们之前学习的梯度下降的算法,我们还有哪些优化的方式。梯度下降有是三个种类。
1)批量梯度下降(Batch Gradient Descent)
简单理解就是每一次迭代,都是根据所有的样本计算更新参数的。
在这里插入图片描述

也就是在计算偏导数的时候,会把所有的样本都用上。等所有的样本都进行完运算后再对参数进行更新。在网络层度很深,且数据量大的时候,收敛特别慢,而且比较容易导致梯度消失或者梯度爆炸。

2)随机梯度下降(Stochastic Gradient Descent)
这个呢,就是每次计算一个样本的输出,直接进行参数更新,也不用管别的参数,这样做的好处就是训练快速,省去了等待很多样本的计算时间。
在这里插入图片描述

在迭代过程中由于太随机了,可能每次收敛的时候偏差比较大,就是方向偏差比较大,容易陷入局部最优解,不能快速得到最优解。想象成,Batch梯度下降太慢了,但是基本上方向比较平滑,大概率不会错方向。随机梯度下降呢,太随意了,每一次迭代,下降的方向可能有很大偏差,主方向不怎么平滑,一直在在抖动。跌跌撞撞到了某个最小值,还可能不是最优解。

3)小批量梯度下降(Mini-batch Gradient Descent)
上面所述的两个下降方式都太极端了,一个在每次迭代用了所有的样本,一个在每次迭代仅仅用了一个样本,因此Mini-batch就是每次只用一部分样本,也不是全部,取一部分,在以上两个极端的情况取一个比较中和一些的方式。
比如取N个样本在每次的迭代,N<M。
在这里插入图片描述

如下的内容全是学习自Andrew Ng的深度学习视频。截图也是来自于此视频!!!。
如下的内容全是学习自Andrew Ng的深度学习视频。截图也是来自于此视频!!!。
如下的内容全是学习自Andrew Ng的深度学习视频。截图也是来自于此视频!!!。

二:指数加权平均

我们先来看个统计学上的计算方式,名叫做指数加权平均。
先来看个例子,Andrew在视频中用天气的举例。横轴为日期,纵轴为温度。
在这里插入图片描述

很明显我们会发现这个图像采点的走向有一定的趋势,但是存在很大的波动,也就是朝着某个大方向走势前进,像一个半圆的走势,只是由于波动,每一天都变得确定,如果我们想预测某一天的气温大概的估计值(测量值村子波动),也就是想拟合一下这些数据,给每天一个估计值,怎么做呢?

指数移动加权平均法,是指各数值的加权系数随时间呈指数式递减,越靠近当前时刻的数值加权系数就越大,越远离当前时刻的数值加权系数就越小。
在这里插入图片描述

简单解释下,也就是为了每一天的估计值,都是用的是之前的值加上当前的测量值,乘以加权系数得到,至于为什么叫做指数呢,我们如果把V_(t-1)不断替换到V_(t-n)就会发现历史数据的加权值是呈指数的。这个公式怎么来描述上述这些图像点的趋势呢?我们还是举一个例子观察。
在这里插入图片描述

现在我们描绘这个公式的值过程,红色线即是公式的估计值。
在这里插入图片描述

可以看出来,红色的线就是我们的公式所描述的预测值的话,波动小很多,也就是噪声降低很多,相对平滑,反应总的趋势走向更加明显。也就是说对原来的数据起到了某种平滑的作用,不再有很大波动干扰。

我们观察到与β加权的是历史数据,与(1-β)加权的当前测量值,也就是说β越大,历史数据占得比重越大,反之β越小,历史数据占得比重越小。

如果我们假设β变化的情况,会怎么样呢?看下下面的三个举例。
当 β = 0.9 时,指数加权平均最后的结果如图红色线所示,代表的是最近 10 2天的平均温度值;
当 β = 0.98 时,指结果如图绿色线所示,代表的是最近 50 天的平均温度值;
当 β = 0.5 时,结果如下图黄色线所示,代表的是最近 2 天的平均温度值;

在这里插入图片描述

从图中那个可以看出来,β值越大,历史比重越大,图像的估计值也就是越平滑,但是也有缺点就是出现了延迟拟合,β值越小,历史数据的比重越小,越接近当前值,拟合程度很好,但是波动大,噪声大。因此,需要取值一个合适的β值。

指数加权平均,还有一个好处就是,只用记住上一次的值状态值是多少,不用记录特别多的历史数据,而且计算量也减少了很多。相比于普通的算术平均加权,明显有存储量和计算量的优势的哈。

三:EMA偏差修正
在这里插入图片描述

上一章节讲解了指数加权平均和作用,假如β = 0.98,我们希望得到的是图中绿色的线,但是很不幸,如果我们按照初始值等于0的情况估计的话,在最开始的几个点内其实曲线是图中紫色的那条线,也就是在开始的几个点的处理方式会有和元数据较大的偏差,这叫做“冷启动”的问题,怎么解决呢?

在这里插入图片描述

当 t很小时,分母很小,假设t是从t=1开始的,可以很好的放大到当前的测量的数值;当 t很大时,分母的数值趋于1,退化到了没有偏差因子的式子,对当前数值几乎没有影响,也不影响指数加权。这样就拟合到了绿色那条线。成功解决了冷启动的问题。

学数学是多么有用的事情,解决这样的问题都是用的基本的数学知识。

EMA 主要是被应用在动量优化算法中,比如Adam算法中的一阶矩和二阶矩都采用了上面修改后的EMA算法。

四:动量梯度下降(momentum Gradient Descent)

Momentum 梯度下降法,就是计算了梯度的指数加权平均数,并以此来更新权重,它的运行速度几乎总是快于标准的梯度下降算法。怎么快呢?举个例子,我们朝着梯度减少的方向一步一步走,下网走到谷底,标准的学习的梯度下降算法不关心,历史数据,只顾眼前的测量值,那么很容易出现一些波动,噪声的干扰,也就是跌跌撞撞地走向谷底。运用了指数加权平均后,引入了历史数据的影响,或许更加清楚大致反向的位置,减少跌跌撞撞地幅度,路线变得平滑,因此,少走了很多弯路,自然,速度也就快了。

这也是在上一章节为什么花了那么多篇幅讲解指数加权的作用的原因,是可以被运用到梯度下降算法中解决实际问题的。

Therfore,我们来看看指数加权怎么运用到梯度下降的呢?也就是这这一章节要讲解的动量梯度下降算法。

先来看看标准的梯度下降过程:
在这里插入图片描述

我们的梯度下降的方向就是红色的点点,目标是明确的,路径确实曲折的,这里的山路十八弯,这里的,,,,,,,。每一步走的都很曲折,但是总体的方向就是朝着红色点进发的,多少弯路啊这。

于是我们希望减少这些弯路,或者说,每一步有更大的方向分量朝着红色点,更小的方向分量是朝着无关方向,也就是梯度下降的方向更为专注。

来了来了,这就是得用到指数加权了,我们先看过程,改造后的梯度下降算法。

在这里插入图片描述

在这里插入图片描述

我们来看看效果图:
在这里插入图片描述

图中的红色线就是新的迭代曲线,我们发现到达红色终点,迭代次数变少了,方向变得小波动了,训练速度也加快了很多,这就是动量梯度下降的好处。

五:RMSprop算法(root mean square prop)
这是个啥?还是对梯度下降的优化算法了啦。
在这里插入图片描述

更新过程中,分子仍然是偏导数测量值,分母做了变化。S_dθ的作用也是那个全局变量,存储上一次的加权值。

是的你没看错,是求当前测量值的平方(看清楚不是J(θ)的平方)再进行指数加权。在更新的时候,用当前测试纸除以加权后的值的平方根,效果如下:
在这里插入图片描述

请注意我为了做区分,用了不同的符号表示,下一章节有用的。

六:Adam算法(Adaptive Moment Estimation)

是的没错,这又是一个队梯度下降的优化算法,长期试验过程中,Momentum和RMSprop是很长时间来最经得住考研的优化算法,适合用于不同的深度学习结构。所以有人就有新的想法,何不将这俩的方法结合到一起形成新的算法呢?然后,Duang!!!,Adam算法产生了,从这里我们能看出来也许有时候一些小的优化就是一个很不错的创新,站在巨人的肩膀上向前看。

在这里插入图片描述

其实结合起来也不难看懂。主要需要看明白Momentum和RMSprop和EMA偏差修正即可看懂这个Adam

因为Adam结合上述两种优化算法的优点于一身,所以现在经常用的是Adam优化算法。

目前对梯度下降算法的优化到此为止,也基本上够用了,还有其他的一些分享且看后续,这一章节完了后我就做一个实践的例子,真正把我们学到的在Pytorch框架上用起来。

猜你喜欢

转载自blog.csdn.net/qq_29367075/article/details/108904066