学习率
学习率退火
在训练初始阶段使用较大的学习率,,损失函数稳定后下降学习率:
- 按步长下降
- 按比例下降
- 按倒数下降
学习率升温Warmup
在训练前几轮学习率逐渐上升,直到预设的学习率,以稳定训练的初始阶段
-
线性上升: lr_config = dict(policy=‘step’, step=[30, 60, 90])
达到指定学习率0.1,在30个epoch时学习率下降1/10为0.01,在60个epoch时学习率下降1/10为0.001,在90个epoch时学习率下降1/10为0.0001
自适应梯度算法
- 不同梯度需要不同的学习率
- 根据梯度的幅度自动调整学习率:如Adagrad, ADAM, RMSProp
权重初始化
针对卷积层和全连接层,初始化连接权重 w 和 b
随机初始化
- 朴素方法:依照均匀分布或高斯分布
- Xavier方法(2010):前传时维持激活值的方差,反传时维持梯度的方差
- Kaiming方法(2015):同上,但是针对ReLU激活函数
早停
将训练数据集划分为训练集和验证集,在训练集上训练,周期性在验证集上测试。、
当验证集的loss不降反升时,停止防止过拟合。
正则化与权重衰减weight decay
- 在损失函数中引入正则化项,以鼓励训练出相对简单的模型
- 结构风险的梯度
- 梯度更新策略
图像增广Data Augmentation
- 泛化性好的模型(大量多样化的数据)
- 数据的采集标注是有成本的
- 数据增广(几何变换、色彩变换、随机遮挡)
- 利用简单的随机变换,从一张图片扩充出多张图片
批归一化 Batch Normalization(2015)
- BN一般用于卷积层:将同一通道内、不同空间位置、来自不同样本的所有响应值归为一组进行归一化
- 应用BN的卷积层一般不需bias
不同的归一化层(Batch Norm、Layer Norm、Instance Norm、Group Norm)
总结
- 随机梯度下降为主,各种经验策略辅助
- 损失函数高度不规则,非凸
- 权重初始化:Kaiming init,预训练模型
- 优化器改进:动量SGD、自适应梯度算法
- 学习率策略:学习率退火、学习率升温
- 防止过拟合
- 数据增广、早停、Dropout
- Batch Normalization:稳定特征数据分布,降低训练难度