- 自适应学习率调整
- 神经网络经典五大超参数:
- 学习率(Leraning Rate)
- 权值初始化(Weight Initialization)
- 网络层数(Layers)
- 单层神经元数(Units)
- 正则惩罚项(Regularizer|Normalization)
- 历史:Vapnik做SVM支持向量机的时候,通过巧妙的变换目标函数,避免传统神经网络的大部分超参数,尤其是以自适应型的支持向量替代人工设置神经元,这使得SVM可以有效免于过拟合之灾。
- 超参数优化问题的解决方法:
- Pre-Traning自适应调出合适的权值初始化值。
- LSTM长短期记忆网络,可视为“神经网络嵌套神经网络”,自适应动态优化层数。
- AdaGrad,自适应来调整学习率。
- 常规优化方法:
- 一个超参数(常数)的退火公式:
模拟退火基于一个梯度法优化的事实:在优化过程中,Weight逐渐变大,因而需要逐渐减小学习率,保证更新平稳。
-
动量法:引入动量因子
在更新中引入0.9这样的不平衡因子,使得:
-
在下降初期,使用前一次的大比重下降方向,加速;
-
在越过函数谷面时,异常的学习率,会使得两次更新方向基本相反,在原地”震荡“此时,动量因子使得更新幅度减小,协助越过函数谷面。
-
在下降中后期,函数面局部最小值所在的吸引盆数量较多,一旦陷进吸引盆当中,Gradient→0,但是前后两次更新方向基本相同。此时,动量因子使得更新幅度增大,协助跃出吸引盆。
-
- AdaGrad思路基本是借鉴L2 Regularizer,不过此时调节的不是W,而是Gradient:
- AdaGrad过程,是一个递推过程,每次从τ=1,推到τ=t,把沿路的Gradient的平方根,作为Regularizer。
- 分母作为Regularizer项的工作机制如下:
- 训练前期,梯度较小,使得Regularizer项很大,放大梯度。[激励阶段]
- 训练后期,梯度较大,使得Regularizer项很小,缩小梯度。[惩罚阶段]
- 由于Regularizer是专门针对Gradient的,所以有利于解决Gradient Vanish/Expoloding问题。所以在深度神经网络中使用会非常不错。
- 缺陷:
- 初始化W影响初始化梯度,初始化W过大,会导致初始梯度被惩罚得很小。此时可以人工加大η的值,但过大的η会使得Regularizer过于敏感,调节幅度很大。
- 训练到中后期,递推路径上累加的梯度平方和越打越多,迅速使得Gradinet被惩罚逼近0,提前结束训练
- 一个超参数(常数)的退火公式:
- AdaDelta:
- 基本思想是用一阶的方法,近似模拟二阶牛顿法。
- 缺陷:
- 局部最小值:
- 从多个数据集情况来看,AdaDelta在训练初期和中期,具有非常不错的加速效果。但是到训练后期,进入局部最小值雷区之后,AdaDelta就会反复在局部最小值附近抖动。
- 主要体现在验证集错误率上,脱离不了局部最小值吸引盆。这时候,切换成动量SGD,如果把学习率降低一个量级,就会发现验证集正确率有2%~5%的提升,这与常规使用动量SGD,是一样的。之后再切换成AdaDelta,发现正确率又退回去了。再切换成动量SGD,发现正确率又回来了。
- 注:使用Batch Norm之后,这样从AdaDelta切到SGD会导致数值体系崩溃,原因未知。
- 人工学习率的量级降低,给训练造成一个巨大的抖动,从一个局部最小值,抖动到了另一个局部最小值,而AdaDelta的二阶近似计算,或者说所有二阶方法,则不会产生这么大的抖动,所以很难从局部最小值中抖出来。
- 这给追求state of art的结果带来灾难,因为只要一直用AdaDelta,肯定是与state of art无缘的。基本上state of art的结果,最后都是SGD垂死挣扎抖出来的。这也是SGD为什么至今在state of art的论文中没有废除的原因。
- 精度
- eps的数值不是固定的。
- 1e-6在Caffe Cifar10上就显得过小了,1e-8比较适合。
- 这意味着不同数值比例体系,精度需要人工注意。
- paper里高精度反而没低精度好,说明精度也有比较大抖动。
- 局部最小值:
Adadelta--学习笔记
于 2022-11-03 20:01:58 首次发布