Skip to content

优化器(optimizer)负责优化损失函数计算的误差值。调节可变参数是依据反向传播算法的,反向传播负责将最终的误差反向依次传递到神经网络各层。

而真正实现参数调节原则应该是梯度下降Gradient Descent)。

假设模型定义为 y=wx+by = wx + b

梯度下降的过程

定义误差函数 f(y)f(y) ,而 yyww 的函数,所以误差函数也是 ww 的函数。

1. 梯度下降

参考知乎 https://zhuanlan.zhihu.com/p/152566066

以均方误差(MSE)为例

J(θ)=1mi=1m(xθy)2 J(\theta) = \frac{1}{m}\sum_{i=1}^m\left( x \cdot \theta - y \right)^2

θ=(w1,w2,,wn)\theta = (w_1,w_2,\cdots,w_n) 为权值。

求梯度 g=J(θ)g = J'(\theta) ,步骤

θjJ(θ)= θj12(hθ(x)y)2= 212(hθ(x)y)θj(hθ(x)y)= (hθ(x)y)θj(i=1nθixiy)= (hθ(x)y)xj \begin{aligned} \frac{\partial}{\partial\theta_j}J(\theta) = &\ \frac{\partial}{\partial\theta_j}\frac{1}{2}\left( h_{\theta}(x) - y \right)^2 \\ = &\ 2 \cdot \frac{1}{2}\left(h_{\theta}(x) - y\right) \frac{\partial}{\partial\theta_j}\left(h_{\theta}(x) - y\right) \\ = &\ \left(h_{\theta}(x) - y\right) \cdot \frac{\partial}{\partial\theta_j}\left(\sum_{i=1}^{n}\theta_i x_i - y \right) \\ = &\ \left(h_{\theta}(x) - y\right)x_j \end{aligned}

更新参数时只需要

θ(t+1)=θ(t)αg \theta^{(t+1)} = \theta^{(t)} - \alpha \cdot g

然后迭代上述步骤,直到

g<ε g < \varepsilon

其中 ε\varepsilon 是某一个阈值,达到此值代表参数优化的程度已经达到期望。

2. 随机梯度下降

随机梯度下降SGD)通过使用随机的一组数据进行梯度计算,

3. 批量梯度下降

批量梯度下降BGD)算法是综合了普通的梯度下降和随机梯度下降的一种折中方法。准确度稍高,速度也稍慢。

4. 动量优化算法

动量优化算法(Momentum

vt= γvt1+ηtgtxt= xt1vt \begin{aligned} v_t = & \ \gamma v_{t-1} + \eta_t g_t \\ x_t = & \ x_{t-1} - v_t \end{aligned}

超参数 γ[0, 1)\gamma \in [0,\ 1) ,当 γ=0\gamma = 0 时,动量法等价于小批量随机梯度下降。

5. Adagrad 算法

约束学习率,达到足够的迭代周期后会选择更小的学习率。

6. 内斯特洛夫梯度加速算法

内斯特洛夫梯度加速NAG)是对动量优化算法的进一步改进。

7. AdaDelta 与 RMSProp 算法

与 RMSProp 算法的相同点是状态变量是对平方项 gt2g_t^2 的指数加权移动平均。

nt=γnt1+(1γ)gt2 n_t = \gamma n_{t-1} + (1 - \gamma)g_t^2

8. 可变动量估算算法