优化算法

优化算法
概念:优化指的是改变x的值以最小化或者最大化某个函数f(x)的任务,通常以最小化f(x)为目标。

1:梯度下降法:

1.1 梯度的概念

梯度实际上就是多变量微分的一般化:
优化算法
如上所示:是一个函数,梯度就是对函数的每个变量进行微分,梯度是一个向量
梯度是微积分中一个很重要的概念,下面是梯度的意义

a:在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
b:在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向

2:梯度下降法通俗解释
优化算法
梯度下降法可以看做一个下山的过程,假设我们在山上的最高点(当然位置是随机的),我们想找到下山的路的方向,这个时候就要用到梯度的概念,上面说到梯度是一个向量,梯度的方向就是函数在给定初始点上升最快的方向,这样我们只要沿着梯度的反方向就能够找到下山的路,但是这里就有一个问题,我们每走一段距离就要重新测量梯度的方向(最陡峭的方向),这是比较耗时的。那么为了在太阳下山之前到达山底,就要尽可能的减少测量方向的次数。但是就有另外一个问题,如果测量的频繁,可以保证下山的方向是绝对正确的,但又非常耗时,如果测量的过少,又有偏离轨道的风险。所以需要找到一个合适的测量方向的频率,来确保下山的方向不错误,同时又不至于耗时太多!

3.梯度下降法的数学表达
优化算法
上面是J是关于Θ的一个函数,我们当前所处的位置为Θ0点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了Θ1这个点!
下面给两个小例子:
优化算法
优化算法
总结:这个下山的人实际上就代表了反向传播算法,下山的路径其实就代表着算法中一直在寻找的参数Θ,山上当前点的最陡峭的方向实际上就是代价函数在这一点的梯度方向,场景中观测最陡峭方向所用的工具就是微分 。在下一次观测之前的时间就是有我们算法中的学习率α所定义的。

4:SGD(随机梯度下降)

在每次更新时用b个样本,其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本质就是我1个指不定不太准,那我用个30个50个样本那比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的。在深度学习中,这种方法用的是最多的,因为这个方法收敛也不会很慢,收敛的局部最优也是更多的可以接受!在深度学习中,用的比较多的是mini-batch梯度下降。就是说因为下山的山谷的最低点不止一处(局部最低点),使用多一些的样本落到落到不同的最低点,最后对比高度找到最终的最低点。

5:AdaGrad(Adaptive Gradient,自适应梯度)
它能够对每个不同的参数调整不同的学习率,对频繁变化的参数以更小的步长进行更新,而稀疏的参数以更大的步长进行更新。
优化算法
gt表示第t时间步的梯度(向量,包含各个参数对应的偏导数,gt,i表示第i个参数t时刻偏导数)
gt2表示第t时间步的梯度平方(向量,由gt各元素自己进行平方运算所得,即Element-wise)

与SGD的核心区别在于计算更新步长时,增加了分母:梯度平方累积和的平方根。此项能够累积各个参数gt,i的历史梯度平方,频繁更新的梯度,则累积的分母项逐渐偏大,那么更新的步长(stepsize)相对就会变小,而稀疏的梯度,则导致累积的分母项中对应值比较小,那么更新的步长则相对比较大。

AdaGrad能够自动为不同参数适应不同的学习率(平方根的分母项相当于对学习率α进进行了自动调整,然后再乘以本次梯度),大多数的框架实现采用默认学习率α=0.01即可完成比较好的收敛。

参考:【1