一、softmax分类
对于一般的分类问题,已知一共 m m m组样本(sample),每组样本 n n n个特征(feature),令每组样本为列向量 x ( i ) ∈ R n \boldsymbol{x}^{(i)} \in R^n x(i)∈Rn, i i i代表第 i i i组样本( i = 1 , 2 , . . . , m i=1,2,...,m i=1,2,...,m)。假设一共有 q q q种类别,我们可以通过一维的输出 y = 1 , 2 , . . . , q y=1,2,...,q y=1,2,...,q来表示不同的分类识别结果。但这种输出方式本质上是由连续回归问题转化而来,对于分类问题,我们有更合适的softmax分类模型。
softmax分类输出维数等于类别数 q q q,其中每个元素对应某特定分类的概率。对于各训练样本的标签 y ( i ) ∈ R q \boldsymbol{y}^{(i)} \in R^q y(i)∈Rq,我们将该样本真实分类对应元素令为1,其余元素令为0,便可将输出拓展为 q q q维。比如我们要对猫、狗、鸡进行分类,猫对应输出可写为 [ 1 0 0 ] \begin{bmatrix}1\\0\\0\end{bmatrix} ⎣⎡100⎦⎤,狗为 [ 0 1 0 ] \begin{bmatrix}0\\1\\0\end{bmatrix} ⎣⎡010⎦⎤,鸡为 [ 0 0 1 ] \begin{bmatrix}0\\0\\1\end{bmatrix} ⎣⎡001⎦⎤。
对于我们根据样本
i
i
i得到的预测结果
y
^
(
i
)
∈
R
q
\hat{\boldsymbol{y}}^{(i)} \in R^q
y^(i)∈Rq,我们通过以下算法将其各元素之和归一化为1。设原始输出为
o
1
,
o
2
,
.
.
.
,
o
q
o_1,o_2,...,o_q
o1,o2,...,oq,归一化后的输出为
y
^
1
,
y
^
2
,
.
.
.
,
y
^
q
\hat{y}_1,\hat{y}_2,...,\hat{y}_q
y^1,y^2,...,y^q。
y
^
1
,
y
^
2
,
.
.
.
,
y
^
q
=
softmax
(
o
1
,
o
2
,
.
.
.
,
o
q
)
\hat{y}_1, \hat{y}_2,..., \hat{y}_q = \text{softmax}(o_1, o_2,..., o_q)
y^1,y^2,...,y^q=softmax(o1,o2,...,oq)
其中
y
^
k
=
exp
(
o
k
)
∑
i
=
1
q
exp
(
o
i
)
\hat{y}_k = \frac{ \exp(o_k)}{\sum_{i=1}^q \exp(o_i)}
y^k=∑i=1qexp(oi)exp(ok)
这样我们可以把模型输出的各元素视为各类别的概率,其中最大的一项就可以取为我们的预测结果。比如上面分类猫、狗、鸡的问题,我们的模型输出为
[
0.1
0.6
0.3
]
\begin{bmatrix}0.1\\0.6\\0.3\end{bmatrix}
⎣⎡0.10.60.3⎦⎤,便可认为预测分类为狗。
三、交叉熵损失函数
在训练过程中,我们需要一个损失函数(cost function)来衡量预测输出与实际标签之间的差异,并将该损失函数最小化来优化模型。我们可以像线性回归那样使用平方损失函数 ∥ y ^ ( i ) − y ( i ) ∥ 2 / 2 \|\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}\|^2/2 ∥y^(i)−y(i)∥2/2。然而,想要预测分类结果正确,我们其实并不需要预测概率完全等于标签概率。例如,在图像分类的例子里,如果 y ( i ) = 3 y^{(i)}=3 y(i)=3,那么我们只需要 y ^ 3 ( i ) \hat{y}^{(i)}_3 y^3(i)比其他两个预测值 y ^ 1 ( i ) \hat{y}^{(i)}_1 y^1(i)和 y ^ 2 ( i ) \hat{y}^{(i)}_2 y^2(i)大就行了。即使 y ^ 3 ( i ) \hat{y}^{(i)}_3 y^3(i)值为0.6,不管其他两个预测值为多少,类别预测均正确。而平方损失则过于严格,例如 y ^ 1 ( i ) = y ^ 2 ( i ) = 0.2 \hat y^{(i)}_1=\hat y^{(i)}_2=0.2 y^1(i)=y^2(i)=0.2比 y ^ 1 ( i ) = 0 , y ^ 2 ( i ) = 0.4 \hat y^{(i)}_1=0, \hat y^{(i)}_2=0.4 y^1(i)=0,y^2(i)=0.4的损失要小很多,虽然两者都有同样正确的分类预测结果。(该段主要引自《动手学深度学习》)
我们可以用如下交叉熵(cross entropy)损失函数改善上诉问题:
H
(
y
(
i
)
,
y
^
(
i
)
)
=
−
∑
j
=
1
q
y
j
(
i
)
ln
y
^
j
(
i
)
H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \ln \hat y_j^{(i)}
H(y(i),y^(i))=−j=1∑qyj(i)lny^j(i)
其中
y
j
(
i
)
y_j^{(i)}
yj(i)只有实际分类对应的一项为1,所以损失函数即为预测输出
y
^
(
i
)
\boldsymbol{\hat y}^{(i)}
y^(i)对应元素的负对数值:
H
(
y
(
i
)
,
y
^
(
i
)
)
=
−
ln
y
^
y
(
i
)
(
i
)
H(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}) = -\ln \hat y_{y^{(i)}}^{(i)}
H(y(i),y^(i))=−lny^y(i)(i)
对于所有
m
m
m组样本,交叉熵损失函数可定义为各样本损失函数之和:
ℓ
(
Θ
)
=
∑
i
=
1
m
H
(
y
(
i
)
,
y
^
(
i
)
)
=
−
∑
i
=
1
m
ln
y
^
y
(
i
)
(
i
)
\ell(\boldsymbol{\Theta}) = \sum_{i=1}^m H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right )= -\sum_{i=1}^m \ln \hat y_{y^{(i)}}^{(i)}
ℓ(Θ)=i=1∑mH(y(i),y^(i))=−i=1∑mlny^y(i)(i)
其中 Θ \boldsymbol{\Theta} Θ代表模型参数。
四、最大似然估计
最大似然估计(Maximum Likelihood Estimation, MLE)是一种参数估计中点估计的方法。基本思想是通过选取合适的参数,使得当前已知样本的发生概率最大。为了求得该最大值,写出取得当前样本值的概率函数 L ( Θ ) L(\boldsymbol{\Theta}) L(Θ),该函数与模型参数 Θ \boldsymbol{\Theta} Θ有关,又被称为似然函数。对其求导可以得到似然函数取得最大值时的模型参数。
对于上面的分类问题,将模型预测输出各项看作各类别的概率,似然函数即为各样本对应类别的概率乘积:
L
(
Θ
)
=
∏
i
=
1
m
y
^
y
(
i
)
(
i
)
L(\boldsymbol{\Theta})=\prod_{i=1}^m \hat y_{y^{(i)}}^{(i)}
L(Θ)=i=1∏my^y(i)(i)
一般的似然函数为连乘形式,为了计算方便,常对其做取对数处理:
ℓ
(
Θ
)
=
l
n
L
(
Θ
)
=
∑
i
=
1
m
ln
y
^
y
(
i
)
(
i
)
\ell(\boldsymbol{\Theta})=lnL(\boldsymbol{\Theta})= \sum_{i=1}^m \ln \hat y_{y^{(i)}}^{(i)}
ℓ(Θ)=lnL(Θ)=i=1∑mlny^y(i)(i)
根绝极大似然法,此处我们要求
ℓ
(
Θ
)
\ell(\boldsymbol{\Theta})
ℓ(Θ)取得最大值,等价于
−
∑
i
=
1
m
ln
y
^
y
(
i
)
(
i
)
-\sum_{i=1}^m \ln \hat y_{y^{(i)}}^{(i)}
−∑i=1mlny^y(i)(i)取得最小值。将该式与上面的交叉熵损失函数相比较,可以看到形式完全相同。