深度学习——优化算法
Posted 记性不好,多记记吧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习——优化算法相关的知识,希望对你有一定的参考价值。
目录
- mini-batch
- 指数加权平均
- 优化梯度下降法:momentum、RMSprop、Adam
- 学习率衰减
- 局部最优问题
一、mini-batch
mini-batch:把训练集划分成小点的子集
表示法 | $x^{\\{1\\}}$ | $x^{(1)}$ | $x^{[1]}$ |
意义 | 第一个mini-batch | 第一个样本 | 第一层的输入 |
- 为什么用mini-batch:当数据集样本数较多时,需要对整个数据计算完成后才能进行梯度下降,速度较慢
- epoch:一代,表示遍历了整个数据集(而不是一个子集)
- 使用mini-batch的梯度下降方法过程:每次以当前的一个mini-batch作为输入数据
for $t = 1,...,5000$ //forward prop on 第t个minibatch,输入为$X^{\\{t\\}}$ for $i=1...l$ //正向计算,共l层 $Z^{[i]}=W^iA^{[i-1]}+b^{[i]}$ $A^{[i]}=g^{[i]}(Z^{[i]}$ //$A^{l}$为最后的输出结果 计算该mini-batch的cost $J^{\\{t\\}}=\\frac{1}{1000}\\sum \\mathcal{L}(\\widehat{y}^{j},y^{j})$ 反向计算求导$J^{\\{t\\}}$ 更新参数$W$$b$,$W^{[l]}:=W^{[l]}-\\alpha dW^{[l]}$ $b^{[l]}:=b^{[l]}-\\alpha db^{[l]}$ |
- 使用mini-batch的成本函数变化趋势:并不是每一次都下降,但是整体趋势是下降
- 选择min-batch的大小
太大的话每次迭代耗时太长,太小的话每次只处理少量效率低(失去了向量加速的优势)
当数据集比较小(小于2000)时,可以直接使用batch
当数据集比较大时,一般可以用的mini-batch大小:64,128,256, 512...(与CPU/GPU内存相匹配)
二、指数加权平均(指数加权移动平均)exponentially weighted average
例:伦敦的温度变化
$\\theta_{1}=40^{\\circ}F$ $\\theta_{2}=49^{\\circ}F$ $\\theta_{3}=45^{\\circ}F$ ... |
求解$v_{t}$:前$t$天的温度加权平均值。虽然$v_{t}$包含1~$t$天的温度,但是越接近第$t$天的权重会更大一点,而较前的就会接近0
$v_{0}=0$ $v_{1}=\\beta v_{0} + (1-\\beta )\\theta_{1}$ $v_{2}=\\beta v_{1} + (1-\\beta )\\theta_{2}$ ... $v_{t}=\\beta v_{t-1} + (1-\\beta )\\theta_{t}$ $=\\beta^{t}\\theta_{0}+\\beta^{t-1}(1-\\beta)\\theta_{1}$ $+\\beta^{t-2}(1-\\beta)\\theta_{2}+...+(1-\\beta)\\theta_{t}$ |
蓝色点为原始数据,其它为不同的$\\beta$取值时,加权平均结果 |
- 应该平均多少天的温度?当某天温度的权重很低时就不用再考虑
$y=(1-\\varepsilon)^{\\frac{1}{\\varepsilon}}$单调递减。当$\\varepsilon=0.9$时,$y \\approx \\frac{1}{e}$。所以,当计算到第$\\frac{1}{e}\\approx 0.3$天时,温度会下降到当天的1/3以下,可忽略。因此,可以认为$v_{t}$是$\\frac{1}{1-\\beta}$天的温度加权平均值
- 做偏差修正bias correct
为什么需要:开始的时候设置$v_0=0$,容易导致前期的预测会比较实际的小很多,估计不准确
修正方法:$v\'_{t}=\\frac{v_{t}}{1-\\beta^{t}}$,用$v\'_{t}$来代替$v_{t}$。前期的值可以变大一些,而后期时$t$较大时,$\\beta^{t}$趋于0,$v\'_{t}$也就趋于$v_{t}$
下图中紫线为$v_{t}$,绿色为$v\'_{t}$
三、优化梯度下降算法
- 标准梯度下降的问题(下图蓝线效果):从一个随机的点开始进行梯度下降,可能会像蓝色部分波动比较大,下降速度慢;无法使用更大的学习率,因为可能会偏离函数范围
-
- 优化手段:减少纵向的浮动,加快横向的移动,以及增大学习率
- 动量梯度下降法momentum
- 优化:利用对梯度求指数加权平均的方法以加快训练的速度(上图红线效果)
通过求平均,可以把纵向的浮动抵消,而横向的变化依旧,从而加快下降速度
- 具体实现:用加权平均值来代替当前的求导结果;实际中一般不用做偏差修正,大概10次迭代就过了初始期,不再是有偏差的结果;$\\beta$取值为0.9
for $t = 1...,$
计算当前mini-batch的$dW, db$
$v_{dW}=\\beta v_{dW}+(1-\\beta)dW$
$v_{db}=\\beta v_{db}+(1-\\beta)db$$W:=W-\\alpha v_{dW}$, $b:=b-\\alpha v_{db}$
- 优化:利用对梯度求指数加权平均的方法以加快训练的速度(上图红线效果)
- RMSprop : root mean square prop
- 均方根:先对$dW$求平方,更新时又除以它的根方
- 为什么有效果
假设$W$和$b$分别表示横向和纵向变化。
如果要让纵向也就是$b$的变化慢一点(浮动小一些),也就是更新时减去的值小一些。可以发现原来纵向的变化较大($db$较大),所以$\\frac{1}{\\sqrt{S_{db}}}$会小一点,由此可让$db$变化慢点
-
- 具体实现:为了避免除数为0,一般可以加上$\\varepsilon=10^{-8}$
for $t = 1,...$ 计算当前mini-batch的$dW,db$ $S_{dW}=\\beta_{2}S_{dW}+(1-\\beta_{2})dW^{2}$ $S_{db}=\\beta_{2}S_{db}+(1-\\beta_{2})db^{2}$ $W:=W-\\alpha \\frac{dW}{\\sqrt{S_{dW}}+\\varepsilon}$, $b:=b-\\alpha \\frac{db}{\\sqrt{S_{db}}+\\varepsilon}$ |
- Adam算法 :momentum与RMSprop的结合,常用的方法
- 具体实现
$for t = 1,...$ 计算当前mini-batch人$dW,db$ //momentum部分 $v_{dW}=\\beta_{1} v_{dW}+(1-\\beta_{1})dW$, $v_{db}=\\beta_{1} v_{db}+(1-\\beta_{1})db$ //RMSprop部分 $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_{dW}^{corrected}}{\\sqrt{S_{dw}{corrected}}+\\varepsilon}$, $b:=W-\\alpha \\frac{v_{db}^{corrected}}{\\sqrt{S_{db}{corrected}}+\\varepsilon}$ |
-
- 超参数选择
$\\alpha$学习率 | $\\beta_{1}$用于momentum | $\\beta_{2}$用于RMSprop | $\\varepsilon$ |
需要调 | 0.9 | 0.999 | $10^{-8}$ |
四、学习率衰减:随时间逐渐减少学习率
为什么:如果一直用比较大的学习率,当靠近最小值时,结果可能会在较大范围内进行浮动(不易收敛),而不是在很接近最小值的小范围内变化
重要性:不是最开始的重点,可以先设置一个固定的,先调整其它的,后期再进行调整
学习率衰减的方式
- $\\alpha = \\frac{1}{1+decay-rate*epoch-num}\\alpha_{0}$
- $\\alpha=0.95^{epoch-num}\\alpha_{0}$ 指数衰减
- $\\alpha=\\frac{k}{\\sqrt{epoch-num}}\\alpha_{0}$
- 每过一段时间,对学习率减半(离散下降discrete staircase)
五、局部最优问题
- 局部最优问题:在做梯度下降时,会不会最后是趋于局部最优的解,而非最优解?
- 答:这不是一个大问题,要找到一个局部最优点,需要它在各个维度都是最优的(比如都是凹/凸)。当维度比较大时,这种情况很难遇到。不过,鞍点还是比较容易遇到的
- 鞍点:在某个位置,各维导数均为0,但是凹凸性不是完全一致的。如下图右侧
- 应该考虑的问题:存在平滑导致梯度下降变化慢的问题
- 解决方法:利用上面提到的几种优化方法来加快
以上是关于深度学习——优化算法的主要内容,如果未能解决你的问题,请参考以下文章