PyTorch模型训练经验教训之二

同上一篇,“优化”是指提高训练速度、降低训练时间 ,效果是指模型的评价指标结果。

  1. profile会是你的好朋友。知道时间消耗在哪,是优化的第一步。
  2. 较深的网络,因为梯度过度衰减,拟合速度会很慢,尤其在训练后期。深层网络模块,需要使用残差块连接输入和输出,把梯度传播到后方网络模块——门控残差连接更佳。
  3. RNN和它的嫡系兄弟LSTM和GRU的序列长度,是另一个方向的深度,且RNN们不支持在该方向上并行处理。如果不是处理持续增长的序列数据,请考虑TCNAttention等可替代模块。
  4. 理性看待微调预训练模型,你的任务可能不需要那么大规模的模型;通用的预训练模型在垂直领域表现可能并不优秀。
  5. 一个设计良好的小型模型的效果,远胜设计一般的大型模型。这可能是整篇最重要一条。
  6. 在模型效果不能再提升时,优化几个超参数,再简单微调,也许可以把模型效果再提升一丢丢。
  7. 拟合速度很慢的模型,很可能不是一个设计良好的模型,很难或者不可能取得期望的效果。
  8. 池化层是免费(没有学习参数)的提取主要/平均特征的网络组件。
  9. 文档中的重要信息,可能很不起眼。浏览文档时,往往因为文档上太多不需要的信息,而漏掉重要的信息。
  10. 看起来“错误”的操作,可能并不影响结果。看起来“正确”的操作,可能导致模型效果意外下降。一切以最终结果为准。
  11. 训练/验证/测试的准确率可能没有任何意义。原因可能是:训练/验证/测试数据出现一定程度的数据倾斜;训练/验证/测试数据分布与生产数据分布差异较大。
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *