编者按: 在日常工作, 学习中, 数据科学家最常遇到的问题之一就是过拟合. 你是否曾有过这样一个模型, 它在训练集上表现优秀, 在测试集上却一塌糊涂. 你是否也曾有过这样的经历, 当你参加建模竞赛时, 从跑分上看你的模型明明应该高居榜首, 但在赛方公布的成绩榜上, 它却名落孙山, 远在几百名之后. 如果你有过类似经历, 那本文就是专为写的 -- 它会告诉你如何避免过拟合来提高模型性能.
在这篇文章中, 我们将详细讲述过拟合的概念和用几种用于解决过拟合问题的正则化方法, 并辅以 Python 案例讲解, 以进一步巩固这些知识. 注意, 本文假设读者具备一定的神经网络, keras 实现的经验.
目录
1. 什么是正则化
2. 正则化和过拟合
3. 深度学习中的正则化
L2 和 L1 正则化
Dropout
数据增强
早停法
什么是正则化
在深入探讨这个话题之前, 请看一下这张图片:
每次谈及过拟合, 这张图片就会时不时地被拉出来 "鞭尸". 如上图所示, 刚开始的时候, 模型还不能很好地拟合所有数据点, 即无法反映数据分布, 这时它是欠拟合的. 而随着训练次数增多, 它慢慢找出了数据的模式, 能在尽可能多地拟合数据点的同时反映数据趋势, 这时它是一个性能较好的模型. 在这基础上, 如果我们继续训练, 那模型就会进一步挖掘训练数据中的细节和噪声, 为了拟合所有数据点 "不择手段", 这时它就过拟合了.
换句话说, 从左往右看, 模型的复杂度逐渐提高, 在训练集上的预测错误逐渐减少, 但它在测试集上的错误率却呈现一条下凸曲线.
来源: http://ai.51cto.com/art/201807/577630.htm