神经网络训练中的欠拟合、过拟合问题

神经网络训练中的问题

神经网络在数据之海中打捞规律,自成模型。这个过程全权由电脑完成,也因此我们担心它是否是一种泛化的模式,在其它「海域」继续工作时,它能否也能得到正确的结果?如何发现 可以泛化的模式 是机器学习的根本问题。

image

通常,模型越复杂、训练样本越少,它的泛化能力就会受到考验:

  1. 可调整参数的数量很多时,模型更容易出现「过拟合」
  2. 权重参数的取值范围较大时,模型更容易出现「过拟合」
  3. 训练样本不足时,容易出现「过拟合」(即便模型很简单)

过拟合与欠拟合

我们的数据通常分成3份:

  • 训练数据:用于神经网络训练的数据;
  • 测试数据:神经网络训练完后,用于评估其准确度的数据;
  • 验证数据:为了确定候选模型中的最佳模型所用的检验数据。

在实际训练中,会有 欠拟合过拟合 的情况。我们将神经网络用训练数据计算时的误差称为「训练误差」,用测试数据计算时的误差称为「泛化误差」。那么:

  • 当训练误差与泛化误差都很大时,称模型「欠拟合」。由于训练误差大,所以也称该模型有「高偏差」问题;
  • 当训练误差很小,但泛化误差很大时,称模型「过拟合」。由于泛化误差大,所以也称该模型有「高方差」问题。
image

模型选取

在机器学习中,我们通常从几个候选模型后选择最终的模型。例如,训练多层感知机时,我们会⽐较有着不同隐藏层数、每层有着不同数量神经元以及使用不同激活函数的模型。

当神经网络「欠拟合」时,我们首先可以让它训练更长一段时间,如果仍无效,则会考虑使用更复杂的神经网络(更多隐藏层、增加层的神经元、换其它激活函数等)或者使用其它类型的神经网络。

数据集大小

在如今有大量数据(百万甚至更大)的情况下,训练数据的比重可以占得很大:训/测/验 = 98%/1%/1% 即便是1%的数据也有上万,足以用于检验了,我们可以将更多数据投入训练中。

训练数据集的大小对模型训练结果有什么影响?训练集样本过少,可能会导致严重的「过拟合」问题,反过来说,更多的训练数据能减小泛化误差,而且通常没有坏处(除了训练久一点),尤其是训练复杂的模型时。

在尝试了更多数据后,如果模型仍「过拟合」或者你原本的数据已经是高质量的了,无法再获得更多数据时,则可以考虑 正则化 ,或者换用其它类型的神经网络。

正则化

有一些常用的正则化模型的技术,可以帮助我们缓解过拟合问题。

1. 权重衰减

权重衰减,也称为 \(L_2\) 正则化,它在原本损失函数的基础上,加上了「某系数 * 权重矩阵的各元素平方和」,这个「某系数」一般取较小值(<0.1):

image

关于该公式的更多内容可以移步这个视频

从新的损失函数可以看出,如果想要将其值变小,就需要额外将权重的值变小才行。这也就与开头说的影响模型泛化的因素之二(权重取值范围)相吻合,所以它在提高模型泛化能力上能起作用。

  • 为什么用 \(L_2\) 而不是 \(L_1\) 正则化?
    \(L_2\) 会对权重向量的大分量施加巨大的惩罚,使得学习算法偏向于在大量特征上均匀分布权重的模型。假设有一个神经网络的权重为 \(W = [0.5, 1.2, 1.3, -2.1]\),在进行权重衰减时,首当其冲的必定是-2.1这个值,这有助于防止模型过分依赖该权重计算,使学习算法更倾向于在许多特征上均匀分布权重的模型。
  • 需要对偏置b进行同样处理吗?
    不需要,因为偏置之于模型,相当于常数至于函数,在函数中调整常数项的大小只会影响函数的位置,并不影响函数的形状;这对于神经网络同理,「泛化能力」与神经网络所构成的函数形状密切相关,所以偏置没必要进行同样的衰减。

2. 暂退法(Dropout)

暂退法会在训练时(具体点说是前向传播时),将模型隐藏层中的每层的神经元以一定概率舍弃:

image

你肯定也能看出它的道理:降低模型复杂度、减小权重参数范围,这分别对应先前所讲的因素一和因素二。

  • 降低模型复杂度可以理解,但为什么这么做也能减小权重参数范围?
    因为每个权重都有可能被暂时丢弃的可能,也就是说会不参与某几次权重更新,这样也就减小了它的参数范围(相比不做Dropout正则化时)。

参考(墙裂推荐捏):

  1. 《动手学深度学习(第二版)》 4.4部分
  2. 《“L1和L2正则化”直观理解(之二),为什么又叫权重衰减?到底哪里衰减了?》b站up主 王木头学科学
  3. 《如何解决过拟合问题?L1、L2正则化及Dropout正则化讲解》b站up主 摸鱼蟹
posted @ 2024-01-14 10:23  狐王驾虎  阅读(274)  评论(0编辑  收藏  举报