机器学习(深度学习)中的过拟合与欠拟合

一.相关概念

机器学习的根本问题是优化泛化之间的对立。

优化(optimization):调节模型以在训练数据上得到最佳性能

泛化(generalization):训练好的模型在前所未见的数据上的性能好坏

训练开始时,优化和泛化是相关的:训练数据上的损失越小,测试数据上的损失也越小。

这时的模型是欠拟合(underfit),即仍有改进的空间,网络还没有对训练数据中所有相关模

式建模。

但在训练数据上迭代一定次数之后,泛化不再提高,验证指标先是不变,然后开始变差,

即模型开始过拟合。这时模型开始学习仅和训练数据有关的模式,但这种模式对新数据来说是

错误的或无关紧要的。


二.解决方法

1.增加数据

最优的解决方法是获取更多的训练数据。模型的训练数据越多,泛化能力自然也越好。

2.正则化

很多时候我们并没有办法来获取更多的训练数据。

次优解决方法是调节模型允许存储的信息量,或对模型允许存储的信息加以约束。

如果一个网络只能记住几个模式,那么优化过程会迫使模型集中学习最重要的模式,这样更可能得到良好的泛化。


三.常见的正则化方法

1.减小网络大小

减少模型中可学习参数的个数(在神经网络中,这由层数和每层的单元个数决定)

如果参数太多,模型学习到的只是训练数据间的映射关系

如果参数太少,模型记忆资源不足,会欠拟合

因此,需要评估一系列不同的网络架构(在验证集上评估,而不是在测试集上),以便为数据找到最佳的模型大小。

要找到合适的模型大小,一般的工作流程是开始时选择相对较少的层和参数,然后逐渐增加层的大小或添加层,直到这种增加对验证损失的影响变得很小。

2.权重正则化

强制让模型权重只能取更小的值,限制模型复杂度。

实现方法:向神经网络损失函数中添加与较大权重值相关的成本。

成本有两种形式:

L1:添加的成本与权重系数的绝对值(L1范数)成正比

L2:添加的成本与权重系数的平方(L2范数)成正比。(也叫权重衰减)。

from tensorflow.keras import regularizers model=keras.models.Sequential() model.add(keras.layers.Dense(16,kernel_regularizer=regularizers.l2(0.001),activation="relu",input_shape=(1000,))) model.add(keras.layers.Dense(16,kernel_regularizer=regularizers.l2(0.001),activation="relu")) model.add(keras.layers.Dense(1),activation="sigmoid")

3.添加dropout正则化

对于某一层使用dropout,就是在训练过程中随机将该层的一些输出特征舍弃(置为0)

dropout比率:被设为0的特征所占的比例,通常在0.2~0.5

测试时没有单元被舍弃,但该层的输出值需要按dropout比率缩小。因为这时候会比训练时有更多的单元被激活,需要加以平衡。(也可以在训练时成比例放大,测试时不变)。

model=keras.models.Sequential()

model.add(keras.layers.Dense(16,activation='relu',input_shape=(1000,)))

model.add(keras.layers.Dropout(0.5))

model.add(keras.layers.Dense(16,activation='relu'))

model.add(keras.layers.Dropout(0.5))

model.add(keras.layers.Dense(1),activation='sigmoid')








©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容