softmax的基本概念
分类问题
一个简单的图像分类问题,输入图像的高和宽均为2像素,色彩为灰度。
图像中的4像素分别记为
x
1
,
x
2
,
x
3
,
x
4
x_1, x_2, x_3, x_4
x1,x2,x3,x4。
假设真实标签为狗、猫或者鸡,这些标签对应的离散值为
y
1
,
y
2
,
y
3
y_1, y_2, y_3
y1,y2,y3。
我们通常使用离散的数值来表示类别,例如
y
1
=
1
,
y
2
=
2
,
y
3
=
3
y_1=1, y_2=2, y_3=3
y1=1,y2=2,y3=3。
权重矢量
o 1 = x 1 w 11 + x 2 w 21 + x 3 w 31 + x 4 w 41 + b 1 \begin{aligned} o_1 &= x_1 w_{11} + x_2 w_{21} + x_3 w_{31} + x_4 w_{41} + b_1 \end{aligned} o1=x1w11+x2w21+x3w31+x4w41+b1
o
2
=
x
1
w
12
+
x
2
w
22
+
x
3
w
32
+
x
4
w
42
+
b
2
\begin{aligned} o_2 &= x_1 w_{12} + x_2 w_{22} + x_3 w_{32} + x_4 w_{42} + b_2 \end{aligned}
o2=x1w12+x2w22+x3w32+x4w42+b2
o
3
=
x
1
w
13
+
x
2
w
23
+
x
3
w
33
+
x
4
w
43
+
b
3
\begin{aligned} o_3 &= x_1 w_{13} + x_2 w_{23} + x_3 w_{33} + x_4 w_{43} + b_3 \end{aligned}
o3=x1w13+x2w23+x3w33+x4w43+b3
神经网络图
下图用神经网络图描绘了上面的计算。softmax回归同线性回归一样,也是一个单层神经网络。由于每个输出
o
1
,
o
2
,
o
3
o_1, o_2, o_3
o1,o2,o3的计算都要依赖于所有的输入
x
1
,
x
2
,
x
3
,
x
4
x_1, x_2, x_3, x_4
x1,x2,x3,x4,softmax回归的输出层也是一个全连接层。
s
o
f
t
m
a
x
回
归
是
一
个
单
层
神
经
网
络
\begin{aligned}softmax回归是一个单层神经网络\end{aligned}
softmax回归是一个单层神经网络
既然分类问题需要得到离散的预测输出,一个简单的办法是将输出值
o
i
o_i
oi当作预测类别是
i
i
i的置信度,并将值最大的输出所对应的类作为预测输出,即输出
arg
max
i
o
i
\underset{i}{\arg\max} o_i
iargmaxoi。例如,如果
o
1
,
o
2
,
o
3
o_1,o_2,o_3
o1,o2,o3分别为
0.1
,
10
,
0.1
0.1,10,0.1
0.1,10,0.1,由于
o
2
o_2
o2最大,那么预测类别为2,其代表猫。
输出问题
直接使用输出层的输出有两个问题:
一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。例如,刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果
o
1
=
o
3
=
1
0
3
o_1=o_3=10^3
o1=o3=103,那么输出值10却又表示图像类别为猫的概率很低。
另一方面,由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。
softmax运算符(softmax operator)解决了以上两个问题。它通过下式将输出值变换成值为正且和为1的概率分布:
y
^
1
,
y
^
2
,
y
^
3
=
softmax
(
o
1
,
o
2
,
o
3
)
\hat{y}_1, \hat{y}_2, \hat{y}_3 = \text{softmax}(o_1, o_2, o_3)
y^1,y^2,y^3=softmax(o1,o2,o3)
其中
y
^
1
=
exp
(
o
1
)
∑
i
=
1
3
exp
(
o
i
)
,
y
^
2
=
exp
(
o
2
)
∑
i
=
1
3
exp
(
o
i
)
,
y
^
3
=
exp
(
o
3
)
∑
i
=
1
3
exp
(
o
i
)
.
\hat{y}1 = \frac{ \exp(o_1)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}2 = \frac{ \exp(o_2)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}3 = \frac{ \exp(o_3)}{\sum_{i=1}^3 \exp(o_i)}.
y^1=∑i=13exp(oi)exp(o1),y^2=∑i=13exp(oi)exp(o2),y^3=∑i=13exp(oi)exp(o3).
容易看出
y
^
1
+
y
^
2
+
y
^
3
=
1
\hat{y}_1 + \hat{y}_2 + \hat{y}_3 = 1
y^1+y^2+y^3=1且
0
≤
y
^
1
,
y
^
2
,
y
^
3
≤
1
0 \leq \hat{y}_1, \hat{y}_2, \hat{y}_3 \leq 1
0≤y^1,y^2,y^3≤1,因此
y
^
1
,
y
^
2
,
y
^
3
\hat{y}_1, \hat{y}_2, \hat{y}_3
y^1,y^2,y^3是一个合法的概率分布。这时候,如果
y
^
2
=
0.8
\hat{y}_2=0.8
y^2=0.8,不管
y
^
1
\hat{y}_1
y^1和
y
^
3
\hat{y}_3
y^3的值是多少,我们都知道图像类别为猫的概率是80%。此外,我们注意到
arg
max
i
o
i
=
arg
max
i
y
^
i
\underset{i}{\arg\max} o_i = \underset{i}{\arg\max} \hat{y}_i
iargmaxoi=iargmaxy^i
因此softmax运算不改变预测类别输出。
计算效率
单样本矢量计算表达式
为了提高计算效率,我们可以将单样本分类通过矢量计算来表达。在上面的图像分类问题中,假设softmax回归的权重和偏差参数分别为
W
=
[
w
11
w
12
w
13
w
21
w
22
w
23
w
31
w
32
w
33
w
41
w
42
w
43
]
,
b
=
[
b
1
b
2
b
3
]
,
\boldsymbol{W} = \begin{bmatrix} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \\ w_{31} & w_{32} & w_{33} \\ w_{41} & w_{42} & w_{43} \end{bmatrix},\quad \boldsymbol{b} = \begin{bmatrix} b_1 & b_2 & b_3 \end{bmatrix},
W=⎣⎢⎢⎡w11w21w31w41w12w22w32w42w13w23w33w43⎦⎥⎥⎤,b=[b1b2b3],
设高和宽分别为2个像素的图像样本
i
i
i的特征为
x
(
i
)
=
[
x
1
(
i
)
x
2
(
i
)
x
3
(
i
)
x
4
(
i
)
]
,
\boldsymbol{x}^{(i)} = \begin{bmatrix}x_1^{(i)} & x_2^{(i)} & x_3^{(i)} & x_4^{(i)}\end{bmatrix},
x(i)=[x1(i)x2(i)x3(i)x4(i)],
输出层的输出为
o
(
i
)
=
[
o
1
(
i
)
o
2
(
i
)
o
3
(
i
)
]
,
\boldsymbol{o}^{(i)} = \begin{bmatrix}o_1^{(i)} & o_2^{(i)} & o_3^{(i)}\end{bmatrix},
o(i)=[o1(i)o2(i)o3(i)],
预测为狗、猫或鸡的概率分布为
y
^
(
i
)
=
[
y
^
1
(
i
)
y
^
2
(
i
)
y
^
3
(
i
)
]
.
\boldsymbol{\hat{y}}^{(i)} = \begin{bmatrix}\hat{y}_1^{(i)} & \hat{y}_2^{(i)} & \hat{y}_3^{(i)}\end{bmatrix}.
y^(i)=[y^1(i)y^2(i)y^3(i)].
softmax回归对样本
i
i
i分类的矢量计算表达式为
o ( i ) = x ( i ) W + b , y ^ ( i ) = softmax ( o ( i ) ) . \begin{aligned} \boldsymbol{o}^{(i)} &= \boldsymbol{x}^{(i)} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{y}}^{(i)} &= \text{softmax}(\boldsymbol{o}^{(i)}). \end{aligned} o(i)y^(i)=x(i)W+b,=softmax(o(i)).
小批量矢量计算表达式
为了进一步提升计算效率,我们通常对小批量数据做矢量计算。广义上讲,给定一个小批量样本,其批量大小为
n
n
n,输入个数(特征数)为
d
d
d,输出个数(类别数)为
q
q
q。设批量特征为
X
∈
R
n
×
d
\boldsymbol{X} \in \mathbb{R}^{n \times d}
X∈Rn×d。假设softmax回归的权重和偏差参数分别为
W
∈
R
d
×
q
\boldsymbol{W} \in \mathbb{R}^{d \times q}
W∈Rd×q和
b
∈
R
1
×
q
\boldsymbol{b} \in \mathbb{R}^{1 \times q}
b∈R1×q。softmax回归的矢量计算表达式为
O
=
X
W
+
b
,
Y
^
=
softmax
(
O
)
,
\begin{aligned} \boldsymbol{O} &= \boldsymbol{X} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{Y}} &= \text{softmax}(\boldsymbol{O}), \end{aligned}
OY^=XW+b,=softmax(O),
其中的加法运算使用了广播机制,
O
,
Y
^
∈
R
n
×
q
\boldsymbol{O}, \boldsymbol{\hat{Y}} \in \mathbb{R}^{n \times q}
O,Y^∈Rn×q且这两个矩阵的第
i
i
i行分别为样本
i
i
i的输出
o
(
i
)
\boldsymbol{o}^{(i)}
o(i)和概率分布
y
^
(
i
)
\boldsymbol{\hat{y}}^{(i)}
y^(i)。
交叉熵损失函数
对于样本
i
i
i,我们构造向量
y
(
i
)
∈
R
q
\boldsymbol{y}^{(i)}\in \mathbb{R}^{q}
y(i)∈Rq ,使其第
y
(
i
)
y^{(i)}
y(i)(样本
i
i
i类别的离散数值)个元素为1,其余为0。这样我们的训练目标可以设为使预测概率分布
y
^
(
i
)
\boldsymbol{\hat y}^{(i)}
y^(i)尽可能接近真实的标签概率分布
y
(
i
)
\boldsymbol{y}^{(i)}
y(i)。
平方损失估计
L
o
s
s
=
∣
y
^
(
i
)
−
y
(
i
)
∣
2
/
2
\begin{aligned}Loss = |\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}|^2/2\end{aligned}
Loss=∣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
)
log
y
^
j
(
i
)
,
H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \log \hat y_j^{(i)},
H(y(i),y^(i))=−j=1∑qyj(i)logy^j(i),
其中带下标的
y
j
(
i
)
y_j^{(i)}
yj(i)是向量
y
(
i
)
\boldsymbol y^{(i)}
y(i)中非0即1的元素,需要注意将它与样本
i
i
i类别的离散数值,即不带下标的
y
(
i
)
y^{(i)}
y(i)区分。在上式中,我们知道向量
y
(
i
)
\boldsymbol y^{(i)}
y(i)中只有第
y
(
i
)
y^{(i)}
y(i)个元素
y
(
i
)
y
(
i
)
y^{(i)}{y^{(i)}}
y(i)y(i)为1,其余全为0,于是
H
(
y
(
i
)
,
y
^
(
i
)
)
=
−
log
y
^
y
(
i
)
(
i
)
H(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}) = -\log \hat y{y^{(i)}}^{(i)}
H(y(i),y^(i))=−logy^y(i)(i)。也就是说,交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确。当然,遇到一个样本有多个标签时,例如图像里含有不止一个物体时,我们并不能做这一步简化。但即便对于这种情况,交叉熵同样只关心对图像中出现的物体类别的预测概率。
假设训练数据集的样本数为 n n n,交叉熵损失函数定义为 ℓ ( Θ ) = 1 n ∑ i = 1 n H ( y ( i ) , y ^ ( i ) ) , \ell(\boldsymbol{\Theta}) = \frac{1}{n} \sum_{i=1}^n H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ), ℓ(Θ)=n1i=1∑nH(y(i),y^(i)),
其中 Θ \boldsymbol{\Theta} Θ代表模型参数。同样地,如果每个样本只有一个标签,那么交叉熵损失可以简写成 ℓ ( Θ ) = − ( 1 / n ) ∑ i = 1 n log y ^ y ( i ) ( i ) \ell(\boldsymbol{\Theta}) = -(1/n) \sum_{i=1}^n \log \hat y_{y^{(i)}}^{(i)} ℓ(Θ)=−(1/n)∑i=1nlogy^y(i)(i)。从另一个角度来看,我们知道最小化 ℓ ( Θ ) \ell(\boldsymbol{\Theta}) ℓ(Θ)等价于最大化 exp ( − n ℓ ( Θ ) ) = ∏ i = 1 n y ^ y ( i ) ( i ) \exp(-n\ell(\boldsymbol{\Theta}))=\prod_{i=1}^n \hat y_{y^{(i)}}^{(i)} exp(−nℓ(Θ))=∏i=1ny^y(i)(i),即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。
模型训练和预测
在训练好softmax回归模型后,给定任一样本特征,就可以预测每个输出类别的概率。通常,我们把预测概率最大的类别作为输出类别。如果它与真实类别(标签)一致,说明这次预测是正确的。在3.6节的实验中,我们将使用准确率(accuracy)来评价模型的表现。它等于正确预测数量与总预测数量之比。