写在前面:
线性回归见前文: 线性回归与实现(三)
公式符号详见: 论文数学公式编辑
参考书:动手学深度学习
Softmax回归
1. 分类问题
在线性回归中, 我们的得到结果的是连续值。分类问题需要我们求得样本所属的类别,也就是离散值。Softmax回归看名字就知道它是回归算法。但是Softmax回归用于分类。
为什么回归算法做分类? 它是怎么做的?
它不直接求类别,而是求样本对应每个类别的概率,概率就是连续值。我们选定最大概率类别为其预测类别。即Softmax函数给出的输出向量为“各类别在给定 x \mathbf{x} x时的条件概率”。所以Softmax是回归算法,但是用于分类。
PS:这种计算概率的方式得到的是“软性”类别。直接得到类别的是“硬性”类别。
2. 网络架构
为了估算每个类别对应的概率,需采用多输出模型,每个类对应一个输出。假设有4个特征
x
x
x,3个类别
o
o
o。共需4 * 3 = 12个权重
w
w
w,3个标量来表示偏置
b
b
b。
o
1
=
x
1
w
11
+
x
2
w
12
+
x
3
w
13
+
x
4
w
14
+
b
1
,
o
2
=
x
1
w
21
+
x
2
w
22
+
x
3
w
23
+
x
4
w
24
+
b
2
o
3
=
x
1
w
31
+
x
2
w
32
+
x
3
w
33
+
x
4
w
34
+
b
3
.
(1)
\begin{gathered} o_{1} =x_1w_{11}+x_2w_{12}+x_3w_{13}+x_4w_{14}+b_1, \\ o_{2}=x_1w_{21}+x_2w_{22}+x_3w_{23}+x_4w_{24}+b_2 \\ o_{3}=x_1w_{31}+x_2w_{32}+x_3w_{33}+x_4w_{34}+b_3. \end{gathered} \tag{1}
o1=x1w11+x2w12+x3w13+x4w14+b1,o2=x1w21+x2w22+x3w23+x4w24+b2o3=x1w31+x2w32+x3w33+x4w34+b3.(1)
与线性回归一样,softmax回归也是一个单层神经网络。 由于计算每个输出 o i o_i oi取决于所有输入 x 1 , x 2 , x 3 x_1,x_2, x_3 x1,x2,x3, 所以softmax回归的输出层也是全连接层。向量形式表达为:
o
=
W
x
+
b
(2)
\mathbf{o}=\mathbf{Wx}+\mathbf{b}\tag{2}
o=Wx+b(2)
3. softmax运算
看了上面的网络架构,我们知道这不就是多输出的线性神经网络嘛。而我们文首就说了,我们要的是概率。线性网络不仅输出有可能为负值,而且加和也不为1。
Softmax运算目的就是得到类别概率,即把网络输出变为正值,而且加和为1,还可导(用于梯度下降)。算式如下:
y
^
=
s
o
f
t
m
a
x
(
o
)
其中
y
^
j
=
exp
(
o
j
)
∑
k
exp
(
o
k
)
(3)
\hat{\mathbf{y}}=\mathrm{softmax}(\mathbf{o})\quad\text{其中}\quad\hat{y}_j=\frac{\exp(o_j)}{\sum_k\exp(o_k)} \tag{3}
y^=softmax(o)其中y^j=∑kexp(ok)exp(oj)(3)
那么现在我们就得到了满足非负和一的输出:
∑ j y ^ j = 1 且 0 ≤ y ^ j ≤ 1 (4) \sum_{j} \hat{y}_j = 1 \quad 且 \quad 0 \le \hat{y}_j \le 1 \tag{4} j∑y^j=1且0≤y^j≤1(4)
因此, y ^ \hat{\mathbf{y}} y^可以视为一个正确的概率分布。
假设我们读取了一个批量的样本
X
\mathbf{X}
X,softmax回归的矢量计算表达式为:
O
=
X
W
+
b
,
Y
^
=
s
o
f
t
m
a
x
(
O
)
.
(5)
\begin{aligned}&\mathbf{O}=\mathbf{X}\mathbf{W}+\mathbf{b},\\&\hat{\mathbf{Y}}=\mathrm{softmax}(\mathbf{O}).\end{aligned} \tag{5}
O=XW+b,Y^=softmax(O).(5)
延续上面的假设:假设有4个特征
x
x
x,3个类别
o
o
o。5个样本。
4. 损失函数
在我们的例子中,标签 y y y将是一个三维向量 ( o 1 , o 2 , o 3 ) (o_1, o_2, o_3) (o1,o2,o3),正确类别的概率为1,其余为0。比如假设某样本正确类别为第一类,那么它的真实标签为 ( 1 , 0 , 0 ) (1, 0, 0) (1,0,0)。Softmax函数给出的输出向量为“各类别在给定 x \mathbf{x} x时的条件概率”,如 ( 0.7 , 0.1 , 0.2 ) (0.7, 0.1, 0.2) (0.7,0.1,0.2)。
我们可以衡量给定数据集时我们得到实际值的概率:
P
(
Y
∣
X
)
=
∏
i
=
1
n
P
(
y
(
i
)
∣
x
(
i
)
)
.
(6)
P(\mathbf{Y}\mid\mathbf{X})=\prod_{i=1}^nP(\mathbf{y}^{(i)}\mid\mathbf{x}^{(i)}). \tag{6}
P(Y∣X)=i=1∏nP(y(i)∣x(i)).(6)
根据最大似然估计,我们最大化
P
(
Y
∣
X
)
P(\mathbf{Y}\mid\mathbf{X})
P(Y∣X),相当于最小化负对数似然:
−
log
P
(
Y
∣
X
)
=
∑
i
=
1
n
−
log
P
(
y
(
i
)
∣
x
(
i
)
)
=
∑
i
=
1
n
l
(
y
(
i
)
,
y
^
(
i
)
)
,
(7)
-\log P(\mathbf{Y}\mid\mathbf{X})=\sum_{i=1}^n-\log P(\mathbf{y}^{(i)}\mid\mathbf{x}^{(i)})=\sum_{i=1}^nl(\mathbf{y}^{(i)},\hat{\mathbf{y}}^{(i)}),\tag{7}
−logP(Y∣X)=i=1∑n−logP(y(i)∣x(i))=i=1∑nl(y(i),y^(i)),(7)
将公式(3)带入上式,得:
l
(
y
,
y
^
)
=
−
∑
j
=
1
q
y
j
log
y
^
j
.
(8)
l(\mathbf{y},\hat{\mathbf{y}})=-\sum_{j=1}^qy_j\log\hat{y}_j.\tag{8}
l(y,y^)=−j=1∑qyjlogy^j.(8)
这个损失函数被为交叉熵损失函数。
从信息论上通俗的讲就是
y
,
y
^
\mathbf{y},\hat{\mathbf{y}}
y,y^越相近交叉熵越小,无疑是可以用作损失函数的。详见信息论。
实现
https://zh-v2.d2l.ai/chapter_linear-networks/softmax-regression-scratch.html
https://zh-v2.d2l.ai/chapter_linear-networks/softmax-regression-concise.html