cs231n 课程学习 二
cs231n 课程资源:Stanford University CS231n: Convolutional Neural Networks for Visual Recognition
我的 github 作业:FinCreWorld/cs231n: The assigments of cs231n (github.com)
第二章 线性分类器
本章介绍线性分类器,其包括两个主要的组成部分评价函数(score function)以及损失函数(loss function)
- 评价函数:针对样例输入,输出其在不同分类上的分数,该分数为分类的依据
- 损失函数:量化预测分数与真实标签(ground truth labels)的差距
最后我们将通过优化评价函数的参数,将损失函数最小化,从而将分类问题转化为优化问题。
一 构造评价函数
定义评价函数
f
:
R
D
→
R
K
f:R^D\to R^K
f:RD→RK,构造从
D
D
D 维数据点到
K
K
K 维分类分数的映射。构造线性映射
f
(
x
i
,
W
,
b
)
=
W
x
i
+
b
f(x_i,W,b)=Wx_i+b
f(xi,W,b)=Wxi+b
其中
x
i
x_i
xi 为
D
×
1
D\times1
D×1 维数据点,权重
W
W
W 为
K
×
D
K\times D
K×D 维矩阵,
b
b
b 为
K
×
1
K\times1
K×1 维偏差向量。
- W x i Wx_i Wxi 实质上是并行的 K K K 个分类器对 x i x_i xi 进行预测, W W W 每一行都可以看做一个独立的分类器
- 训练过程中,输入数据 ( x i , y i ) (x_i, y_i) (xi,yi) 是不可变的,我们的目的获取到合适的参数 W , b W,b W,b,使得针对输入数据,我们能够在正确的分类上获取到较高的分数
- 该模型训练时间较长,预测时只需要将数据代入公式即可,因此预测时间较短
我们可以通过为每个数据最后一位添 1 的方式,将
b
b
b 合并入
W
W
W 中,即
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ f(x_i,W,b)&=(W…
二 线性分类器理解
模式匹配的角度
x i x_i xi 实际上对应了一幅图片中所有像素点以及色彩通道的数值。对于不同的物体,其图像像素分布不同,颜色也不同。对于轮船,可能蓝色居多,对于鸟类,可能较多出现在图像的边缘。
过更改权重 W W W,我们可以更加侧重于采样某些位置的像素点以及某些颜色的像素点,如果某一幅图片在这些像素点中具有较高的值,那么该图像在该分类器中就会取得较高的分数。
如上图所示,权重 W W W 第一行用于分类出小猫,第二行用于分类出小狗,第三行用于分类出轮船,我们可以看出,小猫分类器更侧重于 x i 1 , x i 4 x_i^1,x_i^4 xi1,xi4(这些位置权重为 0.2),更不喜欢 x i 2 x_i^2 xi2,当数据点 x i 1 , x i 4 x_i^1,x_i^4 xi1,xi4 有较大值, x i 2 x_i^2 xi2 有较小值时,其在小猫类别上的得分就更高。
因此,权重 W W W 的每一行均为一个模板(template),我们将这些模板与输入图像进行匹配,学习到每个分类最佳的匹配模板。
上图就是我们学习到模板,可以看到 plane
和 ship
中蓝色居多,同时不同的图像称对称分布,这是因为我们的输入图像拥有不同的朝向。
进一步的,我们可以从最近邻分类器的角度来理解,我们学习到了 W W W,就相当于学习到了 K K K 种每个类别对应的模板,对于给定的图像,我们找出距离测试样例最近的模板,该模板对应的分类即为测试样例的分类。
高维空间的角度
我们可以把每个 D D D 维数据样例 x i x_i xi看做高维空间的一个点,每一个权重 W i W_i Wi 决定了一个超平面,一侧是其所属类,一侧是其他类。
三 损失函数
我们通过损失函数来衡量预测结果与实际标签之间的不匹配程度,很自然的,如果预测结果与实际标签不匹配,那么损失函数的值就应该高,如果预测正确,损失函数的值就应该较低。
多分类支持向量机(Multiclass Support Vector Machine)
SVM 要求对于正确类别的预测分数至少要比错误类别的分类分数高
Δ
\Delta
Δ。给定样例
x
i
x_i
xi,我们计算出分类结果
f
(
x
i
,
W
)
f(x_i,W)
f(xi,W),分类结果为
K
×
1
K\times1
K×1 维向量,
f
(
x
i
,
W
)
j
f(x_i,W)^j
f(xi,W)j 为对于第
j
j
j 类的分类分数,我们令
s
j
=
f
(
x
i
,
W
)
j
s_j=f(x_i,W)^j
sj=f(xi,W)j 代替,正确分类标签为
y
i
y_i
yi(注,如果有
K
K
K 个类别,那么
y
i
∈
{
0
−
9
}
y_i\in\{0-9\}
yi∈{0−9}),我们定义样例
x
i
x_i
xi 的预测损失为
L
i
=
∑
j
≠
y
i
max
(
0
,
s
j
−
s
y
i
+
Δ
)
L_i=\sum_{j\neq y_i}\max{(0,s_j-s_{y_i}+\Delta)}
Li=j=yi∑max(0,sj−syi+Δ)
如果我们使用线性分类器
f
(
x
i
,
W
)
=
W
x
i
f(x_i,W)=Wx_i
f(xi,W)=Wxi,那么我们可以写出如下式子
L
i
=
∑
j
≠
y
i
max
(
0
,
w
j
x
i
−
w
y
i
x
i
+
Δ
)
L_i=\sum_{j\neq y_i}\max{(0,w_jx_i-w_{y_i}x_i+\Delta)}
Li=j=yi∑max(0,wjxi−wyixi+Δ)
W
W
W 并不唯一,假设我们学习到了一个
W
W
W 使得任意
x
i
x_i
xi 都有
L
i
=
0
L_i=0
Li=0,那么对于
W
′
=
λ
W
(
λ
>
1
)
W'=\lambda W(\lambda>1)
W′=λW(λ>1) 来说, 也满足所有损失值为 0 的条件。因此我们需要对
W
W
W 进行限制,我们可以为损失函数增加正则惩罚项 R(W)。
最后我们得到了一个完整的损失函数,包括数据损失(data loss)和正则损失(regularization loss)
L
=
1
N
∑
i
L
i
⏟
data loss
+
λ
R
(
W
)
⏟
regularization loss
L=\underbrace{\frac{1}{N}\sum_{i}L_i}_{\text{data loss}}+\underbrace{\lambda R(W)}_{\text{regularization loss}}
L=data loss
N1i∑Li+regularization loss
λR(W)
我们通常定义
R
(
W
)
R(W)
R(W) 为
W
W
W 的 L2 范数,即
R
(
W
)
=
∑
k
∑
l
W
k
,
l
2
R(W)=\sum_k\sum_l W_{k,l}^2
R(W)=∑k∑lWk,l2 限制权值的增大,表示我们喜欢更小的权值。同时正则项的引入能够增加泛化精度,因为我们避免了某几个权重拥有较大的值。损失函数的展开形式为
L
=
1
N
∑
i
∑
j
≠
y
i
max
(
0
,
f
(
x
i
;
W
)
j
−
f
(
x
i
;
W
)
y
i
+
Δ
)
+
λ
∑
k
∑
l
W
k
,
l
L=\frac{1}{N}\sum_i\sum_{j\neq y_i}\max{(0,f(x_i;W)_j-f(x_i;W)_{y_i}+\Delta)}+\lambda\sum_k\sum_l W_{k,l}
L=N1i∑j=yi∑max(0,f(xi;W)j−f(xi;W)yi+Δ)+λk∑l∑Wk,l
Softmax 分类器
对于样例
x
i
x_i
xi,其分数
f
(
x
i
,
W
)
f(x_i,W)
f(xi,W) 保持不变,但是我们将分数
f
f
f 看做不规整的
log
\log
log 概率(unnormalized log probabilities),并且采用了交叉熵的形式,有
L
i
=
−
log
(
e
f
y
i
∑
j
e
f
j
)
L_i=-\log{(\frac{e^{f_{y_i}}}{\sum{_j}e^{f_j}})}
Li=−log(∑jefjefyi)
这里的 f j f_j fj 与上面 svm 的 s j s_j sj 表示含义一致
注意到,我们称 f j ( x ) = e x j ∑ k e x k f_j(x)=\frac{e^{x_j}}{\sum_ke^{x_k}} fj(x)=∑kexkexj 函数为 softmax 函数,该函数用于将向量 x x x 的所有分量上的值压缩到 0 − 1 0-1 0−1,并且总和为 1 1 1。
Softmax 分类器的解释
-
信息论视角
对于真实的事件分布 p p p 和估计的事件分布 q q q 之间的交叉熵定义为
H ( p , q ) = − ∑ x p ( x ) log q ( x ) H(p,q)=-\sum_{x}p(x)\log{q(x)} H(p,q)=−x∑p(x)logq(x)
Softmax 分类器用于最小化估计事件的概率与真实事件发生概率之间的交叉熵。估计事件概率为 q = e f y i ∑ j e f j q=\frac{e^{f_{y_i}}}{\sum_je^{f_j}} q=∑jefjefyi,而实际事件发生概率为 p = [ 0 , . . . , 1 , . . . , 0 ] p=[0,...,1,...,0] p=[0,...,1,...,0],其中 p y i = 0 p_{y_i}=0 pyi=0。KL 散度用于衡量两种时间分布之间的距离,而 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),事件 p p p 的熵 H ( p ) = 0 H(p)=0 H(p)=0,因此有 H ( p , q ) = D K L ( p ∣ ∣ q ) H(p,q)=D_{KL}(p||q) H(p,q)=DKL(p∣∣q),将事件发生概率交叉熵之后可得 H ( p , q ) = D K L ( p ∣ ∣ q ) = − log ( e f y i ∑ j e f j ) H(p,q)=D_{KL}(p||q)=-\log{(\frac{e^{f_{y_i}}}{\sum{_j}e^{f_j}})} H(p,q)=DKL(p∣∣q)=−log(∑jefjefyi) -
概率论视角
保持数据不溢出
由于 softmax 分类器中存在大量的指数操作,因此需要一些小技巧防止溢出,有
e
f
y
i
∑
j
e
f
j
=
C
e
f
y
i
C
∑
j
e
f
j
=
e
f
y
i
+
log
C
∑
j
e
f
j
+
log
C
\frac{e^{f_{y_i}}}{\sum_je^{f_j}}=\frac{Ce^{f_{y_i}}}{C\sum_je^{f_j}}=\frac{e^{f_{y_i}+\log{C}}}{\sum_je^{f_j+\log{C}}}
∑jefjefyi=C∑jefjCefyi=∑jefj+logCefyi+logC
我们使
log
C
=
−
max
f
j
\log{C}=-\max{f_j}
logC=−maxfj 可以避免溢出