动手学pytorch-过拟合、欠拟合

过拟合、欠拟合及其解决方案

  1. 过拟合、欠拟合的概念
  2. 权重衰减(通过l2正则化惩罚权重比较大的项)
  3. 丢弃法(drop out)
  4. 实验

1.过拟合、欠拟合的概念

1.1训练误差和泛化误差

前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。

1.2验证数据集与K-fold验证

预留一部分在训练数据集和测试数据集以外的数据来进行模型选择,这部分数据被称为验证数据集,简称验证集(validation set)。在K折交叉验证中,把原始训练数据集分割成K个不重合的子数据集,然后做K次模型训练和验证。每一次,使用一个子数据集验证模型,并使用其他K-1个子数据集来训练模型。在这K次训练和验证中,每次用来验证模型的子数据集都不同。最后,对这K次训练误差和验证误差分别求平均。

1.3过拟合和欠拟合

  • 欠拟合:模型无法得到较低的训练误差
  • 过拟合:模型的训练误差远小于它在测试数据集上的误差

1.4导致过拟合和欠拟合的关键因素

  • 数据集大小:影响欠拟合和过拟合的另一个重要因素是训练数据集的大小。一般来说,如果训练数据集中样本数过少,特别是比模型参数数量(按元素计)更少时,过拟合更容易发生。此外,泛化误差不会随训练数据集里样本数量增加而减小。因此,在计算资源允许的范围之内,通常希望训练数据集大一些,特别是在模型复杂度较高时,例如层数较多的深度学习模型。
  • 模型复杂程度:

2.L2正则化

\(L_2\)范数正则化在模型原损失函数基础上添加\(L_2\)范数惩罚项,从而得到训练所需要最小化的函数。\(L_2\)范数惩罚项指的是模型权重参数每个元素的平方和与一个正的常数的乘积。以线性回归中的线性回归损失函数为例

\[
\ell(w_1, w_2, b) = \frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right)^2
\]

其中\(w_1, w_2\)是权重参数,\(b\)是偏差参数,样本\(i\)的输入为\(x_1^{(i)}, x_2^{(i)}\),标签为\(y^{(i)}\),样本数为\(n\)。将权重参数用向量\(\boldsymbol{w} = [w_1, w_2]\)表示,带有\(L_2\)范数惩罚项的新损失函数为

\[
\ell(w_1, w_2, b) + \frac{\lambda}{2n} |\boldsymbol{w}|^2,
\]

其中超参数\(\lambda > 0\)。当权重参数均为0时,惩罚项最小。当\(\lambda\)较大时,惩罚项在损失函数中的比重较大,这通常会使学到的权重参数的元素较接近0。当\(\lambda\)设为0时,惩罚项完全不起作用。上式中\(L_2\)范数平方\(|\boldsymbol{w}|^2\)展开后得到\(w_1^2 + w_2^2\)。
有了\(L_2\)范数惩罚项后,在小批量随机梯度下降中,我们将线性回归一节中权重\(w_1\)和\(w_2\)的迭代方式更改为

\[
\begin{aligned} w_1 &\leftarrow \left(1- \frac{\eta\lambda}{|\mathcal{B}|} \right)w_1 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}x_1^{(i)} \left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right),\\ w_2 &\leftarrow \left(1- \frac{\eta\lambda}{|\mathcal{B}|} \right)w_2 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}x_2^{(i)} \left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right). \end{aligned}
\]

可见,\(L_2\)范数正则化令权重\(w_1\)和\(w_2\)先自乘小于1的数,再减去不含惩罚项的梯度。因此,\(L_2\)范数正则化又叫权重衰减。权重衰减通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制,这可能对过拟合有效。

3.drop out

多层感知机中神经网络图描述了一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元\(h_i\)(\(i=1, \ldots, 5\))的计算表达式为

\[
h_i = \phi\left(x_1 w_{1i} + x_2 w_{2i} + x_3 w_{3i} + x_4 w_{4i} + b_i\right)
\]

这里\(\phi\)是激活函数,\(x_1, \ldots, x_4\)是输入,隐藏单元\(i\)的权重参数为\(w_{1i}, \ldots, w_{4i}\),偏差参数为\(b_i\)。当对该隐藏层使用丢弃法时,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为\(p\),那么有\(p\)的概率\(h_i\)会被清零,有\(1-p\)的概率\(h_i\)会除以\(1-p\)做拉伸。丢弃概率是丢弃法的超参数。具体来说,设随机变量\(\xi_i\)为0和1的概率分别为\(p\)和\(1-p\)。使用丢弃法时我们计算新的隐藏单元\(h_i'\)

\[
h_i' = \frac{\xi_i}{1-p} h_i
\]

由于\(E(\xi_i) = 1-p\),因此

\[
E(h_i') = \frac{E(\xi_i)}{1-p}h_i = h_i
\]

即丢弃法不改变其输入的期望值。让我们对之前多层感知机的神经网络中的隐藏层使用丢弃法,一种可能的结果如图所示,其中\(h_2\)和\(h_5\)被清零。这时输出值的计算不再依赖\(h_2\)和\(h_5\),在反向传播时,与这两个隐藏单元相关的权重的梯度均为0。由于在训练中隐藏层神经元的丢弃是随机的,即\(h_1, \ldots, h_5\)都有可能被清零,输出层的计算无法过度依赖\(h_1, \ldots, h_5\)中的任一个,从而在训练模型时起到正则化的作用,并可以用来应对过拟合。在测试模型时,我们为了拿到更加确定性的结果,一般不使用丢弃法

4.实验

notebook地址:

原文地址:https://www.cnblogs.com/54hys/p/12310826.html

时间: 2024-08-30 01:48:39

动手学pytorch-过拟合、欠拟合的相关文章

一篇文章,带你明白什么是过拟合,欠拟合以及交叉验证

误差模型:过拟合,交叉验证,偏差-方差权衡 作者Natasha Latysheva;Charles Ravarani 发表于cambridgecoding 介绍 ??在本文中也许你会掌握机器学习中最核心的概念:偏差-方差权衡.其主要想法是,你想创建尽可能预测准确并且仍能适用于新数据的模型(这是泛化).危险的是,你可以轻松的在你制定的数据中创建过度拟合本地噪音的模型,这样的模型是无用的,并且导致弱泛化能力,因为噪声是随机的,故而在每个数据集中是不同的.从本质上讲,你希望创建仅捕获数据集中有用成份的

过拟合/欠拟合

对于一个监督学习模型来说,过小的特征集合使得模型过于简单,过大的特征集合使得模型过于复杂. 对于特征集过小的情况,称之为欠拟合(underfitting): 对于特征集过大的情况,称之为过拟合(overfitting) 解决此类学习问题的方法: 1)       特征选择算法:一类自动化算法,在这类回归问题中选择用到的特征 2)       非参数学习算法:缓解对于选取特征的需求,引出局部加权回归 一.过拟合 概念A model (e.g., network) that is too compl

