深度学习基础–拟合问题、权重衰减与倒置丢弃法
最近在阅读一本书籍–Dive-into-DL-Pytorch(动手学深度学习),链接:https://github.com/newmonkey/Dive-into-DL-PyTorch,自身觉得受益匪浅,在此记录下自己的学习历程。
本篇主要记录拟合问题(欠拟合与过拟合)以及应对的办法(权重衰减与倒置丢弃法):
拟合问题(欠拟合与过拟合)
开始前先介绍欠拟合与过拟合的问题: 先了解一下训练误差(training error)与泛化误差(generalization error)的定义。训练误差指的是模型在训练数据集上表现出的误差;泛化误差指的是模型在任意一个测试数据样本在表现出的误差的期望。
对于模型训练中经常出现的欠拟合与过拟合的理解,欠拟合指的是模型无法得到较低的训练误差的现象,即训练误差与泛化误差过高;过拟合指的是模型的训练误差远小于它在测试数据集上的误差的现象,即训练误差远小于泛化误差。
产生欠拟合与过拟合的因素有很多种,目前主要考虑模型复杂度与训练数据集大小这两个因素。给定一个数据集,如果模型的复杂度过低,则容易出现欠拟合现象;如果模型的复杂度越高,则容易出现过拟合现象。给定一个模型,如果数据集样本数量过小,则容易出现过拟合现象,但是泛化误差不会随训练数据集的样本数量增大而增大,因此训练数据集越大,拟合效果越好(不考虑其他限制因素)。
针对上述的过拟合现象而提出的,有学者便提出了权重衰减与倒置丢弃法。
权重衰减 在pytorch中,权重衰减可以通过优化器中的 weight_decay 超参数来指定。
weight_decay=xxx
原理介绍: 权重衰减等价于L2范数正则化(regularization)。L2范数正则化在模型原损失函数基础上添加L2范数惩罚项,从而得到训练所需要最小化的函数。L2范数惩罚项指的是模型权重参数每个元素的平?和与?个正的常数的乘积。举个例子,例如原损失函数为:
其中w指的是权重参数,b指的是偏差参数。则带有L2范数惩罚项的新损失函数为:
其中λ为超参数,n为样本数。当超参数λ设置为0时,惩罚项完全不起作用;而λ设置越大时,惩罚项在损失函数中的比重也就越大。增加L2范数惩罚项后,权重的迭代方式的变化: 原权重迭代计算方式: 其中η为学习率,B代表批量大小(batch size)。增加L2范数惩罚项的权重迭代计算方式:
可见,L2范数正则化令权重w先?乘小于1的数,再减去不含惩罚项的梯度。通过约束权重参数的范数来减少过拟合现象。
倒置丢弃法 在pytorch中,丢弃法通过在模型中添加Dropout层将以指定的丢弃概率随机丢弃上?层的输出元素;
nn.Dropout(xxx)
原理介绍: 首先假设存在某一隐藏层,其隐藏单元为hi,对该隐藏层使用丢弃法时,该层的隐藏单元将有一定的概率被丢弃。令丢弃概率为p,则有p的概率hi会被清零,有1-p的概率hi会除以1-p做拉伸。丢弃概率是丢弃法的超参数。具体来说,设随机变量ξi为0和1的概率分别为p和1-p。使用丢弃法时计算新的隐藏单元h‘i为:
由于E(ξi)=1-p,因此:
可见,丢弃法不改变其输?的期望值。由于在训练中隐藏层神经元的丢弃是随机的,即hi都有可能被清零,输出层的计算?法过度依赖hi中的任?个,在反向传播中,被清零的隐藏单元相关的权重的梯度均为0,从而在训练模型时起到正则化的作用,并可以用来应对过拟合现象。
END!
|