顿搜
梯度下降算法 (Gradient) 原理——机器学习常用模型训练法
梯度下降算法
损失函数
以神经网络损失函数为例
$$C(v_1,v_2) = \frac{1}{2n} \sum_{x} \parallel \hat{y} - y\parallel^2$$
算法原理
损失函数 C 的变化量 $\Delta C$
$$\Delta C \approx \frac{\partial C}{\partial v_1}\Delta v_1 + \frac{\partial C}{\partial v_2} \Delta v_2$$
将 $\Delta v_1$ 和 $\Delta v_2$ 连接成向量 $\Delta v$
$$\Delta v = (\Delta v_1, \Delta v_2)^T$$
损失函数 C 的梯度向量
$$\bigtriangledown C = (\frac{\partial C}{\partial v_1}, \frac{\partial C}{\partial v_2})^T$$
从而可以将损失函数 C 的变化量 $\Delta C$ 写成
$$\Delta C \approx \bigtriangledown C \cdot \Delta v$$
设定
$$ \Delta v = - \eta \bigtriangledown C$$
则
$$\Delta C \approx - \eta \bigtriangledown C \cdot \bigtriangledown C = -\eta \parallel \bigtriangledown C \parallel ^2$$
显然 $\Delta C$ 恒小于0, 从而能使 C 不断减小
更新规则
$$v_1 = v_1 + \Delta v_1 = v_1 - \eta \frac{\partial C}{\partial v_1}$$
$$v_2 = v_2 + \Delta v_2 = v_2 - \eta \frac{\partial C}{\partial v_2} $$
算法缺点
对于每个训练实例 x,都要计算梯度向量,如果训练数据过大,会花费很长时间,学习过程太慢。
随机梯度下降算法
Stochastic gradient descent
基本思想
从所有的 n 个训练样本中随机取一个小的 m 个样本 $x_1, x_2, ..., x_m$ 来估计 $\bigtriangledown C$
实现原理
$$\bigtriangledown C = \frac{1}{n} \sum_{i = 1}^n \bigtriangledown Cx_i \approx \frac{1}{m} \sum_{i=1}^m \bigtriangledown Cx_i$$
更新规则
$$v_1 = v_1 - \frac{\eta}{m}\sum_{i}^m\frac{\partial Cx_i}{\partial v_1}$$
$$v_2 = v_2 - \frac{\eta}{m}\sum_{i}^m\frac{\partial Cx_i}{\partial v_2}$$