本文主要是介绍神经网络训练不起来怎么办(零)| General Guidance,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
摘要:模型性能不理想时,如何判断 Model Bias, Optimization, Overfitting 等问题,并以此着手优化模型。在这个分析过程中,我们可以对Function Set,模型弹性有直观的理解。
关键词:模型性能,Model Bias, Optimization, Overfitting。
零,领域背景
如果我们的模型表现较差,那么我们往往需要根据 Training loss 以及 Testing loss 判断、推理成因,以此来制定策略,优化我们的模型。
Ⅰ,训练损失
训练损失往往被大部分人忽略,但对模型性能的分析与优化,最首先需要分析的就是 training loss 的情况。如果 training loss 比较小,那么万事大吉,如果 training loss 比较大,那么主要由以下两个方面导致。
- Model Bias:模型拟合训练数据的性能瓶颈。Function Set 中没有最优解,可以理解为大海捞针,针却不在海里。
- Optimization:模型参数更新的瓶颈。Function Set 中存在最优解,可以理解为大海捞针,没捞到针就停下了。
Ⅱ,模型弹性
成因分析:理解模型的弹性便是判断 training loss 不理想成因的关键:
模型弹性小:出现 Model Bias 问题,但Optimization 过程容易,往往得到 global minimal。
模型弹性大:解决 Model Bias 问题,但Optimization 过程困难,往往陷入 local minimal。
弹性越大的模型,其 Function Set 一定包含弹性较小模型对应的 Function Set。因此 Model Bias 的问题可以通过增大弹性的方式解决,当然也容易带来 Optimization 的问题。引入模型弹性概念之后,我们也发现 Model Bias 和 Optimization 实际是一个矛盾体。机器学习的本质工作,也可以形象地理解为在特定任务上的矛盾体中找到一个平衡点。
训练策略:因此,我们不需要从一开始就设计一个弹性很大的模型,可以采用循序渐进的策略。
先使用较为浅层的模型 or 机器学习的精确模型,此时 training loss 基本排除 optimization 的情况。我们以此作为 baseline,观察此时的 loss。
随后再增大模型的弹性,在尽力达到 baseline 的基础上,提升性能。
弹性控制:本质是控制模型的可学参数数量,可以从输入特征数量 & 模型架构(比如结点数,层数)两个方面,即数据和模型两个维度,增加模型的可学参数。此处的模型弹性都是从定性的角度理解,定量的分析思路将在之后的课程介绍。
Ⅲ,测试损失
testing loss:如果 training loss 理想,那么说明当前参数下的模型能够很好地学习到训练集的特征。此时就需要转向关注 testing loss。主要有以下两种情况:
- testing loss 理想,万事大吉
- testing loss 较高,可能是 overfitting or mismatch。
Overfitting:模型弹性较大,模型在满足样本空间外,自我发挥的空间很大。可以通过数据(增加训练样本数量) & 模型(减小模型弹性)的方式避免问题。注意:机器学习研究者的核心工作不是搜集资料,以后学习应该尽可能避免资料的收集工作,将精力放在模型研究上。比如,CNN网络架构实质就是 Fully-Connection Network 的子集,是根据图片的特性,设计为带有限制的、弹性更小的一个FCN。
Mismatch:训练数据 & 测试数据的分布不一致。本质上需要建立在你对训练、测试资料的产生方式的理解。遇到的情况较少,一般测试集都是从训练集划分。
Ⅳ,其他策略
Valid Set:用于模拟 Private Testing Set。
N-fold Cross Validation:划分数据集,用于评估多个模型的泛化性能好坏。
以上两种方法本质都是为了用训练集数据,得到一个更加鲁棒的模型,使其能够经受住未知的测试数据的考验。
思考总结
成因推理:我们能否知道一个完整的分析思路,用于判断我们模型表现不理想的成因。
模型弹性:这里提到的“模型弹性”是一个很新的角度,无论是 Model Bias, Optimization 还是 Overfitting 的问题都能够通过这个概念直观地进行成因分析。
这篇关于神经网络训练不起来怎么办(零)| General Guidance的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!