梯度下降(gradient descent)原理

梯度下降

      • 目标:解决多变量函数的最优化问题
      • 梯度下降法
            • 1. 为什么用梯度下降法?
            • 2. 梯度下降法的灵感来源
            • 3. 梯度下降原理
      • 使用梯度下降法训练神经网络
      • 随机梯度下降法(stochastic gradient descent)
      • Tricks

目标:解决多变量函数的最优化问题

例如神经网络中的损失函数(loss function):
C ( w , b ) = 1 2 n ∑ x ∥ y ( x ) − a ∥ 2 C(w,b)=\frac{1}{2n}\sum_{x}\|y(x)-a\|^2 C(w,b)=2n1xy(x)a2

其中 w w w b b b为网络的参数, x x x为训练样本, n n n为训练样本的数目, y ( x ) y(x) y(x)为网络的期望输出, a a a为网络的实际输出, a a a x , w , b x,w,b x,w,b的函数。
为了让网络的输出尽可能接近期望输出,即求令损失函数最小化的网络参数 w ∗ w^* w b ∗ b^* b
min ⁡ w , b 1 2 n ∑ x ∥ y ( x ) − a ∥ 2 \min \limits_{w,b} \frac{1}{2n}\sum_{x}\|y(x)-a\|^2 w,bmin2n1xy(x)a2

我们可以采用梯度下降(gradient descent)求解该问题。

梯度下降法

1. 为什么用梯度下降法?
  • 对于多变量问题,常用的微积分解法效果有限;
  • 对于神经网络而言,常常包含大量的变量,采用微积分最小化的方法失效
2. 梯度下降法的灵感来源

我们假设 C ( v ) C(v) C(v)是包含两个变量 v 1 , v 2 v_1,v_2 v1,v2的函数,大概长这样
梯度下降(gradient descent)原理_第1张图片

为了找到 C ( v ) C(v) C(v)的最小值,我们可以将 C ( v ) C(v) C(v)想象成一个山谷,假设某一个位置处有一个球沿着斜坡往下滚,则最后这个球一定会到达谷底。根据这一思想,我们可以随机选取一个起始点,然后模拟球往下滚的过程,最终找到 C ( v ) C(v) C(v)的最小值点(即谷底)。

为了实现这一过程,我们先假设沿 v 1 v_1 v1方向移动 Δ v 1 \Delta{v_1} Δv1,沿 v 2 v_2 v2方向移动 Δ v 2 \Delta{v_2} Δv2,我们可以计算出 C ( v ) C(v) C(v)的变化:
Δ C ≈ ∂ C ∂ v 1 Δ v 1 + ∂ C ∂ v 2 Δ v 2 \Delta{C}\approx\frac{\partial C}{\partial v_1}\Delta{v_1}+\frac{\partial C}{\partial v_2}\Delta v_2 ΔCv1CΔv1+v2CΔv2

假设我们选择 Δ v 1 \Delta v_1 Δv1 Δ v 2 \Delta v_2 Δv2使得 Δ C < 0 \Delta C<0 ΔC<0,重复这一过程,就能让球滚到谷底(求得 C C C的最小值点)。现在的重点是我们如何选择这样的 Δ v = ( ∂ C ∂ v 1 , ∂ C ∂ v 2 ) T \Delta v=(\frac{\partial C}{\partial v_1},\frac{\partial C}{\partial v_2})^T Δv=(v1C,v2C)T使得 Δ C < 0 \Delta C<0 ΔC<0呢?

3. 梯度下降原理

这里我们首先来改写一下 Δ C \Delta C ΔC的公式。令
Δ C ≈ ∇ C ⋅ Δ v \Delta C\approx \nabla C \cdot \Delta v ΔCCΔv

其中 ∇ C ≡ ( ∂ C ∂ v 1 , ∂ C ∂ v 2 ) T \nabla C \equiv (\frac{\partial C}{\partial v_1},\frac{\partial C}{\partial v_2})^T C(v1C,v2C)T。采用逐元素乘法(向量内积)。 ∇ C \nabla C C 被称作 gradient vector,用于描述 C C C相对于 v v v的变化率。

为了选取合适的 Δ v \Delta v Δv使得 Δ C < 0 \Delta C<0 ΔC<0,我们可以选取
Δ v = − η ∇ C \Delta v=-\eta \nabla C Δv=ηC

