梯度下降算法 (Gradient) 原理——机器学习常用模型训练法

/ Machine Learning / 没有评论 / 212浏览

梯度下降算法

损失函数

以神经网络损失函数为例

$$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}$$