深度神经网络训练之调参

在训练一个网络时,一般将数据集分成三份:训练集、验证集、测试集,用训练集训练网络,虽然损失函数一直在降低,但是一个波动值,所以保存模型的时候损失函数不一定是最小值,需要保存多个模型,验证集的作用就是在这几个模型中挑选出一个精度最高的。测试集用来测试模型的优劣。
一般依据训练损失和测试精度对模型进行调参。

  • train_loss 不断下降,test_acc趋于不变
    这种情况说明模型出现了过拟合或者是数据不匹配,模型中加在某一特征上的权重较大导致模型学到了训练集特有特征,当样本改变时,模型不能很好地适用于新样本,即存在高方差。解决方法有:
    ♠ 通过L2、F范数等正则化方法减小权重。
    ♠ 通过Dropout随机删除神经元
    ♠ 扩增数据
    ♠ 早停止训练
    ♠ 寻找更合适的结构,比如说在处理图片时找到的更适合的结构CNN。
    ♠ 人工查看训练集和验证集的样本,将训练集调整的更像验证集即人工合成数据。
  • train_loss 趋于不变,test_acc不断下降
    这种情况说明数据集有问题,需要人工检查两个数据集。
  • train_loss 趋于不变,test_acc趋于不变
    这种情况说明学习遇到瓶颈,出现了梯度消失,解决方法有:
    ♠ 减小学习率,;训练开始阶段不要将学习率设的太低,一般设为0.01,在训练后期可以稍微减小,0.001较好。
    ♠ 增大batch_size,单个样本更新方向随机性大,容易震荡,而每次利用全量的样本相当于在全局的最优梯度下进行参数更新。增大batch_size等价于使用更多的样本,梯度更加接近全局最优梯度
    ♠ 使用ReLU
    ♠ 使用BN(Batch Normalization),虽然每层的输入发生了变化,但是数值的均值和方差不变,限制了前面层参数更新对数值分布的影响程度,所以后面层学习更加容易一些,使得参数的训练更加容易,深度神经网络随着网络深度的加深,训练起来越困难,收敛越来越慢,这种问题的本质原因是梯度消失,BN的作用是使激活输入值落在非线性函数对输入比较敏感的区域即梯度非饱和区,使梯度强行变大,避免了梯度消失现象。使网络收敛变快
  • train loss 不断上升,test loss不断上升
    这种情况说明网络结构设计不当,训练超参数设置不当,数据集经过了清洗

你可能感兴趣的:(视觉工程师)