目标:解决多变量函数的最优化问题
例如神经网络中的损失函数(loss function):
C(w,b)=2n1x∑∥y(x)−a∥2
其中w和b为网络的参数,x为训练样本,n为训练样本的数目,y(x)为网络的期望输出,a为网络的实际输出,a是x,w,b的函数。
为了让网络的输出尽可能接近期望输出,即求令损失函数最小化的网络参数w∗和b∗:
w,bmin2n1x∑∥y(x)−a∥2
我们可以采用梯度下降(gradient descent)求解该问题。
梯度下降法
1. 为什么用梯度下降法?
- 对于多变量问题,常用的微积分解法效果有限;
- 对于神经网络而言,常常包含大量的变量,采用微积分最小化的方法失效
2. 梯度下降法的灵感来源
我们假设C(v)是包含两个变量v1,v2的函数,大概长这样

为了找到C(v)的最小值,我们可以将C(v)想象成一个山谷,假设某一个位置处有一个球沿着斜坡往下滚,则最后这个球一定会到达谷底。根据这一思想,我们可以随机选取一个起始点,然后模拟球往下滚的过程,最终找到C(v)的最小值点(即谷底)。
为了实现这一过程,我们先假设沿v1方向移动Δv1,沿v2方向移动Δv2,我们可以计算出C(v)的变化:
ΔC≈∂v1∂CΔv1+∂v2∂CΔv2
假设我们选择Δv1和Δv2使得ΔC<0,重复这一过程,就能让球滚到谷底(求得C的最小值点)。现在的重点是我们如何选择这样的Δv=(∂v1∂C,∂v2∂C)T使得ΔC<0呢?
3. 梯度下降原理
这里我们首先来改写一下ΔC的公式。令
ΔC≈∇C⋅Δv
其中∇C≡(∂v1∂C,∂v2∂C)T。采用逐元素乘法(向量内积)。∇C 被称作 gradient vector,用于描述C相对于v的变化率。
为了选取合适的Δv使得ΔC<0,我们可以选取
Δv=−η∇C
where η is a small, positive parameter (known as the learning rate). 此时,ΔC≈−η∥∇C∥2<=0,这样每次改变v,C总是减小的。因此我们的学习规则为:
v→v′=v−η∇C
Then we’ll use this update rule again, to make another move. If we keep doing this, over and over, we’ll keep decreasing C until - we hope - we reach a global minimum.
Summing up, the way the gradient descent algorithm works is to repeatedly compute the gradient ΔC, and then to move in theopposite direction, “falling down” the slope of the valley.
关于learning rate η的选择:(1) η需要足够小; (2) η太小会导致学习速度慢。因此需要在两者之间寻找一个平衡。
使用梯度下降法训练神经网络
训练神经网络的目标是找到weights wk 和biases bl 使得损失函数C的值最小化。我们可以得到梯度下降的更新规则:
wk→wk′=wk−η∂wk∂C
bl→bl′−η∂bl∂C
随机梯度下降法(stochastic gradient descent)
标准梯度下降法导致学习太慢的问题:损失函数C(w,b)=2n1∑x∥y(x)−a∥2可以写作C=n1∑xCx,其中Cx≡2∥y(x)−a∥2。
计算梯度∇C=n1∑x∇Cx时,需要对每个样本都分别计算其梯度,由于训练数据集通常较大,计算会消耗大量的时间。
随机梯度下降可以用来加速学习: 其策略是,通过计算随机选取的一小部分训练样本的∇Cx,并计算其平均值来估算整体的梯度∇C。
首先随机选取m个训练样本X1,X2,...,Xm,视为一个 mini-batch。当m足够大m≈n时,可以将部分样本梯度的平均值作为∇C的估计:∇C≈m1j∑m∇CXi
因此,随机梯度下降的更新规则是:
wk→wk′=wk−mηj∑∂wk∂CXj
bl→bl′=bl−mηj∑∂bl∂CXj
具体执行过程是:先将数据集随机打乱然后均分成 k个mini-batch,对每个mini-batch依次采用上述更新规则,直至遍历完整个数据集(完成k个mini-batch的更新),称之为完成 an epoch of training。然后开始一个新的training epoch。
标准梯度下降与随机梯度下降的比较:
(1)标准梯度下降每次计算完整个数据集的梯度,才进行一次参数更新;随机梯度下降在一轮训练中(遍历完一次数据集)采用多次小批量更新策略,对每个mini-batch都进行一次参数更新。
(2)随机梯度下降的优点:加速学习(不需要等到计算完整个数据集的梯度才进行参数更新);计算梯度时加入了随机因素,有利于跳出局部极小(机器学习,周志华,P107)。
参考文献:
- Neural Networks and Deep Learning by Michael A. Nielsen
- 机器学习,周志华