深度模型参数及超参数调整的经验汇总

(1)初始化
对网络的权重参数进行初始化,比如:
Xavier 的uniform, normal;
一般的均匀分布,标准正态分布都可以尝试。

神经网络参数初始化及Pytorch接口

(2)Batch Normalization
加快网络收敛,如果有BN了,全连接可以考虑不加Dropout。

(3)**函数
选择Relu, 也可以改成PReLU, GELUs等relu变形。

(4)学习率
使用学习率衰减, 初始化的LR, 0.01, 0.001, 0.0001 等。
注意的是,如果开始的学习率过大, 可能因为RELU**函数,使得一些神经元永久 “死亡”。

(5)归一化
比如 z-score 归一化。

(6)残差结构和密集连接

Resnet的残差结构和dense net的密集连接,都可以应用到全连接网络中。

(7)损失函数
根据任务选择合适的损失,比如 focal loss能对YOLOv3 带来提升。

(8)Ensemble
对模型结果进行集成。

(9)防止过拟合
L1,L2正则项,限制参数搜索空间;

(10)优化器
自适应的优化器, Adam, RMSprop, 等。

(11) batch size大小
小批量添加正则化的效果大;
大批量添加的正则化效果小,收敛需要的epoch更多。

模型对不同超参数的敏感度:
深度模型参数及超参数调整的经验汇总
也就是,优先调整学习率, 网络层数,网络参数初始化。


参考:

  1. 深度学习调参有哪些技巧?