DeepLearning.ai 笔记(三)

本笔记是课程《Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization》的第二周学习笔记,主要内容为三种不同的梯度下降且重点介绍了Mini-batch gradient descent,指数加权平均,指数加权平均中的偏差修正,动量(Momentum),RMSprop,Adam算法以及神经网络中的局部最优问题。


梯度下降算法

  1. Batch gradient descent:每次训练迭代处理所有的训练样本,速度慢。
  2. Mini-batch gradient descent:每次训练迭代尺寸为Mini-batch size的一部分样本。
  3. stochastic gradient descent:每次训练迭代单个样本,效率低。


把整个训练集遍历一遍称为一个epoch。

sgd和Mini-batch gd永远不会收敛,只会在最小值附近波动。

一般Mini-batch 大小为64-512,2的次方速度更快,且需要考虑CPU/GPU内存,这是个超参数。


用Mini-batch gd一般分两步:

  1. 打乱顺序
  2. 分成大小为Mini-batch size的数据集列表。


指数加权移动平均

指数加权移动平均,也叫指数加权平均,公式如下。若$\beta =0.9$,相当于今天的加权温度等于昨天温度的0.9倍加上今天温度的0.1倍,也就相当于平均了过去10天($\frac{1}{1-0.9}$)的温度作为今天的加权温度。$\beta$越小,曲线越延后,也越平缓。
$$
v_t = \beta v_{t-1}+(1-\beta)\theta_t
$$
指数加权平均,如果权值为0.9,则$0.9^{10}$约等于1/e,也就是大概原值的约1/3,小于这个值我们就认为贡献不是很大。


偏差修正

一般计算时令$v_0=0$,固在初期计算值比较低,可以用$\frac{v_t}{1-\beta^t}$代替$v_t$,修正初期数值,而后期作用就不是这么大了。也有人不用偏差修正,直接熬过初期的一些计算。


动量(Momentum)

每次迭代,在当前mini-batch下计算:
$$
\begin{cases}
v_{dW^{[l]}} = \beta v_{dW^{[l]}} + (1 - \beta) dW^{[l]} \\
W^{[l]} = W^{[l]} - \alpha v_{dW^{[l]}}
\end{cases}
$$

$$
\begin{cases}
v_{db^{[l]}} = \beta v_{db^{[l]}} + (1 - \beta) db^{[l]} \\
b^{[l]} = b^{[l]} - \alpha v_{db^{[l]}}
\end{cases}
$$

$\beta$是超参数,最常用的是0.9,可以加速梯度下降,加快训练速度。

从蓝色变为红色,公式加号前面相当于速度,后面的梯度项相当于加速度,相当于增加了一个动量,可以使用更大的学习率。


RMSprop

假设水平方向为W参数,垂直方向为b参数。可以看出b方向梯度较大,$db^2$也就更大,$S_{db}$也就更大,那么最后b的更新步长也就更小,因此在垂直方向上更新步长会减小,水平方向相对更大,所以更新曲线从蓝色变为了绿色,加快了学习速度。

可以使用更大的学习率,$\epsilon$一般为了防止分母变为0,一般设置$10^{-8}$。


Adam

Adam算法结合了Momentum和RMSprop。
$$
\begin{cases}
v_{W^{[l]}} = \beta_1 v_{W^{[l]}} + (1 - \beta_1) \frac{\partial J }{ \partial W^{[l]} } \\
v^{corrected}_{W^{[l]}} = \frac{v_{W^{[l]}}}{1 - (\beta_1)^t} \\
s_{W^{[l]}} = \beta_2 s_{W^{[l]}} + (1 - \beta_2) (\frac{\partial J }{\partial W^{[l]} })^2 \\
s^{corrected}_{W^{[l]}} = \frac{s_{W^{[l]}}}{1 - (\beta_2)^t} \\
W^{[l]} = W^{[l]} - \alpha \frac{v^{corrected}_{W^{[l]}}}{\sqrt{s^{corrected}_{W^{[l]}}}+\varepsilon}
\end{cases}
$$

超参数设置建议:

平时一般只需要把后三者超参数调整成这三个值即可,然后主要调整学习率超参数。


局部最优问题

局部最优问题更像是一个马鞍形的问题。

我们不太可能被困在一个很差的局部最优点上,如果我们训练一个较大的神经网络,存在较多参数,并且成本函数被定义在较高的维度空间。

平稳区域是一个很大的问题,因为在这个区域参数会更新的很慢,这时Momentum、RMSprop和Adam等算法就起到了作用。