【深度学习】常见的提高模型泛化能力的方法

前言

模型的泛化能力是其是否能良好地应用的标准,因此如何通过有限的数据训练泛化能力更好的模型也是深度学习研究的重要问题。仅在数据集上高度拟合而无法对之外的数据进行正确的预测显然是不行的。本文将不断总结相关的一些方法。

一、模型角度

Dropout


首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变。然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b),然后继续重复这一过程。
Dropout简单来说是是模型节点随机失活,这样使之不会太依赖数据的某些局部特征。
那么为什么这样做能提高模型返回能力呢?
取平均的作用
模型的随机失活最终相当于得到了不同的模型,然后类似于投票取各个子模型普遍认同的解,这样将更具有参考价值。有一些集成学习的意味,最终能提高模型的泛化效果。
减少神经元之间复杂的共适应关系
因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。

更深的模型

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

更宽的模型

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

正则化

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

二、数据角度

更多的数据

这个不怎么需要解释,更多的数据能够让模型更充分的认识所要识别的问题,学到更加共性的信息

数据增强

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

更好的特征

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

三、训练角度

小的Batch Size

这里在之前有讨论过,经过测试小批量数据训练能提高模型的泛化能力。

提前结束

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

总结

提高模型的效果可以从很多角度出发,包括数据角度、模型设计角度与训练角度,其实就是我们深度学习问题的各个阶段,都有改进与提升的余地。

参考资料

https://blog.csdn.net/program_developer/article/details/80737724
https://blog.csdn.net/starzhou/article/details/52754436

发布了75 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Swocky/article/details/105717067