梯度下降法

  • 梯度:目标值对所有自变量的导数的向量组成
  • 梯度下降算法(Gradient Descent):沿梯度下降的方向求解极小值
  • 用来训练或学习训练集上的参数w和b
  • 算法过程:
  • 初始化参数为任意值
  • 求解梯度▽f
  • 更新参数,θ=θ-α▽f,α为学习率(大于0)
  • 若达到指定迭代次数或收敛条件,训练结束.否则继续执行第2步


为了便于理解,以一元函数为例

bp神经网络训练函数梯度下降 神经网络梯度下降算法_bp神经网络训练函数梯度下降


要找到一个合适的输入值w,使输出的函数值C(w)最小。

先随便挑一个输入值,然后考虑向左还是向右走,函数值才会变小。
如果可以确定函数在这里的斜率,斜率为正,就向左走,斜率为负,就向右走(走的方向和斜率正负相反)。

如果每一步的大小和斜率成比例,那么在最小值附近斜率会越来越平缓,每一步会越来越小,这样可以防止走过头。

在每一个点上都这样重复,计算新斜率,再适当的走一小步,就会逼近函数的某个局部最小值。但如上图的函数,无法保证落到的局部最小值就是代价函数可能达到的全局最小值。

更复杂的,两个输入一个输出的二元函数

bp神经网络训练函数梯度下降 神经网络梯度下降算法_神经网络_02


输入空间想象成XY平面,代价函数是平面上方的曲面,此时考虑在输入空间内沿哪个方向走可以使输出结果下降的最快

函数的梯度指出了函数的最陡增长方向,那么沿梯度的负方向走,函数值降低的最快。且梯度向量的长度代表了最陡的斜坡有多陡

和上面一元函数类似,在每一个点先计算梯度,再按梯度反方向向下走一小步,然后循环


下面为一元函数下w和b的迭代公式,=表示一次迭代

bp神经网络训练函数梯度下降 神经网络梯度下降算法_神经网络_03
bp神经网络训练函数梯度下降 神经网络梯度下降算法_迭代_04

α为学习率,学习率可以控制每一次迭代,或梯度下降法中的步长
α后的部分为导数(斜率),是对参数w的更新或变化量

假如在当前点的斜率是正的,新的w的值等于w自身减去学习率乘导数,接着向左走一步

bp神经网络训练函数梯度下降 神经网络梯度下降算法_斜率_05

梯度下降的算法调优

  1. 算法的步长选择。步长的选择实际上取决于数据样本,可以多取一些值,从大到小,分别运行算法,看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。
  2. 算法参数的初始值选择。初始值不同,获得的最小值也有可能不同,梯度下降取得的结果可能只是一个局部最小值,有局部最优解的风险,所以需要多次用不同初始值运行算法,选择损失函数最小的初值。
  3. 标准化。由于样本不同特征的取值范围不同,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据标准化,也就是对每个特征x,求出期望x拔和标准差std(x),然后转化为:

    这样特征的新期望为0,新方差为1,收敛速度可以大大加快