过拟合/欠拟合&logistic回归等总结(Ng第二课)

昨天学习完了Ng的第二课,总结如下: 过拟合:欠拟合: 参数学习算法:非参数学习算法 局部加权回归 KD tree 最小二乘 中心极限定律 感知器算法 sigmod函数 梯度下降/梯度上升 二元分类 logistic回归

【动手学pytorch】softmax回归

一.什么是softmax? 有一个数组S,其元素为Si ,那么vi 的softmax值,就是该元素的指数与所有元素指数和的比值.具体公式表示为: softmax回归本质上也是一种对数据的估计 二.交叉熵损失函数 在估计损失时,尤其是概率上的损失,交叉熵损失函数更加常用.下面是交叉熵 当我们预测单个物体(即每个样本只有1个标签),y(i)为我们构造的向量,其分量不是0就是1,并且只有一个1(第y(i)个数为1).于是.交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确.遇

动手深度学习12- 模型选择,欠拟合和过拟合

模型选择.欠拟合和过拟合 训练误差和泛化误差 模型选择 K折交叉验证 欠拟合和过拟合 模型复杂度 训练数据集大小 多项式函数拟合实验 定义.训练和测试模型 欠拟合 过拟合 小结 模型选择.欠拟合和过拟合 前几节给予Fashion_MNIST数据集的实验中,我们评价了机器学习模型在训练集合测试集上的表现.通常得到的结果都是训练数据集上更准确时,它在测试集上表现不一定更好,这就涉及到了模型的选择以及拟合程度的选择. 训练误差和泛化误差 训练误差 是指模型在训练数据集上表现出来的误差 泛化误差 是指模

机器学习算法中的过拟合与欠拟合

在机器学习表现不佳的原因要么是过度拟合或欠拟合数据. 机器学习中的逼近目标函数过程 监督式机器学习通常理解为逼近一个目标函数(f)(f),此函数映射输入变量(X)到输出变量(Y). Y=f(X)Y=f(X) 这种特性描述可以用于定义分类和预测问题和机器学习算法的领域. 从训练数据中学习目标函数的过程中,我们必须考虑的问题是模型在预测新数据时的泛化性能.泛化好坏是很重要的,因为我们收集到的数据只是样本,其带有噪音并且是不完全的. 机器学习中的泛化 在In机器学习中,我们描述从训练数据学习目标函数的

过拟合 VS 欠拟合 偏差 VS 方差

1. 过拟合 欠拟合 过拟合:在训练集(training set)上表现好,但是在测试集上效果差,也就是说在已知的数据集合中非常好,但是在添加一些新的数据进来训练效果就会差很多,造成这样的原因是考虑影响因素太多,超出自变量的维度过于多了: 欠拟合:模型拟合不够,在训练集(training set)上表现效果差,没有充分的利用数据,预测的准确度低: 高阶多项式回归的过拟合与欠拟合 逻辑回归的过拟合与欠拟合 2. 偏差 方差 偏差:首先error=bias+variance:bias反映的是模型在样

过拟合与欠拟合

1. 过拟合 过拟合是指在模型的训练阶段过分拟合训练数据的特征,模型的训练数据上具有较小的误差.数据中的噪声也有可能被模型所学习,使得模型的泛化性能较差. 通常导致过拟合产生的原因包括: (1). 目标函数中没有相应的正则化项作为惩罚项, 常用的正则化项包括L1 和L2,其中L1约束能够学习出稀疏的模型从而能够达到特征选择的效果:对于L2约束则使得模型在各特征上的参数都比较小,控制每个特征对模型预测结果的影响,在一定程度上减少异常值(噪声)对模型性能的影响,提高模型的泛化性能: (2). 模型训

小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播

下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) 模型选择 验证数据集(validation data set),又叫验证集(validation set),指用于模型选择的在train set和test set之外预留的一小部分数据集 若训练数据不够时,预留验证集也是一种luxury.常采用的方法为K折交叉验证.原理为:把train set分割成k个不重合