深度学习导论(6)误差计算
一. 再谈误差计算
常见误差计算函数
(1) 均方差(Mean Squared Error,MSE)
- 常用于回归问题。把输出向量和真实向量映射到笛卡尔坐标系的两个点上,通过计算这两个点之间的欧式距离(准确地说是欧式距离的平方)来衡量两个向量之间的差距。
M S E : = 1 d o u t ∑ i = 1 d o u t ( y i − o i ) 2 MSE:=\frac{1}{d_{out}}\sum^{d_{out}}_{i=1}{(y_i-o_i)^2} MSE:=dout1i=1∑dout(yi−oi)2
(2) 交叉熵(Cross Entropy) - 常用于分类问题。
- 用来衡量信息的不确定性。熵越大,代表不确定性越大。
- 某个分布
(
i
)
(i)
(i)的熵定义为:
H ( P ) : = − ∑ i = 0 P ( i ) l o g 2 P ( i ) H(P):=-\sum_{i=0}{P(i)log_2P(i)} H(P):=−i=0∑P(i)log2P(i)
例如,对于4分类问题,如果某个样本的真实标签是第4类,one-hot编码为[0, 0, 0, 1],即对这张图片的分类是唯一确定的,它属于第4类的概率 ( y i s 4 │ x ) = 1 (y\ is\ 4│x)=1 (y is 4│x)=1,不确定性为0,它的熵可以简单的计算为:
− 0 ∗ l o g 2 0 − 0 ∗ l o g 2 0 − 0 ∗ l o g 2 0 − 1 ∗ l o g 2 1 = 0 -0*log_20-0*log_20-0*log_20-1*log_21=0 −0∗log20−0∗log20−0∗log20−1∗log21=0
如果它预测的概率分布是[0.1, 0.1, 0.1, 0.7],它的熵可以计算为:
− 0.1 ∗ l o g 2 0.1 − 0.1 ∗ l o g 2 0.1 − 0.1 ∗ l o g 2 0.1 − 0.7 ∗ l o g 2 0.7 ≈ 1.356 -0.1*log_20.1-0.1*log_20.1-0.1*log_20.1-0.7*log_20.7\approx1.356 −0.1∗log20.1−0.1∗log20.1−0.1∗log20.1−0.7∗log20.7≈1.356
(3) KL散度(Kullback-Leibler Divergence)
交叉熵 - H ( p , q ) ≔ − ∑ i = 0 p ( i ) l o g 2 q ( i ) H(p,q)≔-\sum_{i=0}{p(i)log_2q(i)} H(p,q):=−i=0∑p(i)log2q(i)
- 通过变换,交叉熵可以分解为 p p p的熵 H ( p ) H(p) H(p)与 p p p, q q q的KL散度(Kullback-Leibler Divergence)的和: H ( p , q ) = H ( p ) + D K L ( p ∣ q ) H(p,q)=H(p)+D_{KL} (p|q) H(p,q)=H(p)+DKL(p∣q)
- 其中KL定义为:
D K L ( p │ q ) = ∑ x ∈ X p ( x ) l o g ( p ( x ) q ( x ) ) D_{KL}(p│q)=\sum_{x\in X}{p(x)log(\frac{p(x)}{q(x)})} DKL(p│q)=x∈X∑p(x)log(q(x)p(x))
KL散度是衡量两个分部之间距离的指标, p = q p=q p=q时, D K L ( p │ q ) D_{KL} (p│q) DKL(p│q)取得最小值0。交叉熵可以很好地衡量2个分布之间的差别,特别地,当分类问题中y的编码分布采用one-hot编码时: H ( y ) = 0 H(y)=0 H(y)=0,此时:
H ( y , o ) = D K L ( y │ o ) = ∑ j y i l o g ( y i o i ) = 1 ∗ l o g 1 o i + ∑ ( j ≠ i ) 0 ∗ l o g ( o o j ) = − l o g o i H(y,o)=D_{KL}(y│o)=\sum_j{y_ilog(\frac{y_i}{o_i})}=1*log \frac{1}{o_i}+\sum_{(j≠i)}{0*log(\frac{o}{o_j})}=-logo_i H(y,o)=DKL(y│o)=j∑yilog(oiyi)=1∗logoi1+(j=i)∑0∗log(ojo)=−logoi
其中i为one-hot编码中为1的索引号,也是当前输入的真实类别。可以看到, H H H只与真实类别 i i i上的概率 o i o_i oi有关。
(4) Hinge Loss函数
二. 神经网络类型
(1) 全神经网络(DNN)
- 特征维度比较大时参数量大。
(2) 卷积神经网络(CNN) - 图像、计算机视觉领域,1986年YannLecun提出。
(3) 循环神经网络(RNN) - 处理序列信号数据类型,如文本数据。其变种有LSTM、GRU、双向RNN等。
(4) 注意力机制(Attention)网络 - 克服了RNN训练不稳定、难以并行化等缺陷,在自然语言处理和图片生成等领域中逐渐崭露头角,逐渐开始用于NLP等领域。
(5) 图神经网络 - 2016年,Tomas Kipf等人基于前人在一阶近似的谱卷积算法上提出了图卷积(Graph Convolutional Network, GCN)网络模型,擅长处理类似于社交网络、通信网络,蛋白质分子结构等不规则的空间拓扑结构的数据。
三. 模型的容量和泛化能力
(1) 泛化能力
- 从训练集上学习到数据的真实模型,从而能够在未见过的测试集上也能够表现良好。
- 通常,训练集和测试集都采样自某个相同的数据分布p(x),采样到的样本是相互独立的,但是又来自于相同的分布(独立同分布假设,Independent Identical Distribution assumption,i.i.d.)。
(2) 模型的容量 - 指模型的表达能力,即模型拟合复杂函数的能力。
- 一种体现模型容量的指标为模型的假设空间(Hypothesis Space)大小,即模型可以表示函数集的大小。假设空间越大越完备,从假设空间中搜索出逼近真实模型的函数也就越有可能; 反之,如果假设空间非常受限,就很难从中找到逼近真实模型的函数。
多项式模型容量示意图:
函数的假设空间越大,就越有可能找到一个函数更逼近真实分布的函数模型,但是过大的假设空间会增加搜索难度和计算代价,在有限的计算资源的约束下,较大的假设空间并不一定能搜索出更好的函数模型。同时由于观测误差的存在,较大的假设空间中可能包含了大量表达能力过强的函数,能够将训练样本的观测误差也学习进来,从而影响了模型的泛化能力。
四. 过拟合与欠拟合
模型的容量和误差之间的关系(Goodfellow,Bengio,&Courville,2016)
1. 过拟合(Overfitting)
- 当模型的容量过大时,网络模型除了学习到训练集数据的模态之外,还把额外的观测误差也学习进来,导致学习的模型在训练集上面表现较好,但是在未见的样本上表现不佳,也就是泛化能力偏弱。
- 深度学习中经常容易出现过拟合问题。
2. 欠拟合(Underfitting)
- 当模型的容量过小时,模型不能够很好地学习到训练集数据的模态,导致数据距离拟合曲线较远,或指模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
- 可以通过增加神经网络的层数、增大中间维度的大小等手段,比较好的解决欠拟合的问题。
五. 划分验证集
训练集
D
t
r
a
i
n
\bold{D}_{train}
Dtrain用于训练模型参数,测试集
D
t
e
s
t
\bold{D}_{test}
Dtest用于测试模型的泛化能力,测试集中的样本不能参与模型的训练,防止模型“记忆”住数据的特征,损害模型的泛化能力。训练集和测试集都是采样自相同的数据分布,比如MNIST手写数字图片集共有7万张样本图片,其中6万张图片用作训练集,余下的1万张图片用于测试集。
由于测试集的性能不能作为模型训练的反馈,而我们需要在模型训练时能够挑选出较合适的模型超参数,判断模型是否过拟合等,因此需要将训练集再次切分为训练集
D
t
r
a
i
n
\bold{D}^{train}
Dtrain和验证集
D
v
a
l
\bold{D}^{val}
Dval。验证集用于选择模型的超参数(称为模型选择,Model selection),它的功能包括:
(1) 根据验证集的性能表现来调整学习率,训练次数等;
(2) 根据验证集的性能表现来重新调整网络拓扑结构;
(3) 根据验证集的性能表现判断是否过拟合和欠拟合;
训练集、验证集和测试集可以按着自定义的比例来划分,比如常见的60%-20%-20%的划分。
六. 如何使用验证集
- 验证集使用时机:
- Step: 把对训练集中的一个Batch运算更新一次叫做一个Step;
- Epoch: 对训练集的所有样本循环迭代一次叫做一个Epoch;
- 验证集可以在数次Step或数次Epoch后使用。验证的步骤过于频繁,能够精准地观测模型的训练状况,但是也会引入额外的计算代价,一般建议几个Epoch后进行一次验证运算。
- 通过观测训练准确率和验证准确率可以大致推断模型是否过拟合和欠拟合
- 如果模型的训练误差较低,训练准确率较高,但是验证误差较高,验证准确率较低,那么可能出现了过拟合现象;
- 如果训练集和验证集上面的误差都较高,准确率较低,那么可能出现了欠拟合现象。
七. 过拟合和欠拟合的解决办法
- 通过验证集可以判断网络模型是否过拟合或者欠拟合。
- 过拟合
- 以重新设计网络模型的容量,如降低网络的层数、降低网络的参数量、添加假设空间的约束等,使得模型的容量降低;
- 可以通过稀疏化参数、添加正则化等手段降低模型的容量;
- 当发现验证准确率连续P个Epoch没有下降时,可以预测已经达到了最合适的epoch附近,从而提前终止训练。
- 欠拟合
- 可以尝试增大网络的容量,如加深网络的层数、增加网络的参数量,尝试更复杂的网络模型结构。
八. 正则化
1. 定义
通过设计不同的层数、大小的网络模型可以为优化算法提供出事的函数假设空间,但是模型的实际容量可以随着网络参数的优化而产生变化。以多项式函数为例:
y
=
β
0
+
β
1
x
+
β
2
x
2
+
β
3
x
3
+
⋯
+
β
n
x
n
+
ϵ
y=β_0+β_1 x+β_2 x^2+β_3 x^3+⋯+β_n x^n+ϵ
y=β0+β1x+β2x2+β3x3+⋯+βnxn+ϵ
上述模型的容量可以通过n简单衡量,在训练的过程中,如果网络参数
β
(
k
+
1
)
,
…
,
β
n
=
0
β_{(k+1)},…,β_n=0
β(k+1),…,βn=0,那么网络的实际容量退化到
k
k
k次多项式的函数容量。因此,通过限制网络参数的稀疏性,可以来约束网络的实际容量。
这种约束一般通过在损失函数上添加额外的参数稀疏性惩罚实现,在未加约束之前的优化目标是:
M
i
n
i
m
i
z
e
L
(
f
θ
(
x
)
,
y
)
,
(
x
,
y
)
∈
D
t
r
a
i
n
MinimizeL(f_θ (x),y), \quad(x,y)∈\bold{D}^{train}
MinimizeL(fθ(x),y),(x,y)∈Dtrain
对模型的参数添加额外的约束后,优化的目标变为:
M
i
n
i
m
i
z
e
L
(
f
θ
(
x
)
,
y
)
+
λ
∗
Ω
(
θ
)
,
(
x
,
y
)
∈
D
t
r
a
i
n
MinimizeL(f_θ (x),y)+λ*Ω(θ) ,(x,y)∈\bold{D}^{train}
MinimizeL(fθ(x),y)+λ∗Ω(θ),(x,y)∈Dtrain
其中
Ω
(
θ
)
Ω(θ)
Ω(θ)表示对网络参数θ的稀疏性约束函数。一般地,参数
θ
θ
θ的稀疏性约束通过约束参数
θ
θ
θ的
L
L
L范数实现,即:
Ω
(
θ
)
=
∑
θ
i
‖
θ
i
‖
l
Ω(θ)=∑_{θ_i}‖θ_i ‖_l
Ω(θ)=θi∑‖θi‖l
新的优化目标除了要最小化原来的损失函数
L
(
x
,
y
)
L(x,y)
L(x,y)之外,还需要网络参数的稀疏性,优化算法会在降低
L
(
x
,
y
)
L(x,y)
L(x,y)的同时,尽可能地迫使网络参数
θ
i
θ_i
θi变得稀疏,他们之间的权重关系通过超参数λ来平衡,较大的λ意味着网络的稀疏性更重要; 较小的
λ
λ
λ则意味着网络的训练误差更重要。通过选择合适的
λ
λ
λ超参数可以获得较好的训练性能,同时保证网络的稀疏性,从而获得不错的泛化能力。常用的正则化方式有L0,L1,L2正则化。
2. 正则化方式
(1) L0正则化
采用L0范数作为稀疏性惩罚项Ω(θ)的正则化方式叫做L0正则化,即:
Ω
(
θ
)
=
∑
θ
i
‖
θ
i
‖
0
Ω(θ)=∑_{θ_i}‖θ_i ‖_0
Ω(θ)=θi∑‖θi‖0
其中L0范数
‖
θ
i
‖
0
‖θ_i ‖_0
‖θi‖0定义为
θ
i
θ_i
θi中非零元素的个数。通过约束
∑
θ
i
‖
θ
i
‖
0
∑_{θ_i}{‖θ_i ‖_0}
∑θi‖θi‖0的大小可以迫使网络中的连接权值大部分为0,从而降低网络的实际参数量和网络容量。但是由于L0范数
‖
θ
i
‖
0
‖θ_i ‖_0
‖θi‖0并不可导,步能利用梯度下降算法进行优化,在神经网络中使用的并不多。
(2) L1正则化
采用L1范数作为稀疏性惩罚项Ω(θ)的正则化方式叫做L1正则化,即:
Ω
(
θ
)
=
∑
θ
i
‖
θ
i
‖
1
Ω(θ)=∑_{θ_i}‖θ_i ‖_1
Ω(θ)=θi∑‖θi‖1
其中L1范数
‖
θ
i
‖
1
‖θ_i ‖_1
‖θi‖1定义为张量
θ
i
θ_i
θi中所有元素的绝对值之和。L1正则化也叫Lasso Regularization,它是连续可导的,在神经网络中使用广泛。
(3) L2正则化
采用L2范数作为稀疏性惩罚项Ω(θ)的正则化方式叫做L2正则化,即:
Ω
(
θ
)
=
∑
θ
i
‖
θ
i
‖
2
Ω(θ)=∑_{θ_i}‖θ_i ‖_2
Ω(θ)=θi∑‖θi‖2
其中L2范数
‖
θ
i
‖
2
‖θ_i ‖_2
‖θi‖2定义为张量
θ
i
θ_i
θi中所有元素的平方和。L2正则化也叫做Ridge Regularization,它和L1正则化一样,也是连续可导的,在神经网络中使用广泛。
3. 正则化效果
- 可以看到,随着正则化系数λ的增加,网络对参数稀疏性的惩罚变大,从而迫使优化算法搜索而网络容量更小的模型。在λ=0.00001时,正则化的作用比较微弱,网络出现了过拟合现象; 但是λ=0.1时,网络已经能够优化到合适的容量,并没有出现明显过拟合或者欠拟合现象。
- 在实际训练时,一般先尝试较小的正则化系数λ,观测网络是否出现过拟合现象。然后尝试逐渐增大λ参数来正价网络参数稀疏性,提高泛化能力。但是,过大的λ参数有可能导致网络不收敛,需要根据实际任务调节。
4. Dropout
- 在2012年,Hiton等人在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中使用了Dropout方法来提高模型性能。
- Dropout通过随机断开神经网络的连接,减少每次训练时实际参与计算的模型的参数量; 但是在测试时,Dropout会恢复所有的连接,保证模型测试时获得最好的性能。
- 每条连接是否断开符合某种预设的概率分布,如断开概率为p的伯努利分布。图(b)显示了某次具体的采样结果,虚线代表了采样结果为断开的连接线,实际代表了采样结果不断开的连接线。