1 优化器
优化(min/max)目标函数(损失函数)的算法,用于更新参数。
SGD:每个batch更新一次参数,一般结合学习率动态调整策略。SGD通常训练时间更长,但是在好的参数初始化和学习率调度方案的情况下,结果更可靠。
Adam:默认学习率为0.001,收敛速度更快,在复杂网络中表现更优。但是不是很稳定,尤其在训练后期容易震荡。
2 学习率
学习率的设置应该随着迭代次数的增加而减小,每迭代完指定次epoch也就是对整个数据过一遍,然后对学习率进行变化,这样能够保证每个样本得到公平的对待。学习速率的设置第一次可以设置大一点的学习率加快收敛,后续慢慢调整;也可以采用动态变化学习速率的方式(比如,每一轮乘以一个衰减系数或者根据损失的变化动态调整学习速率)。
3 DropOut
数据第一次跑模型的时候可以不加dropout,后期调优的时候dropout用于防止过拟合有比较明显的效果,特别是数据量相对较小的时候。
4 权重初始化
深度学习中权重初始化对模型收敛速度和模型质量有着重要的影响。参数在刚开始不能全都初始化为0。对于经典CNN模型,一般可以使用迁移学习策略初始化网络权重。
5 训练轮数
训练到模型收敛的时候即可停止。对于 PyTorch 可以使用 tensorboardX 来记录训练中的损失,可以实时可视化观察训练/验证损失的变化趋势。
6 正则化
正则化之所以能够降低过拟合的原因在于,正则化是结构风险最小化的一种策略实现。
给loss function加上正则化项,能使得新得到的优化目标函数h = f+normal,需要在f和normal中做一个权衡(trade-off),如果还像原来只优化f的情况下,那可能得到一组解比较复杂,使得正则项normal比较大,那么h就不是最优的,因此可以看出加正则项能让解更加简单,符合奥卡姆剃刀理论,同时也比较符合在偏差和方差(方差表示模型的复杂度)分析中,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度。
L1正则化和L2正则化:
L1正则化就是在loss function后边所加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多)。L2正则化就是loss function后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。