首页 理论教育 如何通过正则化抑制过拟合

如何通过正则化抑制过拟合

时间:2023-11-18 理论教育 版权反馈
【摘要】:在神经网络训练过程中,很多因素会造成过拟合现象,主要原因包括模型复杂度和训练数据集大小不匹配。这种降低过拟合的策略叫作正则化。由于很多过拟合是因为权重参数取值过大而造成的,因此,可以在学习的过程中对大的权重进行惩罚来抑制过拟合。除了上述几种抑制过拟合的方式外,借助验证数据集及时停止网络训练也是一种有效的消除网络过拟合现象的方法。

如何通过正则化抑制过拟合

神经网络训练过程中,很多因素会造成过拟合现象,主要原因包括模型复杂度和训练数据集大小不匹配。为了防止模型从训练数据中学到噪声信息,最优解决方法是获取更多的训练数据。如果无法获取更多数据,次优解决方法是降低模型复杂度,或减少模型允许存储的信息量,迫使模型集中学习最重要的模式,这样才可能得到良好的泛化性能。这种降低过拟合的策略叫作正则化。下面介绍几种最常见的正则化方法。

(1)增大训练数据集。神经网络具有强大的表达能力,不过正因如此,网络本身需要大量甚至海量数据对模型进行训练,典型的数据集如ImageNet。可在实际应用中,如果训练数据集的样本数过少时,往往不能发挥深度学习的优势,反而容易出现过拟合等问题。因此,在实践中通过数据扩充等方式增大训练数据集便成为深度学习模型训练的必要操作,如在计算机视觉领域,可以对图像数据进行翻转、裁剪、加噪声、镜像、HSV通道加强等操作,能够将图像数据扩充至原有数量的数倍甚至数十倍,不仅有利于解决过拟合问题,而且能够提升模型性能。

(2)降低模型复杂度。对于神经网络而言,随着网络深度的增加,各类训练参数也不断增加。对于某一训练集而言,模型复杂度过高时往往导致过拟合现象发生,如果不采用数据扩充方法,或数据扩充效果不明显,那么可以采取减少神经网络规模(深度)的方法来消除过拟合现象。此外,还可以在全连接层中采用一种叫dropout(失活)的方法。该方法由Hinton于2012年提出,dropout的思想是当一组样本经过某一层神经元的时候,按照一定概率随机去掉这一层上的一部分神经元,让数据只经过另外一部分神经元进行计算。在学习阶段,是以丢弃概率p删除掉一些隐藏节点,减小了网络的大小;而在测试阶段,将学习的节点和没有被学习的节点求和后乘以丢弃概率p计算得到网络的输出。

(3)权值衰减。权值衰减也是一种用来抑制过拟合的常见方法。由于很多过拟合是因为权重参数取值过大而造成的,因此,可以在学习的过程中对大的权重进行惩罚来抑制过拟合。正如之前介绍,神经网络的学习目的之一是减小损失函数的值,如果在损失函数中加入权重的平方范数(L2范数)。这样就可以抑制权重变大。如果将权重记为W, L2范数的权值衰减因子就可以表示为λW2/2,然后将这个λW2/2加入到损失函数中。其中,λ是控制正则化强度的超参数。λ值设置得越大,对大的权重施加的惩罚就越明显。

L2范数相当于各个元素的平方和。此外在权值衰减中还可引入L1范数,L1范数是各个元素的绝对值之和。在本章第一节神经网络游乐场中提到了Regular-ization参数设置中的两个选项L1和L2就是特指这两种正则化方法。

(4)早停法。除了上述几种抑制过拟合的方式外,借助验证数据集及时停止网络训练也是一种有效的消除网络过拟合现象的方法。其基本方法是在训练中计算模型在验证数据集上的表现,当模型在验证数据集上的表现开始下降的时候,停止训练,将验证数据集上取得最高评价指标(如准确率)的网络结构作为最终网络模型,这样就能避免继续训练导致过拟合的问题。在Keras中可使用以下代码实现提前停止网络训练并及时保存网络模型。

from keras. callbacks import EarlyStopping(www.xing528.com)

#在验证数据集中误差连续2次不下降就停止网络训练

callbacks=[EarlyStopping(monitor='val_loss',patience=2,verbose=0)]

model. fit(X_train.astype('float32'),Y_train, batch_size=batch_size, nb_ep-och=nb_epoch, shuffle=True, verbose=1,validation_data=(X_valid, Y_valid),callbacks=callbacks)

#保存参数,载入参数

model. save_weights('my_model_weights.h5')

model. load_weights('my_model_weights.h5')

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