经常听到梯度下降法,只知道它是用于优化求解问题。即 沿着梯度的反方向(坡度最陡的方向)进行权值更新。为什么局部梯度下降最快的方向就是梯度的负方向呢?
梯度
梯度就是表示某一个函数在当前位置的导数。 为自变量,为关于的函数; 为梯度
如果函数为凸函数,那么就可以根据梯度下降算法进行优化,求得使最小的参数;
为当前下山的位置,为下山移动一小步之后的位置,为学习因子,即步长。
梯度更新公式的推导——一阶泰勒展开式
一阶泰勒展开式的基本形式为:
这个公式主要利用的是函数的局部线性近似,图解:
用红色的直线代替黑色曲线,求出 的值,即 可以看作斜率
是微小矢量,它的大小为步长,但它是有方向的矢量,将的单位向量记作 v;那么,则
由于局部下降的目的是希望每次更新的值,都能使变小,所以:
步长为标量且一般设置为正数,所以不等式变为:
v和都为向量,向量乘积有几种情况:
要使他们的向量乘积小于0,且使得乘积最小,只要cos(α) = -1,即A,B完全反向。也就是说,变量的方向v应该为:
所以
因为为标量,可以和步长合并,所以最终,变量的更新公式为:
梯度下降种类
- 批量GD:可以获得全局最优解,但是在更新每个参数时需要遍历所有的数据,计算量很大所以速度较慢;
- 随机GD:每次更新参数时,随机选择一条数据来计算,大大加快训练数据,SGD可能会调到新的和潜在更好的局部最优解,但可能收敛不到全局最优且迭代次数较多;
- 小批量GD:batch GD和 SGD的折中,每次选择n个样本更新参数。收敛速度较快,并且可以达到更稳定的收敛结果。
- 动量梯度下降:Mini-batch GD和SGD由于在更新参数过程中会不断改变方向,所以容易发生震荡。动量GD(Momentum GD)会把之前的下降方向参考进来,从而减少震荡。公式:V = dW * λ+ V*momemtum。总的来说就是:
①当本次梯度下降方向与上次更新量的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。
②当本次梯度下降方向与上次更新量的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。
优点:既减少震荡,又大方向不变(本次梯度下降方向),从而保证了效率和正确的收敛。
参考:http://www.360doc.com/content/18/0526/06/36490684_757087825.shtml 感谢