调参优化方法
1.好的初始点 + 合适的LR + 好的优化方法基本可以解决大部分问题。如果还不行可以考虑换个loss。其它的花样太多往往很虚。
2.有很多无脑的配置确实可以尝试,比如3x3的卷积核,relu激活函数,加shuffle,加数据增强,加BN,加Dropout等。dropout可以从0. 5往上加,optimizer可以用Adam或者SGD+0.8/0.9的Momentum。
3.一定要记得实时打印一些结果,比如训练loss、训练accuracy、验证accuracy,能画出图的就画个图。一边看图一边可以发现不少问题,尤其是关于学习率和过拟合的
4.学习率是损失函数loss收敛快慢的重要参数,若loss无比巨大,来回变化,减小学习率;
loss减小慢,增大学习率,训练过程中;
调整lr,有助于减小loss,刚开始lr要小点。
优化方式:
组合优化:不同超参数的组合非常多,比如神经网络的层数,每层的神经元个数,每层使用的激活函数,使用的最优化算法等,这些参数随便组合起来就上百万了
混合优化:参数中既有连续变量(比如lr的正则项系数),又有类别变量(比如选择l1或者l2)
超参数有:学习速率,迭代次数,层数,每层神经元的个数
模型优化方式:
第一方面:反复实验先验框的尺寸和数量,右图是部分先验框数据,实际训练通过不断地修改先验框尺寸从而找到恰当的先验框,来加快训练收敛速度
第二方面:参数调整,通过控制变量法调整参数,包括学习率,epoch,batch-size等
这是通过调整学习率来优化模型,通过反复实验发现学习率为0.001的时候效果是比较好的。loss最终在12左右
另外尝试加入函数ReduceLROnPlateau来调整学习率,这个函数是用来监测某个指标的,本文通过监测loss值,
当指标不再提升时,减少学习率。当学习停滞时,减少2倍或10倍的学习率以此获得更好的效果
RNN系列、CNN、 Attention系列 + 激活函数 + 损失函数 + 优化器 + BN + Transformer+Dropout(正则化)
1.激活函数:线性的f(x) = x, 网络的逼近能力相当有限, 因此,要引入非线性的函数作为激励函数, 深层网络的表达能力就更加强大
sigmoid、 tanh、 ReLU、Leakly ReLU、MaxOut
2.损失函数:损失函数(loss function): 是定义在单个样本上的,一个样本的误差。
代价函数(cost function): 定义在整个训练集上的,所有样本误差的平均,所有损失函数的平均
目标函数(object function): 指最终需要优化的函数,经验风险 + 结构风险,或(代价函数 + 正则化项)
3.优化器:Adam SGD
4.BN:防止 梯度消失。遇到收敛速度很慢,梯度爆炸等情况,可以用BN。每次SGD的时候, mini-batch做规范化操作
作用:可以以更大的初始学习率,去训练模型,会很快的收敛。也算正则化的一种形式,不需要再去理会 dropout 、L1 L2。 不需要再去专门 部归一化。 本身就是一个归一化网络层
5.正则化:缓解过拟合
开源的实验管理工具allegro trains。很容易将其集成到代码中,并且可以实现开箱即用的不同功能。它可以作为Tensorboard的替代品,用于可视化实验结果。