深度模型训练方法(二)

在文章<深度模型训练方法>中提到,深度模型中拥有很多超参,模型的训练其实就是一个调超参的过程。而在调超参时,我们主要降低模型的Bias和Variance.

训练模型的一般性步骤

  1. Fit training set well on cost function
  • train a bigger network
  • switch to a better optimization algorithm, such as Adam
  • train longer
  • ...
  1. Fit dev set well on cost function
  • train a bigger network
  • regulariztion
  • dropout
  • get more data on training set
  • ...
  1. Fit test set well on cost function
  • go back to optimize the dev set
  • get a bigger dev set
  • ...
  1. Performs well in real world
  • go back to change the dev set
  • optimize the cost function
  • ...

训练集上的优化

训练模型时,我们一般需要有四个步骤,首先需要调整模型在训练集上的表现,如果在训练集上表现不佳,说明出现了模型的“欠拟合”状态。
原因可能有以下两方面表现:

  1. 模型的参数还没有迭代彻底,此时可以多花点时间让模型迭代,或者改用学习速度更快的optimization algorithm
  2. 另一种情况就是数据规律比较复杂,模型拥有的参数不足以刻画数据中的规律,所以需要增强模型结构。

验证集上的优化

如果模型在训练集上表现优越,但在验证集上欠佳,改善方式有以下:

  1. 模型过于复杂,隐藏层中的参数过大,导致非线性激励函数输出结果系数过高,从而出现过拟合状态,这时可以用regulariztion约束参数过大,从而避免过拟合现象
  2. 另一种避免过拟合方法是dropout,通过随机排除隐藏层中的一些参数,从而避免部分参数过于拟合某几类数据特征,从而使模型更一般性地描述数据特征
  3. 应用更大的网络结构有助于学习数据中的更一般性的规律特性,从而更好地表现在dev set上
  4. 最后,由于训练集数据质量偏执,例如与验证集规律存在差异等原因,此时可以增加更多的训练集,让训练集中的数据拥有更普遍的规律性

测试集上的优化

如果模型在验证集上表现良好,但测试集上表现不佳:

  1. 调整验证集数据分布,然后重新测试验证集,对模型进行调整
  2. 数据集分布没有问题的话,可以尝试使用更大的网络结构学习数据中更一般性的规律

实际应用过程的优化

模型在训练集,验证集,测试集上表现都很好,但应用时表现不佳:

  1. 根据实际应用情况改变测试集数据分布,然后根据测试集调整模型
  2. 另一种情况就是刻画模型的损失函数计算存在问题,重新计算模型的损失函数,合理度量数据

提前结束模型的迭代

很多人为了增强模型在dev set上的表现,提前结束模型的迭代训练,这么做的原因是为了避免模型过度训练而导致过拟合。

这种避免过拟合的方式不建议采用,因为这种方式也影响了模型在training set上的训练,即同时影响着训练集和验证集上的模型性能表现,其干扰性很强,容易阻碍调整超参的整体流程。所以优化模型在dev set上的表现,最好采用前面提到的方式,避免提前结束模型训练。

你可能感兴趣的:(深度模型训练方法(二))