文档首页 > > 常见问题> 模型管理>

如何提升模型的泛化能力?

如何提升模型的泛化能力?

分享
更新时间:2021/01/12 GMT+08:00

提升模型泛化能力有很多方法,您可以参考以下三个角度:

模型角度

  • Dropout

    Dropout实现过程:首先随机删掉网络中一半的隐藏神经元,输入输出神经元保持不变。输入x通过修改后的网络前向传播,得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w, b),然后继续重复这一过程。Dropout简单来说是是模型节点随机失活,这样使之不会太依赖数据的某些局部特征。

    那么为什么这样做能提高模型返回能力呢?主要有以下两个方面:

    1. 取平均的作用

      模型的随机失活最终相当于得到了不同的模型,然后类似于投票取各个子模型普遍认同的解,这样将更具有参考价值。与集成学习类似,最终能提高模型的泛化效果。

    2. 减少神经元之间复杂的共适应关系

      因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况,使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。

  • 更深的模型

    模型更深可以学到更为抽象的特征,从而提高模型对物体认识的层次。

  • 更宽的模型

    综合多种特征,在模型设计时将多个维度的特征进行融合,得到更加有效的信息。这也是提高模型学习效果的一个改进思路。

  • 正则化

    模型的损失函数加入正则项可以防止参数过大,防止过分拟合从而提高泛化能力。

数据角度

  • 更多的数据

    更多的数据能够让模型更充分的认识所要识别的问题,学到更加共性的信息。

  • 数据增强

    数据增强就比较好理解了,比如识别图片中的某个物体,不能因为图片放大或缩小、比例改变、图像截取、角度改变以及翻转就识别不出来了,所以对数据进行这类操作一方面可以扩充数据集,另一方面也能去除像比例关系这种无关因素对训练的影响,从而提高模型的泛化能力。

  • 更好的特征

    比如对数据进行更好的的标注,让其对所识别物体的认识更加符合人的思维,或者说认识到更加本质的信息,或者说对问题进行等价转换,能够有更好地学习效果。

训练角度

  • 小的“Batch Size”

    小批量数据训练能提高模型的泛化能力。

  • 提前结束

    这里即防止模型过度拟合,当模型在验证集上效果下降时及时停止。

分享:

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问
{{site}}{{lan}}
{{site}}{{language}}