近日深度学习调参心得:应对DNN中的过拟合

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://zhuyulab.blog.csdn.net/article/details/88227946

开门见山

应对过拟合最后的结论:

  1. 增大数据集
  2. 若训练集性能下滑, 增大网络深度
  3. 考虑使用卷积神经网络, 相比于dense层,参数更少,更易收敛优化。
  4. 调整batch_size, 感觉上batch_size小的话可以更好应对过拟合。

前因后果

由于我是使用深度神经网络来处理通信中的一些优化问题,更偏向于理论方面,因此在深度学习的应用中相比其他领域有着得天独厚的优势:根据已有模型(如信道模型等)可以无限地生成样本数据。也就是说,不考虑复杂度方面的问题,我的训练集可以无限大。

过拟合

显然,实际中还是要考虑复杂度的问题的。不仅仅是生成这些样本所需要的matlab的运行时间,也有后续过大样本导致哪怕跑满1080Ti的显存也需要几分钟一个epoch。于是一开始,使用了三万样本牛刀小试, 训练集的loss完美达到了预期,而验证集上的性能惨不忍睹。显然是碰到了深度学习中常见的过拟合问题。

解决方案

不论是百度还是谷歌,都可以搜到大量相关于过拟合的应对措施。常见的比如以下几种:

  1. 增加数据量
  2. 增加dropout
  3. 增加正则化约束
  4. 减小网络参数
  5. 提前终止。。

目前看来,除了第一种,其他都比较扯淡。这里一一进行批判:
首先是第五个,简直蠢,且毫无技术含量。 在keras下使用了checkpoint的情况下,模型自动默认保存最优的情况,所以根本不需要提前终止,这也完全无法解决问题,完全是小猪一头。
dropout和正则化约束的操作,可以减小train set 和 test set之间的差距,然而这是牺牲了训练集最强性能的结果!这并不符合我们追求极致性能的要求。 (没办法,传统通信算法给的压力太大,只有神经网络的极致性能才可以达到paper要求)。 这种方法也不太妥。
减小网络参数,同样也会导致网络的表达能力下降,而导致训练集的性能严重下滑。
因此2-5的方法都不是最优的解,属于牺牲性能换取过拟合缓解的苟且偷生之法,显然非我辈首选。
因此华山一条路,只能增加数据量,好在如开头所说,我们最不缺的就是数据。

后续

于是,经过一晚上的matlab, 300万数据呼之欲出。 过拟合问题几乎迎刃而解, 然而训练集性能仍然相较小样本集大幅下降。 之后增大了网络宽度和深度,得以缓解。 后续经过了一系列调试,如今性能已可和传统算法一战, 故以此文志之。

展开阅读全文

没有更多推荐了,返回首页