机器学习系列(六)- 梯度下降法
- 视频参考:如何理解“梯度下降法”?什么是“反向传播”?通过一个视频,一步一步全部搞明白
- 知乎参考:梯度下降法在简单神经网络中的应用
- CSDN参考:神经网络之梯度下降法及其实现
基础概念
- 梯度下降法目标为寻找局部最优解;在一元函数梯度代表着给定点切线的斜率,在多元函数中梯度代表一个向量;梯度方向指出函数在给定点上升最快的方向,即 $\nabla J$ ;则梯度的反方向则是函数下降最快的方向,即 $-\nabla J$ ;
- 学习步长是一个用于调整梯度更新速度的参数,合适的大小使模型更容易收敛;学习步长太小,算法收敛会很慢;学习步长太大,可能造成算法不收敛甚至发散。
梯度理解
- 一元函数梯度即斜率;在多元函数中对每个变量求偏导,即每个变量的斜率,切线构成平面则为函数切面即最大梯度,如下图所示。
-
将切面图从 $Z$ 轴俯视,则构成如下图所示坐标系,可清晰的看出两条切线作为向量相加即为所求最大梯度方向。
公式推导
-
设 $\sigma(x)$ 为感知机的激活函数;则感知机结果为 $a^{[n]}=\sigma(z^{[n]})=\sigma(W^{[n]}·a^{[n-1]}+b^{[n]})$ ;
其中 $W$ 、$b$ 都会产生损失值, $a$ 则由 $n-1$ 层决定损失值。
层感知机计算公式:$z^{[l]} = \begin{bmatrix} z_{1}^{[l]} \newline \vdots \newline z_{i}^{[l]} \end{bmatrix} = \begin{bmatrix} W_{1,1}^{[l]} & \cdots & W_{1,j}^{[l]} \newline \vdots & \ddots & \vdots \newline W_{i,1}^{[l]} & \cdots & W_{i,j}^{[l]} \end{bmatrix} · \begin{bmatrix} a_{1}^{[l-1]} \newline \vdots \newline a_{j}^{[l-1]} \end{bmatrix} + \begin{bmatrix} b_{1}^{[l]} \newline \vdots \newline b_{i}^{[l]} \end{bmatrix}$
-
定义损失函数 $-\nabla J_i^{[n+1]}(W_i^{[n]}, a_i^{[n-1]}, b_i^{[n]})$ ,$\eta$ 为学习步长,其中
$W_{new.i}^{[n]} = W_{old.i}^{[n]} - \eta · \nabla W_i^{[n]} = W_{old.i}^{[n]} - \eta · \frac{\mathrm{d} J_i^{[n+1]} }{\mathrm{d} W_i^{[n]}}$
$b_{new.i}^{[n]} = b_{old.i}^{[n]} - \eta · \nabla b_i^{[n]} = b_{old.i}^{[n]} - \eta · \frac{\mathrm{d} J_i^{[n+1]} }{\mathrm{d} b_i^{[n]}}$
-
反向传播递归,推导递归为($n \Rightarrow n+1$)
$\nabla J^{[n]} = \frac{\mathrm{d} J^{[n+1]} }{\mathrm{d} a^{[n-1]}} = \nabla J_i^{[n]}(W_i^{[n-1]}, a_i^{[n-2]}, b_i^{[n-1]}) \Rightarrow \nabla J^{[n+1]} = \nabla J_i^{[n+1]}(W_i^{[n]}, a_i^{[n-1]}, b_i^{[n]})$
,其中 $W$ 递归推导( $b$ 同理)
$\begin{align} & W_{new.i}^{[n-1]} = W_{old.i}^{[n-1]} - \eta · \nabla W_i^{[n-1]} = W_{old.i}^{[n-1]} - \eta · (\frac{1}{m} \sum_{k=1}^{m}\frac{\mathrm{d} J_k^{[n]} }{\mathrm{d} W_i^{[n-1]}}) \newline \Rightarrow & W_{new.i}^{[n]} = W_{old.i}^{[n]} - \eta · \nabla W_i^{[n]} = W_{old.i}^{[n]} - \eta · (\frac{1}{m} \sum_{k=1}^{m}\frac{\mathrm{d} J_k^{[n+1]} }{\mathrm{d} W_i^{[n]}}) \end{align}$
-
当反向传播递归至最后一层, $a^{[0]}$ 为输入样本,损失函数为 $\nabla J^{[1]}_i(W^{[1]}_i, b^{[1]}_i)$