博客来源于本人在深度学习中的知识点总结,基于本人学习进度不定期更新。
Reference:
1. http://blog.csdn.net/a635661820/article/details/45390671
2. http://blog.csdn.net/dark_scope/article/details/47056361
Reference:
1. https://zhuanlan.zhihu.com/p/29119239
Feature Map: 卷积层计算之后的值。
图中通道数为5,通过kernels中计算,得到的Feature Maps(输出矩阵)数量是通过:
计算得到。
因此8*8的图像中,3*3的kernel则得到的输出矩阵维度为6*6。同时在同一个kernel中上一层的不同输入通道的值卷积后相加。即得到的3个6*6,经过完全相加。
最后的Fully-Connected层是完全扩展成1维向量,维度为1*(6*6*5)。
1*1卷积核的作用:
增加通道数、降低通道数、增加非线性变换。
优化算法之前讨论两个问题:
1. 局部最小值问题。在深度学习中,最优化问题其实并不容易困在局部最小值点。在高维度空间时(如20000维),局部最小值点需要在所有维度上都取得最小值,概率为2−200002−20000,反而更容易困在鞍点处。
同时平稳端(plateaus)也会使得学习变慢,因此可以通过学习率衰减例如Adam或者RMSProp加速学习。
2. 指数加权(移动)平均(Exponentially Weighted (moving) average)
在数据抖动较大的情况下,利用之前的整体变化趋势预测当前值。例如预测今天的气温,可以对之前每天的气温进行平滑处理,即指数加权移动平均,一般形式为:
深度学习中的SGD指mini-batch gradient descent。在训练过程中,采用固定的学习率。
其中,ηη是学习率,gtgt是梯度SGD完全依赖于当前batch的梯度,所以ηη可理解为允许当前batch的梯度多大程度影响参数更新。
通常而言,就总训练时间和最终代价而言,最优初始学习率的效果会好于大约迭代100次后最佳的效果。
缺点:
(1). 选择合适的learning rate比较困难,且对所有的参数更新使用同样的learning rate;
(2). SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点(其实在合适的初始化和step size的情况下,鞍点的影响并没有很大)。
动量方法旨在加速学习,特别是在面对小而连续的梯度但是含有很多噪声的时候。动量模拟了物体运动时的惯性,即在更新的时候在一定程度上会考虑之前更新的方向,同时利用当前batch的梯度微调最终的结果。这样则可以在一定程度上增加稳定性,从而更快的学习。
特点:
(1)、下降初期时,使用上一次参数更新,当下降方向一致时能够加速学习
(2)、下降中后期,在局部最小值附近来回振荡时,gradient–>0,使得更新幅度增大,跳出陷阱;
(3)、在梯度改变方向时,能减少更新。总体而言,momentum能够在相关方向上加速学习,抑制振荡,从而加速收敛。
Nesterov项在梯度更新时做出校正,避免前进太快,同时提高灵敏度。在动量中,我们将其展开为:
可以看到,此前积累的动量mt−1mt−1并没有直接改变当前梯度gtgt,所以Nesterov的改进就是让之前的动量直接影响当前的动量,即:
所以,加上Nesterov项后,梯度在大的跳跃后,进行计算对当前梯度进行校正。
Nesterov动量和标准动量的区别在于梯度的计算上。Nesterov动量的梯度计算是在施加当前速度之后。因此,Nesterov动量可以解释为往标准动量方法中添加了一个校正因子。
在训练开始的时候,我们远离最终的最优值点,需要使用较大的学习率。经过几轮训练之后,我们需要减小训练学习率。
对于采用mini-batch梯度下降时,在迭代的过程中会伴随有噪音,虽然cost function会持续下降,但是算法收敛的结果是在最小值附近处摆动,而减小学习率,则会使得最后的值在最小值附近,更加接近收敛点。
Divide the learning rate of each parameter by the root mean square of its previous derivatives(将每个参数除以之前所有梯度的均方和)。
此处,对gtgt从1开始t进行一个递推形成一个约束项regularizer,εε保证分母非0。
特点:
1. 前期gtgt较小的时候,regularizer较大,能够放大梯度;
2. 后期gtgt较大的时候,regularizer较小,能够约束梯度;
3. 适合处理稀疏梯度。
缺点:
1. 需要手动设置一个全局的学习率;
2. ηη设置过大时,会使regularizer过于敏感,对梯度的调节太大;
3. 中后期,分母上梯度平方的累积将会越来越大,使gradient–>0,使得训练提前结束。
Adadelta是Adagrad的拓展,最初方案依旧是对学习率进行自适应约束,但是进行了计算上的简化。Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。即:
在此时Adadelta还是依赖于全局学习率,但是作者处理后,
此时Adadelta已经不再依赖于全局学习率了。
特点:
1. 训练初中期,加速效果不错;
2. 训练后期,反复在局部最小值附近抖动。
RMSProp可以看做为Adadalta的一个特例,也即上述式子中ρ=0.5ρ=0.5,然后再求根的话,就变成RMS(均方根):
随着ηtηt在不同范围内(11−v)(11−v)的平均,对于变化较大的值方向能够抑制变化,较小的值方向加速变化,消除摆动加速收敛。
RMSProp的特点如下,
优点:
1. 由于采用了梯度平方的指数加权平均,改进了AdaGrad在深度学习中过早结束的问题,效果趋于二者之间;
2. 适用于处理非平稳过程(也即过程依赖于时间,采用指数加权平均时对于非平稳过程处理较好)-对于RNN效果较好。
缺点:
1. 仍然依赖于全局学习率。
Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSProp,它利用了梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正(Bias correction,为了修正在训练初期的误差,当t变大后,偏置校正效果减弱)后,每一次迭代学习率都有个确定范围,使得参数比较平稳。
偏置修正(Bias Correction)的效果:
当初始化v0=0v0=0时,v1=0.98v0+0.02θ1v1=0.98v0+0.02θ1(其中θ1θ1为当前时刻的值),可以看到v1v1远小于当前的值θ1θ1,接下来v2=0.98v1+0.02θ=0.98∗0.02θ1+0.02θ2v2=0.98v1+0.02θ=0.98∗0.02θ1+0.02θ2,得到的结果θ2θ2远小于当前时刻的值θ2θ2,因此在训练初期时与真实值会有较大误差(也即初期时绿色线和紫色线的差别)。
因此采用vt=vt1−βtvt=vt1−βt时,当t较小时,vtvt能得到修正偏差,也即下图右边所示,而当t逐渐变大时,由于ββ小于1,则偏置效果减弱。
Adam优化算法如下:
通常,μμ的值可以设置为0.9,vv的值可以设置为0.999。其中,mtmt,ntnt分别是梯度一阶矩估计和二阶矩估计,可以看做对期望E|gt|E|gt|,E∣∣g2t∣∣E|gt2|的估计,可以看做对的校正,可以近似为对期望的无偏估计。
特点:
1. 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点;
2. 对内存需求较小(指数加权平均不需要存储大量的值就能平均);
3. 为不同的参数计算不同的自适应学习率;
4. 也适用于大多非凸优化 - 适用于大数据集和高维空间。
1. L2正则(更倾向于使用,虽然需要尝试不同的)
2. Dropout
3. Data Augmentation
4. Early stopping
Early stopping的缺点:通常我们对于任何机器学习系统的学习可分为两步:1、优化成本函数J,最优化包括RMSProp、Adam或其他包含momentum的方法等;2、预防过拟合,包括一些正则化步骤。但是early stopping将两者同时进行,无法保证学习的充分性。