第四章-深度神经网络优化(梯度下降法)

梯度下降法

批梯度下降法(BGD)

批梯度下降法(Batch Gradient Descent,BGD是最常用的梯度下降形式,前面的Logistic回归及深层神经网络的构建中所用到的梯度下降都是这种形式。其在更新参数时使用所有的样本来进行更新,具体过程为:

公式

\[{X = [x^{(1)},x^{(2)},…,x^{(m)}]}\] \[z^{[1]} = w^{[1]}X + b^{[1]}\] \[a^{[1]} = g^{[1]}(z^{[1]})\] \[… \ …\] \[z^{[l]} = w^{[l]}a^{[l-1]} + b^{[l]}\] \[a^{[l]} = g^{[l]}(z^{[l]})\] \[{J(\theta) = \frac{1}{m} \sum_{i=1}^m \mathcal{L}({\hat y}^{(i)}, y^{(i)}) + \frac{\lambda}{2m} \sum\limits_{l=1}^L ||w^{[l]}}||^2_F\] \[{\theta_j:= \theta_j -\alpha\frac{\partial J(\theta)}{\partial \theta_j}}\] mark

优缺点

  • 优点:最小化所有训练样本的损失函数,得到全局最优解;易于并行实现。
  • 缺点:当样本数目很多时,训练过程会很慢。

随机梯度下降法(SGD)

随机梯度下降法(Stochastic Gradient Descent,SGD)与批梯度下降原理类似,区别在于每次通过一个样本来迭代更新。 #### 公式 \[{X = [x^{(1)},x^{(2)},…,x^{(m)}]}\] \[for\ \ \ i=1,2,…,m\ \{ \ \ \ \ \ \ \ \ \ \ \ \] \[z^{[1]} = w^{[1]}X + b^{[1]}\] \[a^{[1]} = g^{[1]}(z^{[1]})\] \[… \ …\] \[z^{[l]} = w^{[l]}a^{[l-1]} + b^{[l]}\] \[a^{[l]} = g^{[l]}(z^{[l]})\] \[{J(\theta) = \mathcal{L}({\hat y}^{(i)}, y^{(i)}) + \frac{\lambda}{2} \sum\limits_{l=1}^L ||w^{[l]}}||^2_F\] \[\theta_j:= \theta_j -\alpha\frac{\partial J(\theta)}{\partial \theta_j} \}\]

mark

mark

优缺点

  • 优点:训练速度快。
  • 缺点:最小化每条样本的损失函数,最终的结果往往是在全局最优解附近,不是全局最优;不易于并行实现。

小批量梯度下降法(MBDG)

小批量梯度下降法(Mini-Batch Gradient Descent,MBGD)是批量梯度下降法和随机梯度下降法的折衷,对用m个训练样本,,每次采用t(1 < t < m)个样本进行迭代更新。具体过程为:

公式

\[{X = [x^{\{1\}},x^{\{2\}},…,x^{\{k = \frac{m}{t}\}}]}\] 其中: \[x^{\{1\}} = x^{(1)},x^{(2)},…,x^{(t)}\] \[x^{\{2\}} = x^{(t+1)},x^{(t+2)},…,x^{(2t)}\] \[… \ …\] 之后: \[for\ \ \ i=1,2,…,k\ \{ \ \ \ \ \ \ \ \ \ \ \ \] \[z^{[1]} = w^{[1]}x^{\{i\}} + b^{[1]}\] \[a^{[1]} = g^{[1]}(z^{[1]})\] \[… \ …\] \[z^{[l]} = w^{[l]}a^{[l-1]} + b^{[l]}\] \[a^{[l]} = g^{[l]}(z^{[l]})\] \[{J(\theta) = \frac{1}{k} \sum_{i=1}^k \mathcal{L}({\hat y}^{(i)}, y^{(i)}) + \frac{\lambda}{2k} \sum\limits_{l=1}^L ||w^{[l]}}||^2_F\] \[\theta_j:= \theta_j -\alpha\frac{\partial J(\theta)}{\partial \theta_j} \}\] mark 样本数t的值根据实际的样本数量来调整,为了和计算机的信息存储方式相适应,可将t的值设置为2的幂次。将所有的训练样本完整过一遍称为一个epoch。

优缺点

  • 优点:在小批量生产的情况下,通常它优于梯度下降或随机梯度下降(特别是当训练集较大时)。
  • 差异:梯度下降,小批量梯度下降和随机梯度下降之间的差异是您用于执行一个更新步骤的示例数量

梯度下降优化

指数加权平均

指数加权平均(Exponentially Weight Average)是一种常用的序列数据处理方式,其计算公式为:

公式

\[S_t = \begin{cases} Y_1, & t=1 \\ \beta Y_t + (1-\beta)S_{t-1}, & t>1 \end{cases}\] 其中\(Y_t\)为t下的实际值,\(S_t\)\(t\)下加权平均后的值,\(\beta\)为权重值。

例子

给定一个时间序列,例如伦敦一年每天的气温值: mark 其中蓝色的点代表了真实的数据值。 对于一个即时的温度值,取权重值\(\beta\)为0.9,相当于求取之前\(\frac{1}{1 - \beta} = 10\)天的平均值,则有: \[v_0 = 0\] \[v_1 = 0.9v_0 + 0.1\theta_1\] \[… \ …\] \[v_t = 0.9v_{t-1} + 0.1\theta_t\] 根据这些求得的值即得到图中的红色曲线,它反应了温度变化的大致趋势。 mark 当取权重值\(\beta=0.98\)时,可以得到图中更为平滑的绿色曲线。而当取权重值\(\beta=0.5\)时,得到图中噪点更多的黄色曲线。\(\beta\)越大相当于求取平均利用的天数就越多,曲线自然就会越平滑而且越滞后。 求取v_{100}时: \[v_{100} = 0.1*\theta_{100}+0.1*0.9*\theta_{99}+0.1*0.9^2*\theta_{98} \ …\]

MOMENTUM梯度下降

动量梯度下降(Gradient Descent with Momentum)是计算梯度的指数加权平均数,并利用该值来更新参数值。具体过程为:

公式

\[v_{dw} = \beta v_{dw} + (1-\beta)dw\] \[v_{db} = \beta v_{dw} + (1-\beta)db\] \[w : = w - \alpha v_{dw}\] \[b := b-\alpha v_{db}\] 速度用零初始化。因此,该算法需要几次迭代才能“建立”速度并开始采取更大步骤

对于b: * 势头越大 \(b\)更新越平滑,因为我们越是将过去的渐变考虑在内。但如果\(b\)它太大了,它也可以使更新变得更顺畅。 * 常见的值 \(b\)范围从0.8到0.999。如果你不想调整它,\(b = 0.9\)通常是一个合理的默认值。 * 调整最佳\(b\) 对于你的模型来说,可能需要尝试几个值来看看在降低成本函数的价值方面什么效果最好 ĴĴ .

特点

  • 动量将渐变考虑在内以平滑梯度下降的步骤。它可以应用分批梯度下降,小批量梯度下降或随机梯度下降。
  • 你必须调整动量超参数 bb 和学习率

RMSPROP算法

RMSProp(Root Mean Square Prop,均方根支)算法还是在对梯度进行指数加权平均的基础上,引入平方和平方根。

公式

\[s_{dw} = \beta s_{dw} + (1-\beta)dw^2\] \[s_{db} = \beta s_{db} + (1-\beta)db^2\] \[w := w-\alpha \frac{dw}{\sqrt{s_{dw}+\epsilon}}\] \[b := b-\alpha \frac{db}{\sqrt{s_{db}+\epsilon}}\] 其中的\(\epsilon=10^{-8}\),提到数值稳定,防止分母太小。

\(dw\)\(db\)较大时,\(dw^2\)\(db^2\)会较大,进而\(s_{dw}\)\(s_{db}\)也会较大,最终使得\(\frac{dw}{\sqrt{s_{dw}}}\)\(\frac{db}{\sqrt{s_{db}}}\)较小,减少了抵达最小值路径上的摆动。

ADAM优化算法

Adam(Adaptive Moment Estimation,自适应矩估计)优化算法适用于很多不同的深度学习网络结构,它本质上是将Momentum梯度下降和RMSProp算法结合起来。

公式

\[v_{dw} = \beta_1 v_{dw} + (1-\beta_1)dw, \ v_{db} = \beta_1 v_{db} + (1-\beta_1)db\] \[s_{dw} = \beta_2 s_{dw} + (1-\beta_2)dw^2, \ s_{db} = \beta_2 s_{db} + (1-\beta_2)db^2\] \[v^{corrected}_{dw} = \frac{v_{dw}}{(1-\beta_1^t)},\ v^{corrected}_{db} = \frac{v_{db}}{(1-\beta_1^t)}\] \[s^{corrected}_{dw} = \frac{s_{dw}}{(1-\beta_2^t)},\ s^{corrected}_{db} = \frac{s_{db}}{(1-\beta_2^t)}\] \[w := w-\alpha \frac{v^{corrected}_{dw}}{\sqrt{s^{corrected}_{dw}}+\epsilon}\] \[b := b-\alpha \frac{v^{corrected}_{db}}{\sqrt{s^{corrected}_{db}}+\epsilon}\] 其中的学习率\(\alpha\)需要进行调参,超参数\(\beta_1\)被称为第一阶矩,一般取0.9,\(\beta_2\)被称为第二阶矩,一般取0.999,\(\epsilon\)一般取\(10^{-8}\)

Softmax回归

Softmax回归模型是Logistic回归模型在多分类问题上的推广,在多分类问题中,输出y的值不再是一个数,而是一个多维列向量,有多少种分类是就有多少维数。

公式

softmax函数: \[\sigma(z)_{j}=\frac{e^{z_{j}}}{\sum_{i=1}^m e^{z_{i}}}\] 损失函数也变为: \[\mathcal{L}(a^L, y) = - \sum^m_{i=1}y_i \log a^L\]

代码

参考资料