Week 6
小批量梯度下降概览 Overview of mini-batch gradient descent
- 对于简单的线性神经元的误差曲面,由于采用平方误差,因此是一个二次碗形
- 对于多层非线性网络,其误差曲面的形状会十分复杂,可能存在局部的碗形近似形状,但是这些形状不一定是真的“底部”
- 对于全批量梯度下降,我们可以发现,其下降梯度方向并非直接指向(除非误差曲面的水平界面是正圆),且通常会出现“纵向下降少,横向移动多”的情况
- 如果下降速度过大,很有可能在碗的底部周围来回激荡
- 随机梯度下降
- 如果数据十分冗余,完成一次完整的数据集计算再进行梯度下降十分浪费
- 去一部分进行一次权重更新,剩下的数据在这个更新结果基础上进一步进行训练
- 更极端:每个样例完成一次权重更新——SGD,又称在线学习
- 事实上,小批量更新要比在线更新好很多
- 使用较少的计算资源以更新权重
- 同时,一个小批量的矩阵乘法可以充分利用硬件在矩阵计算上的优势
- 需要注意,一个批中,应当尽可能平衡每一个类的样例数量(可以随机取)
- 使用全批量梯度下降策略,有很多方式可以加速训练
- 对于大规模网络需要大量数据进行训练时,小批量梯度下降往往是一个好选择
- 小批量梯度下降算法
- “猜出”一个初始学习率(错误总体变得严重,减小之;错误总体缓解但很慢,增大之)
- 写出一个简单程序自动调整学习率
- 随着梯度下降趋于结束,下降过程本身也会辅助减小学习率
- 当错误不再减小时,降低学习率(使用验证集判断)
用于小批量梯度下降的一些技巧 A bag of tricks for mini-batch gradient descent
-
权重的初始化
- 如果两个隐藏单元具有完全相同的权重(进和出)和偏置量,那么二者的梯度也将是完全相同的
- 为了避免这种完全相同的情况,必须要打破单元之间的对称性(小随机值初始化权重)
- 如果隐藏单元有一个巨大的输入网络,如果进向权重很大的话,很小的变化也会影响结果
- 使用小进向权重,并且让其正比于输入网络大小的平方根
- 同样,学习率也可以这样设置
- 如果两个隐藏单元具有完全相同的权重(进和出)和偏置量,那么二者的梯度也将是完全相同的
-
输入平移(每一项加入一个常量)
- 使用最陡峭的下降时,输入的平移会产生很大影响
- 平移有助于将每一个分量进行平移以得到整个训练集层面的输入零均值(让误差曲面更偏向正圆)
- 便于tanh这类激活函数更快地进行学习
- 使用最陡峭的下降时,输入的平移会产生很大影响
-
放缩输入
- 用最陡峭的下降时,输入的平移会产生很大影响
- 有助于将每一个分量进行平移以得到整个训练集层面的单位方差
- 用最陡峭的下降时,输入的平移会产生很大影响
-
对输入分量解相关(Decorrelate)
- PCA,实现降维,给出一个近似正圆的误差曲面(线性神经元)
-
多层网络可能出现的问题
- 如果一开始学习率过大,会令权重变得极大(正),或者极小(负),梯度变得非常小,误差不在变化
- 这是一个停滞阶段(plateau),但人们会总是误认为其是局部最小值
- 分类任务中的目标函数的策略选择可能会很耗时,这是另一个停滞阶段
-
减小学习率
- 过早的减小学习率会影响后期的学习效率
-
四种加速小批量学习的方法
- 使用动量学习法(Momentum):不是使用梯度直接更新权重,而是使用其改变下降的速度(是权重的改变能够记住过去的改变)
- 对每一个参数使用独立的自适应学习率(根据参数自身的情况调整学习率)
- rmsprop:将一个学习率初一过去梯度的指数加权均值
- 使用曲率信息进行优化
动量学习法 The momentum method
- 动量方法通过减弱参数在高曲率方向的震荡,将反号梯度加入,这个时候,朝向梯度的方向没有变化,而其法向被抵消了
- 其增加了沿梯度方向的速度
- 公式表达:KaTeX parse error: Undefined control sequence: \part at position 55: …epsilon \frac {\̲p̲a̲r̲t̲ ̲E} {\part \bold…,衰减前一个时刻的速度(α略小于1,即动量),同时让其沿着现在的梯度下降一个学习率步长
- 权重的改变恰等于此时的速度:KaTeX parse error: Undefined control sequence: \part at position 74: …epsilon \frac {\̲p̲a̲r̲t̲ ̲E} {\part \bold…
- 如上式,进一步地,当前时刻的权重改变可以表达成上一个时刻的权重改变以及当前的梯度
- 动量方法的行为(误差曲面视为一个碗,权重视为一个碗上的球):
- 如果误差曲面是一个倾斜平面,那么球会有一个终极速度,其来自梯度的增益速度由动量项引起的速度乘法衰减(multiplicative attenuation)来平衡,这实际上是粘度
- 如果动量接近1,其下降速度会比普通梯度下降更快:KaTeX parse error: Undefined control sequence: \part at position 58: …repsilon \frac{\̲p̲a̲r̲t̲ ̲E}{\part \bold …
- 最开始的时候,如果不慎权重很大,会产生非常大的梯度。最好用0.5左右的值,等大梯度值没有了且出现停滞,将动量值提高到0.9甚至是0.99
- 可以使用更大的学习率,因为动量方法使其更加稳定
- 对于传统的“先用梯度校正再下降”的方法,后期提出的“先下降再用梯度矫正”更加高效
每一个连接的自适应学习率 Adaptive learning rates for each connection
- 对每一个链接,使用独立的自适应学习率,通过观察权重在更新过程中发生的情况调整
- 如果权重一直在反转梯度,我们就减小学习率
- 如果梯度保持基本一致,我们就增加学习率
- 思路想法:
- 对一个多层网络,权重之间的学习率可能有很大的不同
- 梯度的幅度在不同层之间变化十分不同,尤其是初始权重很小
- 一个单元的输入数据决定了同时更新权重带来过头问题
- 因此,使用一个全局学习率,但是对每一个权重乘上一个局部增益
- 确定一个个体学习率:
- 从1开始设置局部增益
- 权重之变化为:KaTeX parse error: Undefined control sequence: \part at position 42: … g_{ij} \frac {\̲p̲a̲r̲t̲ ̲E} {\part w_{ij…
- 如果对应梯度没有变号,增加增益,否则减少
- 增加使用加法,减少使用乘法:
g
i
j
(
t
)
=
g
i
j
(
t
−
1
)
+
0.05
or
g
i
j
(
t
)
=
g
i
j
(
t
−
1
)
×
0.95
g_{ij}(t) = g_{ij}(t - 1) + 0.05 \ \text{or} \ g_{ij}(t) = g_{ij}(t - 1) \times 0.95
gij(t)=gij(t−1)+0.05 or gij(t)=gij(t−1)×0.95
- 这样可以确保在震荡出现时,大增益可以迅速衰减
- 采取这样的策略时,随机的梯度结果(变号的可能性五五开)能确保增益稳定在1周围
- 让自适应学习率工作
- 将增益值限制到合理范围内
- 使用全批量或者较大的小批量——避免编号主要来自小批量的采样错误
- 与动量方法混合(比较当前梯度和速度的符号)
- 只涉及和轴对齐额影响(动量方法不考虑轴对齐)
Rmsprop方法 Rmsprop: Divide the gradient by a running average of its recent magnitude
-
rprop方法:只用梯度的符号
- 梯度的大小在不同的权重上可能非常不同,同时还会再学习过程中发生改变
- 这令全局学习率的选择变得十分困难
- 对于全批量学习,我们可以只考虑梯度的符号解决这一问题
- 这会让权重的更新在同一量级之下
- 同时可以在小梯度值下很快地离开停滞区
- rprop方法:结合了使用梯度符号的想法以及为每一个权重分别调整学习步长的想法
- 如果梯度同号,就将学习步长以乘法放大
- 否则,就以乘法缩小(要让缩小幅度比增长大)
- 将学习步长限制在50到0.0000001
- 梯度的大小在不同的权重上可能非常不同,同时还会再学习过程中发生改变
-
rprop不能工作于小批量学习
- rprop本身用梯度的大小去除,而小批量学习会导致一个批就是一个不同的梯度值
- rmsprop方法即保持一个梯度的平方均值(指数加权平均数,移动平均数)
- KaTeX parse error: Undefined control sequence: \part at position 50: …-1)+0.1(\frac {\̲p̲a̲r̲t̲ ̲E} {\part w(t)}…(0.9和0.1可替换)
- 令梯度除以 m e a n s q u a r e ( w , t ) \sqrt{meansquare(w,t)} meansquare(w,t)
-
进一步的拓展
- 与动量方法之混合
- 与自适应学习率混合