where η \eta η is a small, positive parameter (known as the learning rate). 此时, Δ C ≈ − η ∥ ∇ C ∥ 2 < = 0 \Delta C \approx -\eta \| \nabla C \|^2<=0 ΔCηC2<=0,这样每次改变 v v v C C C总是减小的。因此我们的学习规则为:
v → v ′ = v − η ∇ C v \rightarrow v^{'}=v-\eta \nabla C vv=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 C 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 \Delta C ΔC, and then to move in theopposite direction, “falling down” the slope of the valley.

关于learning rate η \eta η的选择:(1) η \eta η需要足够小; (2) η \eta η太小会导致学习速度慢。因此需要在两者之间寻找一个平衡。

使用梯度下降法训练神经网络

训练神经网络的目标是找到weights w k w_k wk 和biases b l b_l bl 使得损失函数 C C C的值最小化。我们可以得到梯度下降的更新规则:
w k → w k ′ = w k − η ∂ C ∂ w k w_k \rightarrow w_k^{'}=w_k- \eta \frac{\partial C}{\partial w_k} wkwk=wkηwkC

b l → b l ′ − η ∂ C ∂ b l b_l \rightarrow b_l^{'}- \eta \frac{\partial C}{\partial b_l} blblηblC

随机梯度下降法(stochastic gradient descent)

标准梯度下降法导致学习太慢的问题:损失函数 C ( w , b ) = 1 2 n ∑ x ∥ y ( x ) − a ∥ 2 C(w,b)=\frac{1}{2n}\sum_x\|y(x)-a\|^2 C(w,b)=2n1xy(x)a2可以写作 C = 1 n ∑ x C x C=\frac{1}{n}\sum_xC_x C=n1xCx,其中 C x ≡ ∥ y ( x ) − a ∥ 2 2 C_x \equiv \frac{\|y(x)-a\|^2}{2} Cx2y(x)a2
计算梯度 ∇ C = 1 n ∑ x ∇ C x \nabla C=\frac{1}{n}\sum_x \nabla C_x C=n1xCx时,需要对每个样本都分别计算其梯度,由于训练数据集通常较大,计算会消耗大量的时间。

随机梯度下降可以用来加速学习: 其策略是,通过计算随机选取的一小部分训练样本的 ∇ C x \nabla C_x Cx,并计算其平均值来估算整体的梯度 ∇ C \nabla C C
首先随机选取 m m m个训练样本 X 1 , X 2 , . . . , X m X_1, X_2,...,X_m X1,X2,...,Xm,视为一个 mini-batch。当 m m m足够大 m ≈ n m\approx n mn时,可以将部分样本梯度的平均值作为 ∇ C \nabla C C的估计: ∇ C ≈ 1 m ∑ j m ∇ C X i \nabla C \approx \frac{1}{m} \sum_j^m \nabla C_{X_i} Cm1jmCXi

因此,随机梯度下降的更新规则是:
w k → w k ′ = w k − η m ∑ j ∂ C X j ∂ w k w_k \rightarrow w_k^{'}=w_k - \frac{\eta}{m}\sum_j \frac{\partial C_{X_j}}{\partial w_k} wkwk=wkmηjwkCXj

b l → b l ′ = b l − η m ∑ j ∂ C X j ∂ b l b_l \rightarrow b_l^{'} = b_l - \frac{\eta}{m} \sum_j \frac{\partial C_{X_j}}{\partial b_l} blbl=blmηjblCXj

具体执行过程是:先将数据集随机打乱然后均分成 k k k个mini-batch,对每个mini-batch依次采用上述更新规则,直至遍历完整个数据集(完成k个mini-batch的更新),称之为完成 an epoch of training。然后开始一个新的training epoch。

标准梯度下降与随机梯度下降的比较
(1)标准梯度下降每次计算完整个数据集的梯度,才进行一次参数更新;随机梯度下降在一轮训练中(遍历完一次数据集)采用多次小批量更新策略,对每个mini-batch都进行一次参数更新。
(2)随机梯度下降的优点:加速学习(不需要等到计算完整个数据集的梯度才进行参数更新);计算梯度时加入了随机因素,有利于跳出局部极小(机器学习,周志华,P107)。

Tricks

为了让梯度下降法能够更快地收敛,常采用特征缩放(feature scaling)以及均值归一化(mean normalization)对数据进行预处理。
特征缩放的思路: 梯度下降算法中,在存在多个特征的情况下,如果能确保这些不同的特征都处于一个相近的范围,这样梯度下降法能更快地收敛。
均值归一化:
梯度下降(gradient descent)原理_第2张图片

参考文献:

  1. Neural Networks and Deep Learning by Michael A. Nielsen
  2. 机器学习,周志华
  3. 梯度下降法和随机梯度下降法

你可能感兴趣的:(神经网络与深度学习)