文章目录
过拟合、欠拟合及其解决方案
一些概念
- 训练误差 Training error & 泛化误差 Generalized error: 前者 模型在训练数据集上表现出的误差 ; 后者 模型在任意一个测试数据样本上表现出的误差的期望,常常通过测试数据集上的误差来近似。计算二者可用损失函数,e.g.: 平方损失函数、Softmax用到的交叉熵损失函数。
机器学习模型关注降低 Generalized error,在测试数据集上的误差降低了可以近似认为泛化误差也降低了。 - 验证数据集 Validation set :从给定的训练集中随即选取一小部分作为验证集。(不可使用测试数据选择模型,如调参
- K折交叉验证 K-fold cross-validation :训练数据不够用时。原始训练数据集 --> K个不重合的子数据集 --> K次模型训练和验证集–> 每一次用1个子集(不重复使用)验证模型 其他K-1个训练 --> 最后,对K次的 Training error & Generalized error求平均
过拟合、欠拟合的概念
- 欠拟合 Underfitting :无法得到较低的 Training error ,解决方法:增加模型复杂度或者换一个模型
- 过拟合 Overfitting : Training error << Generalized error,Training err低,但是Generalized err高,且二者相差大。解决办法:权重衰减、丢弃法, etc
- 模型复杂度 、训练数据集大小会影响上面二者
模型复杂度
当数据集给定,模型复杂度和误差的关系如下:
例子:
权重衰减
目的
防止过拟合
正则化在深度学习中含义是指什么?正则化其实是一种策略,以增大训练误差为代价来减少测试误差的所有策略我们都可以称作为正则化。换句话说就是正则化是为了防止模型过拟合。L2范数就是最常用的正则化方法之一。
权重衰减 = L 2 L_{2} L2范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。
L 2 L_{2} L2范数正则化(regularization)
在模型原损失函数基础上添加
L
2
L_{2}
L2范数惩罚项,又叫权重衰减。
以线性回归为例:
ℓ
(
w
1
,
w
2
,
b
)
=
1
n
∑
i
=
1
n
1
2
(
x
1
(
i
)
w
1
+
x
2
(
i
)
w
2
+
b
−
y
(
i
)
)
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
ℓ(w1,w2,b)=n1i=1∑n21(x1(i)w1+x2(i)w2+b−y(i))2
运用权重衰减方法后,新损失函数(其中超参数
λ
>
0
\lambda>0
λ>0):
ℓ
(
w
1
,
w
2
,
b
)
+
λ
2
n
∣
w
∣
2
\ell(w_1, w_2, b) + \frac{\lambda}{2n} |\boldsymbol{w}|^2
ℓ(w1,w2,b)+2nλ∣w∣2新的权重迭代:
w
1
←
(
1
−
η
λ
∣
B
∣
)
w
1
−
η
∣
B
∣
∑
i
∈
B
x
1
(
i
)
(
x
1
(
i
)
w
1
+
x
2
(
i
)
w
2
+
b
−
y
(
i
)
)
,
w
2
←
(
1
−
η
λ
∣
B
∣
)
w
2
−
η
∣
B
∣
∑
i
∈
B
x
2
(
i
)
(
x
1
(
i
)
w
1
+
x
2
(
i
)
w
2
+
b
−
y
(
i
)
)
.
\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}
w1w2←(1−∣B∣ηλ)w1−∣B∣ηi∈B∑x1(i)(x1(i)w1+x2(i)w2+b−y(i)),←(1−∣B∣ηλ)w2−∣B∣ηi∈B∑x2(i)(x1(i)w1+x2(i)w2+b−y(i)).
令权重先自乘小于1的数,再减去不含惩罚项的梯度。
权重衰减的方法如何做到防止过拟合?——通过惩罚绝对值较大的模型参数,为需要学习的模型增加了限制。
丢弃法
- 对隐藏层使用丢弃法,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为
p
p
p(超参数),那么有
p
p
p的概率
h
i
h_i
hi会被清零,有
1
−
p
1−p
1−p的概率
h
i
h_i
hi会除以
1
−
p
1−p
1−p做拉伸。计算公式:
h i ′ = ξ i 1 − p h i h_i' = \frac{\xi_i}{1-p} h_i hi′=1−pξihi其中,设随机变量 ξ i ξ_i ξi为0和1的概率分别为 p p p和 1 − p 1−p 1−p,so E ( ξ i ) = 1 − p E(\xi_i) = 1-p E(ξi)=1−p,
E ( h i ′ ) = E ( ξ i ) 1 − p h i = h i E(h_i') = \frac{E(\xi_i)}{1-p}h_i = h_i E(hi′)=1−pE(ξi)hi=hi丢弃法不改变输入的期望。 - 例子:该隐藏层有5个单元,
h
2
,
h
5
h_2,h_5
h2,h5被丢弃,反向传播时的相关的权重的梯度也被清零。
代码中drop_prob就是p,X=0到15的16元向量,丢弃后变0:
梯度消失、梯度爆炸 Vanishing, explosion
介绍
Vanishing, explosion是数值稳定性的典型问题
随机初始化模型参数
PyTorch的torch.nn.init.normal_( )
Xavier随机初始化
考虑环境因素
协变量偏移
协变量是指模型的输入变量(自变量),协变量偏移指的是训练集和测试集中的输入变量具有不同的数据分布。协变量偏移意味着只有输入分布发生变化,而输入到输出的映射关系保持不变。
例子:
统计学家称这种协变量变化是因为问题的根源在于特征分布的变化(即协变量的变化)。数学上,我们可以说P(x)改变了,但P(y∣x)保持不变。尽管它的有用性并不局限于此,当我们认为x导致y时,协变量移位通常是正确的假设。
标签偏移
??遇到了再去搜索
概念偏移
例子:同一件物品在不同地区的叫法不同
如果我们要建立一个机器翻译系统,分布P(y∣x)可能因我们的位置而异。这个问题很难发现。另一个可取之处是P(y∣x)通常只是逐渐变化。
相关习题:
模型是在冬季部署,所以用的是冬季的数据作为训练集,在夏季使用,相当于而测试集是夏季的物品。不是标签偏移,标签偏移指的是出现训练中不存在的标签,而圣诞礼物属于训练中存在的标签
- 模型训练正确顺序: