一. 优化算法
1. 随机梯度下降法(SGD
)
表达式:
缺点:
- 如果损失函数对某一维的参数敏感,而对另一维的参数不敏感,那么容易出现z-形优化路径。
图 1. z-形优化路径
- 会陷在局部最小值或鞍点附近。对于高维参数空间,出现鞍点的情形要远频繁于出现局部最小值的情形。
- 小批量数据使得优化方向受噪声影响严重,导致行进到最优解的路径会很长。
2. 带动量的随机梯度下降法(SGD+Momentum
)
表达式:
即定义一个随时间变化的速度,每次计算的梯度视为速度的修正(动量)。这样有助于克服梯度计算过程中一些噪声的影响。
Nesterov Momentum
:
即在速度方向上前进一步,然后计算梯度,将这里的梯度和刚才的速度加权求和作为前进方向。基本思想是:如果速度方向出现了一点偏差,那么前进后的梯度方向会校正速度方向。
3. AdaGrad
与RMSProp
AdaGrad
维持一个对各个维度的梯度模值的统计,然后在更新参数时,用这个取规范化梯度。这样可以解决梯度向量的条件数恶化的问题。但随着学习的进行,后续更新会越来越慢。
RMSProp
将累积的梯度模值,替换成线性加权的梯度模值。
4. Adam
Adam
整合了动量法和RMSProp方法。但还有个问题:在最起初的步骤,由于线性加权中的权值较大一项被初始化为0,则在规范化梯度时,会出现除以一个小量的现象。Adam
会对所用的两个参数进行偏置校正。
5. 二阶优化方法
- 将损失函数展开到二阶项,然后根据二次型表达,直接求出此时最小值对应的参数。
- 需要求解
Hessian
矩阵的逆。一个近似方法是Quasi-Newton
方法(最流行的是BGFS
),适用于风格迁移这种随机性很小、参数不多的应用场景。
二. 学习速率衰减
- 阶梯式衰减:以某个常值遍历几次数据集后进行衰减。
- 指数式衰减: 。
- 幂次衰减:
三. 集成学习
- 训练多个模型,在预测时集成相应输出结果。
- 还可以保留训练过程中,模型陷入各个局部最优解时的参数快照。
四. 正则化
正则化的一般模式:在训练阶段,给网络添加一些随机性,避免网络对训练数据的拟合过度。在测试阶段,则期望这种随机性被去除,从而提高泛化能力。
扫描二维码关注公众号,回复:
3322530 查看本文章
1. Dropout
策略
- 按一定比例,随机地将某些神经元置0。
- 在卷积层应用
Dropout
时,是将某些卷积核所输出的特征层全部置0。 - 在预测时,不进行置零操作,而是将输出乘上训练时置零的概率。或是为了预测时的计算效率,用训练时的除以相应概率。(这样做的基本想法是使得预测时产生的数据的特征和训练时的一样。一个简单的推导是在穷举的情况下进行一下平均。)
- 由于每次只能更新部分参数,因此采用
Dropout
会使得训练过程变长。 Dropout
起到正则化作用的一个解释:这种做法使得模型能够学习到关于数据的特征的冗余表达,从而降低相关联的特征对决策的影响。(即避免模型学到了训练数据的显著特征,出现过拟合,而不再进行学习或不能跳出局部最优解。)Dropout
起到正则化作用的另一个解释:相当于一个集成学习的过程。
2. 数据增强
- 图像裁剪。
- 图像几何变换。
- 颜色抖动。
五. 迁移学习
根据所拥有的数据集的大小,决定重新训练的层数。
一些框架的模型库
- Caffe: https://github.com/BVLC/caffe/wiki/Model-Zoo
- TensorFlow: https://github.com/tensorflow/models
- PyTorch: https://github.com/pytorch/vision