深度学习基础之sofxmax回归
模型输出可以是一个像图像类别的离散值。对于这样的离散值预测问题,可以使用诸如softmax回归在内的分类模型。和线性回归不同,softmax回归的输出单元从一个变成了多个,且引入了softmax运算使输出更适合离散值的预测和训练。
1. 分类问题
考虑⼀个简单的图像分类问题,其输⼊图像的高和宽均为2像素,且色彩为灰度。这样每个像素值都可以用一个标量表示。我们将图像中的4像素分别记为 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1,x2,x3,x4。假设训练数据集中图像的真实标签为狗、猫或鸡(假设可以用4像素表示出这3种动物),这些标签分别对应离散值 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。如此,⼀张图像的标签为1、2和3这3个数值中的⼀个。虽然我们仍然可以使⽤回归模型来进⾏建模,并将预测值就近定点化到1、2和3这3个离散值之一,但这种连续值到离散值的转化通常会影响到分类质量。因此我们一般使用更加适合离散值输出的模型来解决分类问题。
2. softmax回归模型
softmax回归跟线性回归一样将输入特征与权重做线性叠加。与线性回归的一个主要不同在于,softmax回归的输出值个数等于标签里的类别数。
o
1
=
x
1
w
11
+
x
2
w
21
+
x
3
w
31
+
x
4
w
41
+
b
1
,
o
2
=
x
1
w
12
+
x
2
w
22
+
x
3
w
32
+
x
4
w
42
+
b
2
,
o
3
=
x
1
w
13
+
x
2
w
23
+
x
3
w
33
+
x
4
w
43
+
b
3
.
(1)
o_1=x_1w_{11}+x_2w_{21}+x_3w_{31}+x_4w_{41}+b_1,\\ o_2=x_1w_{12}+x_2w_{22}+x_3w_{32}+x_4w_{42}+b_2,\\ o_3=x_1w_{13}+x_2w_{23}+x_3w_{33}+x_4w_{43}+b_3. \tag 1
o1=x1w11+x2w21+x3w31+x4w41+b1,o2=x1w12+x2w22+x3w32+x4w42+b2,o3=x1w13+x2w23+x3w33+x4w43+b3.(1)
⽤神经⽹络图描绘了上⾯的计算。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回归的输出层也是⼀个全连接层。
softmax运算
既然分类问题需要得到离散的预测输出,⼀个简单的办法是将输出值 o i o_i oi当作预测类别是 i i i的置信度,并将值最大的输出所对应的类作为预测输出,即输出 arg max i o i \arg \max_i o_i argmaxioi。例如,如果 o 1 , o 2 , o 3 o_1, o_2, o_3 o1,o2,o3分别为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
^
=
s
o
f
t
m
a
x
(
o
1
,
o
2
,
o
3
)
(2)
\hat{y_1},\hat{y_2},\hat{y_3}={softmax}(o_1,o_2,o_3) \tag 2
y1^,y2^,y3^=softmax(o1,o2,o3)(2)
其中:
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
)
(3)
\hat{y_1}=\frac{\exp(o_1)}{\sum_{i=1}^{3} \exp(o_i)},\hat{y_2}=\frac{\exp(o_2)}{\sum_{i=1}^{3} \exp(o_i)},\hat{y_3}=\frac{\exp(o_3)}{\sum_{i=1}^{3} \exp(o_i)} \tag 3
y1^=∑i=13exp(oi)exp(o1),y2^=∑i=13exp(oi)exp(o2),y3^=∑i=13exp(oi)exp(o3)(3)
容易看出
y
1
^
+
y
2
^
+
y
3
^
=
1
\hat{y_1}+\hat{y_2}+\hat{y_3}=1
y1^+y2^+y3^=1且
0
≤
y
1
^
,
y
2
^
,
y
3
^
≤
1
0 \leq \hat{y_1},\hat{y_2},\hat{y_3} \leq 1
0≤y1^,y2^,y3^≤1,因此
y
1
^
,
y
2
^
,
y
3
^
\hat{y_1},\hat{y_2},\hat{y_3}
y1^,y2^,y3^是一个合法的概率分布。如果
y
2
^
=
0.8
\hat{y_2}=0.8
y2^=0.8,不管
y
1
^
\hat{y_1}
y1^和
y
3
^
\hat{y_3}
y3^的值是多少,我们都知道图像类别为猫的概率是80%:
arg
max
i
o
i
=
arg
max
i
y
i
^
(4)
\arg \max_io_i=\arg \max_i\hat{y_i} \tag 4
argimaxoi=argimaxyi^(4)
因此softmax运算不改变预测类别输出。
3. 单样本分类的矢量计算表达式
为了提高计算效率,我们可以将单样本分类通过矢量计算来表达。在上面的图像分类问题中,假设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
]
(5)
W=\left [ \begin{matrix} 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{matrix} \right ] ,b=\left [ \begin{matrix} b_{1} & b_{2} & b_{3} \end{matrix} \right ] \tag 5
W=
w11w21w31w41w12w22w32w42w13w23w33w43
,b=[b1b2b3](5)
设高和宽分别为2个像素的图像样本
i
i
i的特征为:
x
(
i
)
=
[
x
1
(
i
)
x
2
(
i
)
x
3
(
i
)
x
4
(
i
)
]
(6)
x^{(i)}=\left [ \begin{matrix} x_1^{(i)} & x_2^{(i)} & x_3^{(i)} & x_4^{(i)} \end{matrix} \right ] \tag 6
x(i)=[x1(i)x2(i)x3(i)x4(i)](6)
输出层的输出为:
o
(
i
)
=
[
o
1
(
i
)
o
2
(
i
)
o
3
(
i
)
]
(7)
o^{(i)}=\left [ \begin{matrix} o_1^{(i)} & o_2^{(i)} & o_3^{(i)} \end{matrix} \right ] \tag 7
o(i)=[o1(i)o2(i)o3(i)](7)
预测为狗、猫或鸡的概率分布为:
y
^
(
i
)
=
[
y
1
^
(
i
)
y
2
^
(
i
)
y
3
^
(
i
)
]
(8)
\hat{y}^{(i)}=\left [ \begin{matrix} \hat{y_1}^{(i)} & \hat{y_2}^{(i)} & \hat{y_3}^{(i)} \end{matrix} \right ] \tag 8
y^(i)=[y1^(i)y2^(i)y3^(i)](8)
softmax回归对样本
i
i
i分类的矢量计算表达式为:
o
(
i
)
=
x
(
i
)
W
+
b
,
y
^
(
i
)
=
s
o
f
t
m
a
x
(
o
(
i
)
(9)
o^{(i)}=x^{(i)}W+b, \\ \hat{y}^{(i)}=softmax(o^{(i)} \tag 9
o(i)=x(i)W+b,y^(i)=softmax(o(i)(9)
4. ⼩批量样本分类的矢量计算表达式
为了进⼀步提升计算效率,我们通常对小批量数据做⽮量计算。⼴义上讲,给定⼀个小批量样本,其批量大小为
n
n
n,输入个数(特征数)为
d
d
d,输出个数(类别数)为
q
q
q。设批量特征为
X
∈
R
n
×
d
X \in R^{n \times d}
X∈Rn×d。假设softmax回归的权重和偏差参数分别为
W
∈
R
d
×
q
W \in R^{d \times q}
W∈Rd×q和
b
∈
R
1
×
q
b \in R^{1 \times q}
b∈R1×q。softmax回归的矢量计算表达式为:
O
=
X
W
+
b
,
Y
^
=
s
o
f
t
m
a
x
(
O
)
(10)
O=XW+b, \\ \hat{Y}=softmax(O) \tag {10}
O=XW+b,Y^=softmax(O)(10)
其中的加法运算使⽤了⼴播机制,
O
O
O,
Y
^
∈
R
n
×
q
\hat{Y} \in R^{n \times q}
Y^∈Rn×q且这两个矩阵的第
i
i
i行分别为样本
i
i
i的输出
o
i
(
i
)
o_i^{(i)}
oi(i)和概率分布
y
^
(
i
)
\hat{y}^{(i)}
y^(i)
5. 交叉熵损失函数
对于样本 i i i,构造向量 y ( i ) ∈ R q \textbf{y}^{(i)} \in R^q y(i)∈Rq,使其第 y ( i ) y^{(i)} y(i)(样本 i i i类别的离散数值)个元素为1,其余为0。此时训练目标可以设为使预测概率分布 y ^ ( i ) \hat{\textbf{y}}^{(i)} y^(i)尽可能接近真实的标签概率分布 y ( i ) \textbf{y}^{(i)} y(i)。
交叉熵(cross entropy):
H
(
y
(
i
)
,
y
^
(
i
)
)
=
−
∑
j
=
1
q
y
j
(
i
)
log
y
^
j
(
i
)
(11)
H(\textbf{y}^{(i)},\hat{\textbf{y}}^{(i)})=-\sum_{j=1}^{q} y_j^{(i)} \log \hat{y}_j^{(i)} \tag {11}
H(y(i),y^(i))=−j=1∑qyj(i)logy^j(i)(11)
如果一个样本只有一个标签,于是:
H
(
y
(
i
)
,
y
^
(
i
)
)
=
−
log
y
^
y
(
i
)
(
i
)
(12)
H(\textbf{y}^{(i)},\hat{\textbf{y}}^{(i)})=-\log \hat{y}_{y^{(i)}}^{(i)} \tag {12}
H(y(i),y^(i))=−logy^y(i)(i)(12)
假设训练数据集的样本数为
n
n
n,交叉熵损失函数定义为:
l
(
Θ
)
=
1
n
∑
i
=
1
n
H
(
y
(
i
)
,
y
^
(
i
)
)
(13)
l(\Theta)=\frac{1}{n} \sum_{i=1}^{n} H(\textbf{y}^{(i)},\hat{\textbf{y}}^{(i)}) \tag {13}
l(Θ)=n1i=1∑nH(y(i),y^(i))(13)
其中
Θ
\Theta
Θ代表模型参数。如果每个样本只有一个标签,那么交叉熵损失可以简写成
l
(
Θ
)
=
−
(
1
/
n
)
∑
i
=
1
n
log
y
^
y
(
i
)
(
i
)
l(\Theta)=-(1/n)\sum_{i=1}^{n} \log \hat{y}_{y^{(i)}}^{(i)}
l(Θ)=−(1/n)∑i=1nlogy^y(i)(i)。
从另一个角度来说,最小化
l
(
Θ
)
l(\Theta)
l(Θ)等价于最大化
exp
(
−
n
l
(
Θ
)
)
=
∏
i
=
1
n
y
^
y
(
i
)
(
i
)
\exp(-nl(\Theta))=\prod_{i=1}^{n} \hat{y}_{y^{(i)}}^{(i)}
exp(−nl(Θ))=∏i=1ny^y(i)(i),即最小化交叉熵损失函数等价于最⼤化训练数据集所有标签类别的联合预测概率。
6. 模型预测及评价
使用准确率(accuracy)来评价模型的表现。它等于正确预测数量与总预测数量之⽐。