概述
task3的任务为:
- 过拟合、欠拟合及解决方案
- 梯度消失、梯度爆炸
- RNN进阶
一、 过拟合、欠拟合及解决方案
1. 训练误差和泛化误差
在解释上述现象前,首先需要区分训练误差(trianing error)和泛化误差(generalization error)。
- 训练误差:指模型在训练数据集上表现出的误差;
- 泛化误差:指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。
机器学习模型应关注降低泛化误差。
2. 模型选择
2.1 验证数据集
从严格意义上讲,测试集只能在所有超参数和模型参数选定后使用一次。不可以使用测试数据选择模型,如调参。由于无法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。鉴于此,我们可以预留一部分在训练数据集和测试数据集以外的数据来进行模型选择。这部分数据被称为验证数据集,简称验证集(validation set)。例如,我们可以从给定的训练集中随机选取一小部分作为验证集,而将剩余部分作为真正的训练集。
2.2 K折交叉验证
由于验证数据集不参与模型训练,当训练数据不够用时,预留大量的验证数据显得太奢侈。一种改善的方法是K折交叉验证(K-fold cross-validation)。在K折交叉验证中,我们把原始训练数据集分割成K个不重合的子数据集,然后我们做K次模型训练和验证。每一次,我们使用一个子数据集验证模型,并使用其他K-1个子数据集来训练模型。在这K次训练和验证中,每次用来验证模型的子数据集都不同。最后,我们对这K次训练误差和验证误差分别求平均。
2.3 训练集、验证集、测试集的区别
这里我单独写了一篇文章,推送门如下:
如何理解训练集、验证集与测试集?
3. 过拟合和欠拟合
接下来,我们将探究模型训练中经常出现的两类典型问题:
- 一类是模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting);
- 另一类是模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。 在实践中,我们要尽可能同时应对欠拟合和过拟合。会有很多因素可能导致这两种拟合问题,在这里我们重点讨论两个因素:模型复杂度和训练数据集大小。
3.1 模型复杂度
为了解释模型复杂度,我们以多项式函数拟合为例。给定一个由标量数据特征 x x x和对应的标量标签 y y y组成的训练数据集,多项式函数拟合的目标是找一个 K K K阶多项式函数
y ^ = b + ∑ k = 1 K x k w k hat{y} = b + sum_{k=1}^K x^k w_k y^=b+k=1∑Kxkwk
来近似 y y y。在上式中, w k w_k wk是模型的权重参数, b b b是偏差参数。与线性回归相同,多项式函数拟合也使用平方损失函数。特别地,一阶多项式函数拟合又叫线性函数拟合。
给定训练数据集,模型复杂度和误差之间的关系:
3.2 训练数据集大小
影响欠拟合和过拟合的另一个重要因素是训练数据集的大小。一般来说,如果训练数据集中样本数过少,特别是比模型参数数量(按元素计)更少时,过拟合更容易发生。此外,泛化误差不会随训练数据集里样本数量增加而增大。因此,在计算资源允许的范围之内,我们通常希望训练数据集大一些,特别是在模型复杂度较高时,例如层数较多的深度学习模型。
4.权重衰减与丢弃法
4.1 权重衰减
权重衰减等价于
L
2
L_2
L2 范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。
L
2
L_2
L2范数正则化在模型原损失函数基础上添加
L
2
L_2
L2范数惩罚项,从而得到训练所需要最小化的函数。
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
其中 w 1 , w 2 w_1, w_2 w1,w2是权重参数, b b b是偏差参数,样本 i i i的输入为 x 1 ( i ) , x 2 ( i ) x_1^{(i)}, x_2^{(i)} x1(i),x2(i),标签为 y ( i ) y^{(i)} y(i),样本数为 n n n。将权重参数用向量 w = [ w 1 , w 2 ] boldsymbol{w} = [w_1, w_2] w=[w1,w2]表示,带有 L 2 L_2 L2范数惩罚项的新损失函数为
ℓ ( 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,
其中超参数
λ
>
0
lambda > 0
λ>0。当权重参数均为0时,惩罚项最小。当
λ
lambda
λ较大时,惩罚项在损失函数中的比重较大,这通常会使学到的权重参数的元素较接近0。当
λ
lambda
λ设为0时,惩罚项完全不起作用。上式中
L
2
L_2
L2范数平方
∣
w
∣
2
|boldsymbol{w}|^2
∣w∣2展开后得到
w
1
2
+
w
2
2
w_1^2 + w_2^2
w12+w22。
有了
L
2
L_2
L2范数惩罚项后,在小批量随机梯度下降中,我们将线性回归一节中权重
w
1
w_1
w1和
w
2
w_2
w2的迭代方式更改为
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{etalambda}{|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{etalambda}{|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)).
可见,
L
2
L_2
L2范数正则化令权重
w
1
w_1
w1和
w
2
w_2
w2先自乘小于1的数,再减去不含惩罚项的梯度。因此,
L
2
L_2
L2范数正则化又叫权重衰减。权重衰减通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制,这可能对过拟合有效。
4.2 丢弃法
多层感知机中神经网络图描述了一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元 h i h_i hi( i = 1 , … , 5 i=1, ldots, 5 i=1,…,5)的计算表达式为
h i = ϕ ( x 1 w 1 i + x 2 w 2 i + x 3 w 3 i + x 4 w 4 i + b i ) h_i = phileft(x_1 w_{1i} + x_2 w_{2i} + x_3 w_{3i} + x_4 w_{4i} + b_iright) hi=ϕ(x1w1i+x2w2i+x3w3i+x4w4i+bi)
这里 ϕ phi ϕ是激活函数, x 1 , … , x 4 x_1, ldots, x_4 x1,…,x4是输入,隐藏单元 i i i的权重参数为 w 1 i , … , w 4 i w_{1i}, ldots, w_{4i} w1i,…,w4i,偏差参数为 b i b_i bi。当对该隐藏层使用丢弃法时,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为 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做拉伸。丢弃概率是丢弃法的超参数。具体来说,设随机变量 ξ i xi_i ξi为0和1的概率分别为 p p p和 1 − p 1-p 1−p。使用丢弃法时我们计算新的隐藏单元 h i ′ h_i' hi′
h i ′ = ξ i 1 − p h i h_i' = frac{xi_i}{1-p} h_i hi′=1−pξihi
由于 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
即丢弃法不改变其输入的期望值。让我们对之前多层感知机的神经网络中的隐藏层使用丢弃法,一种可能的结果如图所示,其中 h 2 h_2 h2和 h 5 h_5 h5被清零。这时输出值的计算不再依赖 h 2 h_2 h2和 h 5 h_5 h5,在反向传播时,与这两个隐藏单元相关的权重的梯度均为0。由于在训练中隐藏层神经元的丢弃是随机的,即 h 1 , … , h 5 h_1, ldots, h_5 h1,…,h5都有可能被清零,输出层的计算无法过度依赖 h 1 , … , h 5 h_1, ldots, h_5 h1,…,h5中的任一个,从而在训练模型时起到正则化的作用,并可以用来应对过拟合。在测试模型时,我们为了拿到更加确定性的结果,一般不使用丢弃法。
3
二、梯度消失和梯度爆炸
深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)。
当神经网络的层数较多时,模型的数值稳定性容易变差。
假设一个层数为 L L L的多层感知机的第 l l l层 H ( l ) boldsymbol{H}^{(l)} H(l)的权重参数为 W ( l ) boldsymbol{W}^{(l)} W(l),输出层 H ( L ) boldsymbol{H}^{(L)} H(L)的权重参数为 W ( L ) boldsymbol{W}^{(L)} W(L)。为了便于讨论,不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity mapping) ϕ ( x ) = x phi(x) = x ϕ(x)=x。给定输入 X boldsymbol{X} X,多层感知机的第 l l l层的输出 H ( l ) = X W ( 1 ) W ( 2 ) … W ( l ) boldsymbol{H}^{(l)} = boldsymbol{X} boldsymbol{W}^{(1)} boldsymbol{W}^{(2)} ldots boldsymbol{W}^{(l)} H(l)=XW(1)W(2)…W(l)。此时,如果层数 l l l较大, H ( l ) boldsymbol{H}^{(l)} H(l)的计算可能会出现衰减或爆炸。举个例子,假设输入和所有层的权重参数都是标量,如权重参数为0.2和5,多层感知机的第30层输出为输入 X boldsymbol{X} X分别与 0. 2 30 ≈ 1 × 1 0 − 21 0.2^{30} approx 1 times 10^{-21} 0.230≈1×10−21(消失)和 5 30 ≈ 9 × 1 0 20 5^{30} approx 9 times 10^{20} 530≈9×1020(爆炸)的乘积。当层数较多时,梯度的计算也容易出现消失或爆炸。
三、RNN进阶
RNN存在的问题:梯度较容易出现衰减或爆炸(BPTT)
RNN:
H t = ϕ ( X t W x h + H t − 1 W h h + b h ) H_{t} = ϕ(X_{t}W_{xh} + H_{t-1}W_{hh} + b_{h}) Ht=ϕ(XtWxh+Ht−1Whh+bh)
3.1 GRU
GRU网络比LSTM网络简单一些。
R
t
=
σ
(
X
t
W
x
r
+
H
t
−
1
W
h
r
+
b
r
)
Z
t
=
σ
(
X
t
W
x
z
+
H
t
−
1
W
h
z
+
b
z
)
H
~
t
=
t
a
n
h
(
X
t
W
x
h
+
(
R
t
⊙
H
t
−
1
)
W
h
h
+
b
h
)
H
t
=
Z
t
⊙
H
t
−
1
+
(
1
−
Z
t
)
⊙
H
~
t
R_{t} = σ(X_tW_{xr} + H_{t−1}W_{hr} + b_r)\ Z_{t} = σ(X_tW_{xz} + H_{t−1}W_{hz} + b_z)\ widetilde{H}_t = tanh(X_tW_{xh} + (R_t ⊙H_{t−1})W_{hh} + b_h)\ H_t = Z_t⊙H_{t−1} + (1−Z_t)⊙widetilde{H}_t
Rt=σ(XtWxr+Ht−1Whr+br)Zt=σ(XtWxz+Ht−1Whz+bz)H
t=tanh(XtWxh+(Rt⊙Ht−1)Whh+bh)Ht=Zt⊙Ht−1+(1−Zt)⊙H
t
• 重置门有助于捕捉时间序列里短期的依赖关系;
• 更新门有助于捕捉时间序列里长期的依赖关系。
3.2 LSTM
长短期记忆(long short-term memory)有3个门,分别是:
- 遗忘门:控制上一时间步的记忆细胞
- 输入门:控制当前时间步的输入
- 输出门:控制从记忆细胞到隐藏状态
还有一个特殊的结构: 记忆细胞,是一种特殊的隐藏状态的信息的流动。
I t = σ ( X t W x i + H t − 1 W h i + b i ) F t = σ ( X t W x f + H t − 1 W h f + b f ) O t = σ ( X t W x o + H t − 1 W h o + b o ) C ~ t = t a n h ( X t W x c + H t − 1 W h c + b c ) C t = F t ⊙ C t − 1 + I t ⊙ C ~ t H t = O t ⊙ t a n h ( C t ) I_t = σ(X_tW_{xi} + H_{t−1}W_{hi} + b_i) \ F_t = σ(X_tW_{xf} + H_{t−1}W_{hf} + b_f)\ O_t = σ(X_tW_{xo} + H_{t−1}W_{ho} + b_o)\ widetilde{C}_t = tanh(X_tW_{xc} + H_{t−1}W_{hc} + b_c)\ C_t = F_t ⊙C_{t−1} + I_t ⊙widetilde{C}_t\ H_t = O_t⊙tanh(C_t) It=σ(XtWxi+Ht−1Whi+bi)Ft=σ(XtWxf+Ht−1Whf+bf)Ot=σ(XtWxo+Ht−1Who+bo)C t=tanh(XtWxc+Ht−1Whc+bc)Ct=Ft⊙Ct−1+It⊙C tHt=Ot⊙tanh(Ct)
3.3 深度循环神经网络
H t ( 1 ) = ϕ ( X t W x h ( 1 ) + H t − 1 ( 1 ) W h h ( 1 ) + b h ( 1 ) ) H t ( ℓ ) = ϕ ( H t ( ℓ − 1 ) W x h ( ℓ ) + H t − 1 ( ℓ ) W h h ( ℓ ) + b h ( ℓ ) ) O t = H t ( L ) W h q + b q boldsymbol{H}_t^{(1)} = phi(boldsymbol{X}_t boldsymbol{W}_{xh}^{(1)} + boldsymbol{H}_{t-1}^{(1)} boldsymbol{W}_{hh}^{(1)} + boldsymbol{b}_h^{(1)})\ boldsymbol{H}_t^{(ell)} = phi(boldsymbol{H}_t^{(ell-1)} boldsymbol{W}_{xh}^{(ell)} + boldsymbol{H}_{t-1}^{(ell)} boldsymbol{W}_{hh}^{(ell)} + boldsymbol{b}_h^{(ell)})\ boldsymbol{O}_t = boldsymbol{H}_t^{(L)} boldsymbol{W}_{hq} + boldsymbol{b}_q Ht(1)=ϕ(XtWxh(1)+Ht−1(1)Whh(1)+bh(1))Ht(ℓ)=ϕ(Ht(ℓ−1)Wxh(ℓ)+Ht−1(ℓ)Whh(ℓ)+bh(ℓ))Ot=Ht(L)Whq+bq
3.4 双向循环神经网络
H → t = ϕ ( X t W x h ( f ) + H → t − 1 W h h ( f ) + b h ( f ) ) H ← t = ϕ ( X t W x h ( b ) + H ← t + 1 W h h ( b ) + b h ( b ) ) H t = ( H → t , H ← t ) O t = H t W h q + b q begin{aligned} overrightarrow{boldsymbol{H}}_t &= phi(boldsymbol{X}_t boldsymbol{W}_{xh}^{(f)} + overrightarrow{boldsymbol{H}}_{t-1} boldsymbol{W}_{hh}^{(f)} + boldsymbol{b}_h^{(f)})\ overleftarrow{boldsymbol{H}}_t &= phi(boldsymbol{X}_t boldsymbol{W}_{xh}^{(b)} + overleftarrow{boldsymbol{H}}_{t+1} boldsymbol{W}_{hh}^{(b)} + boldsymbol{b}_h^{(b)}) end{aligned} \ boldsymbol{H}_t=(overrightarrow{boldsymbol{H}}_{t}, overleftarrow{boldsymbol{H}}_t)\ boldsymbol{O}_t = boldsymbol{H}_t boldsymbol{W}_{hq} + boldsymbol{b}_q HtHt=ϕ(XtWxh(f)+Ht−1Whh(f)+bh(f))=ϕ(XtWxh(b)+Ht+1Whh(b)+bh(b))Ht=(Ht,Ht)Ot=HtWhq+bq
练习题
最后
以上就是痴情宝贝为你收集整理的动手学深度学习-task3打卡一、 过拟合、欠拟合及解决方案二、梯度消失和梯度爆炸三、RNN进阶的全部内容,希望文章能够帮你解决动手学深度学习-task3打卡一、 过拟合、欠拟合及解决方案二、梯度消失和梯度爆炸三、RNN进阶所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复