计算机

梯度下降与优化器

梯度下降

简述

对于模型 y = f(x; \theta),给定数据集 \{(x_i, y_i)\}_{i = 1}^n,设 loss 定义为 \frac{1}{n}\sum\limits_{i = 1}^n d(y, y_i),则我们本质上是寻找一个参数,使得 loss 尽量少:

\arg \min_{\theta} \frac{1}{n} \sum\limits_{i = 1}^n d(f(x_i; \theta), y_i).

将 (x_i, y_i) 是做常数,将 \theta 视为变量,则 loss 可以表示为:

l(\theta) = \frac{1}{n} \sum\limits_{i = 1}^n d(f(x_i; \theta), y_i).

在函数性质良好时,我们将可以求出上文中函数的导数,即梯度:

l'(\theta) = \nabla_{\theta} l = \frac{1}{n} \sum\limits_{i = 1}^n \nabla_\theta d(f(x_i; \theta), y_i).

梯度是一个向量,它表征了函数值上升和下降最快的方向。因此,我们可以更新 \theta 的值:

\theta \leftarrow \theta - \eta \nabla_{\theta} l.

这种通过梯度进行参数更新的方法就是梯度下降法。

随机梯度下降

随机梯度下降(stochastic gradient descent, SGD)是对原始梯度下降方法的改进。对于训练集 \{(x_i, y_i)\}_{i = 1}^n,每次我们只取一个点计算梯度,并进行梯度下降:

l_i := d(f(x_i; \theta), y_i);
\theta \leftarrow \theta - \eta\nabla l_i.

显然,平均意义上的单点梯度将等于总梯度:

\nabla l = \frac{1}{n} \sum_{i=1}^n \nabla d(f(x_i; \theta), y_i) = \mathbb{E}(l_i).

随机变量

当神经网络 y = f_\theta(x) 是的输出 y 是随机变量时,给定同一个 x_0,可能有多个样本 y_1, \dots, y_n 与之对应。此时,假设神经网络具有足够的拟合能力,并且使用均方误差(MSE)作为损失函数,则优化后的神经网络将预测 y 的均值。

可以写出,对数据集整体,损失函数的形式为:

l(\theta) = \sum_{i = 1}^n (y_i - f(x_0; \theta))^2.

令 \hat{y} = f(x_0; \theta),则函数化为 l = \sum (y_i - \hat{y})^2。通过求导可以证明,最小值在均值处取得。

因此,最小化上述损失函数,等价于:

f(x_0; \theta) = \frac{1}{n} \sum_{i = 1}^n y_i.

这表明优化后的神经网络将预测均值。

BEYOND THE ARTICLE

读完了,有什么想法?

阅读已保存的问答示例,并循着引用回到原文。

查看公开问答示例
— 本文完 — 返回文章列表