softmax回归
分类问题:
从一个图像分类问题开始。 假设每次输入是一个2×2的灰度图像。 我们可以用一个标量表示每个像素值,每个图像对应四个特征
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x1,x2,x3,x4。 此外,假设每个图像属于类别“猫”“鸡”和“狗”中的一个。
如何表示标签?
采用独热编码(one-hot encoding)。标签
y
y
y将是一个三维向量, 其中(1,0,0)对应于“猫”、(0,1,0)对应于“鸡”、(0,0,1)对应于“狗”
网络架构
为了估计所有可能类别的条件概率,需要一个有多个输出的模型,每个类别对应一个输出。 为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数(affine function)。 每个输出对应于它自己的仿射函数。 在我们的例子中,由于我们有4个特征和3个可能的输出类别, 我们将需要12个标量来表示权重(带下标的
w
w
w), 3个标量来表示偏置(带下标的
b
b
b)。 下面我们为每个输入计算三个未规范化的预测(logit):
o
1
,
o
2
,
o
3
o_1,o_2,o_3
o1,o2,o3
o
1
=
x
1
w
11
+
x
2
w
12
+
x
3
w
13
+
x
4
w
14
+
b
1
o_1=x_1w_{11}+x_2w_{12}+x_3w_{13}+x_4w_{14}+b_1
o1=x1w11+x2w12+x3w13+x4w14+b1
o
2
=
x
1
w
21
+
x
2
w
22
+
x
3
w
23
+
x
4
w
24
+
b
2
o_2=x_1w_{21}+x_2w_{22}+x_3w_{23}+x_4w_{24}+b_2
o2=x1w21+x2w22+x3w23+x4w24+b2
o
3
=
x
1
w
31
+
x
2
w
32
+
x
3
w
33
+
x
4
w
34
+
b
3
o_3=x_1w_{31}+x_2w_{32}+x_3w_{33}+x_4w_{34}+b_3
o3=x1w31+x2w32+x3w33+x4w34+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回归的输出层也是全连接层。
![[Pasted image 20230409205425.png]]
将上面的公式采用向量表示:
o
=
W
x
+
b
\mathbf{o}=\mathbf{Wx}+\mathbf{b}
o=Wx+b
d
i
m
(
o
)
=
1
∗
q
dim(o)=1*q
dim(o)=1∗q
d
i
m
(
W
)
=
q
∗
d
dim(W)=q*d
dim(W)=q∗d
d
i
m
(
x
)
=
d
∗
1
dim(x)=d*1
dim(x)=d∗1
d
i
m
(
b
)
=
q
∗
1
dim(b)=q*1
dim(b)=q∗1
对于批量样本,采用以下方式表示:
O
=
X
W
+
b
\mathbf{O}=\mathbf{XW}+\mathbf{b}
O=XW+b
对于各个向量的维度:(n个样本量,d个特征,q个分类)
d
i
m
(
O
)
=
n
∗
q
dim(\mathbf{O})=n*q
dim(O)=n∗q
d
i
m
(
W
)
=
d
∗
q
dim(W)=d*q
dim(W)=d∗q
d
i
m
(
X
)
=
n
∗
d
dim(\mathbf{X})=n*d
dim(X)=n∗d
d
i
m
(
b
)
=
1
∗
q
dim(b)=1*q
dim(b)=1∗q
![[capture-2023-04-09-21-34-55.jpg]]
全连接层的参数开销
对于任何具有
d
d
d个输入和
q
q
q个输出的全连接层, 参数开销为
O
O
O(
d
q
dq
dq),这个数字在实践中可能高得令人望而却步。 幸运的是,将
d
d
d个输入转换为
q
q
q个输出的成本可以减少到
O
O
O(
d
q
n
\frac{dq}{n}
ndq), 其中超参数
n
n
n可以由我们灵活指定,以在实际应用中平衡参数节约和模型有效性
(这部分暂时没搞懂)
softmax运算
为了得到预测结果,我们将设置一个阈值,如选择具有最大概率的标签。显然,我们希望模型的输出结果 y j ^ \hat{y_j} yj^( y j ^ \hat{y_j} yj^来自 o j ^ \hat{o_j} oj^)是类 j j j的概率,都是对于上面计算的未规范化的 o o o,可以发现
- o o o的总和不为1
- 可能存在
o
i
o_i
oi为负数
因此,衍生出了softmax函数
y ^ = s o f t m a x ( o ) \hat{y}=softmax(\mathbf{o}) y^=softmax(o)
y ^ j = exp ( o j ) ∑ k exp ( o k ) \hat{y}_j=\frac{\exp(o_j)}{\sum_k\exp(o_k)} y^j=∑kexp(ok)exp(oj)
根据函数,可以发现,通过对参数就 e e e的幂,让输出为非负,分母等于所有 o k o_k ok求幂后的总和,保证了输出的概率总和为1。显然,softmax运算不改变未规范化的 o o o之间的大小关系。因此
arg max j y ^ j = arg max j o ^ j \arg\max_j\hat{y}_j=\arg\max_j\hat{o}_j argjmaxy^j=argjmaxo^j
对于小批量样本:
O = X W + b \mathbf{O}=\mathbf{XW}+\mathbf{b} O=XW+b
Y ^ = s o f t m a x ( O ) \hat{\mathbf{Y}}=softmax(\mathbf{O}) Y^=softmax(O)
d i m ( Y ^ ) = n ∗ q dim(\hat{\mathbf{Y}})=n*q dim(Y^)=n∗q
损失函数(极大似然估计)
如果采用MSE计算损失:
模型1
预测 | 真实 | 是否正确 |
---|---|---|
0.3 0.3 0.4 | 0 0 1(猪) | 正确 |
0.3 0.4 0.4 | 0 1 0(狗) | 正确 |
0.1 0.2 0.7 | 1 0 0 (猫) | 错误 |
模型1对于样本1和样本2以非常微弱的优势判断正确,对于样本3的判断则彻底错误。
模型2:
预测 | 真实 | 是否正确 |
---|---|---|
0.1 0.2 0.7 | 0 0 1(猪) | 正确 |
0.1 0.7 0.2 | 0 1 0 (狗) | 正确 |
0.3 0.4 0.3 | 1 0 0 (猫) | 错误 |
模型2对于样本1和样本2判断非常准确,对于样本3判断错误,但是相对来说没有错得太离谱。
如果采用均方误差
模型1:
![[Pasted image 20230409221607.png]]
对所有样本的loss求平均:
![[Pasted image 20230409221617.png]]
模型2:
![[Pasted image 20230409221634.png]]
对所有样本的loss求平均:
![[Pasted image 20230409221641.png]]
我们发现,MSE能够判断出来模型2优于模型1,那为什么不采样这种损失函数呢?主要原因是在分类问题中,使用sigmoid/softmx得到概率,配合MSE损失函数时,采用梯度下降法进行学习时,会出现模型一开始训练时,学习速率非常慢的情况(资料来自https://www.zhihu.com/tardis/bd/art/35709485?source_id=1001)
因此,采用极大似然估计法,对于整个数据集
P
(
Y
∣
X
)
=
∏
i
=
1
n
P
(
y
i
∣
x
i
)
P(\mathbf{Y}|\mathbf{X})=\prod_{i=1}^nP(\mathbf{y}^i|\mathbf{x}^i)
P(Y∣X)=i=1∏nP(yi∣xi)
对于这个公式的理解:对于这个数据集
X
\mathbf{X}
X,含有n行的
x
i
\mathbf{x}^i
xi,对于每个样本,都有一个人脑中的分类结果
y
i
\mathbf{y}^i
yi,得到了整个样本集的分类结果
Y
\mathbf{Y}
Y,这个结果是我们期望得到的正确结果,但是对于一个模型而言,未必能得到如此准确的结果,因此,我们需要计算,在模型中,每个
x
i
\mathbf{x}^i
xi条件下得到
y
i
\mathbf{y}^i
yi的概率,对于整个样本集,就是对于
X
\mathbf{X}
X情况下,对得到正确结果
Y
\mathbf{Y}
Y的概率,如果概率越高,说明这个模型得到
Y
\mathbf{Y}
Y的概率越高,准确性越高
随后需要化简,根据极大似然估计法的思路,通过
log
\log
log的方式,将乘法化为加法:
−
log
P
(
Y
∣
X
)
=
−
∑
i
=
1
n
log
P
(
y
i
∣
x
i
)
=
∑
i
=
1
n
ℓ
(
y
(
i
)
,
y
(
i
)
^
)
-\log{P(\mathbf{Y}|\mathbf{X})}=-\sum_{i=1}^n\log{P(\mathbf{y}^i|\mathbf{x}^i)}=\sum_{i=1}^n\ell(y^{(i)},\hat{y^{(i)}})
−logP(Y∣X)=−i=1∑nlogP(yi∣xi)=i=1∑nℓ(y(i),y(i)^)
所以损失函数为:
ℓ
(
y
,
y
^
)
=
−
∑
j
=
1
q
y
j
log
y
^
j
\ell(y,\hat{y})=-\sum_{j=1}^qy_j\log{\hat{y}_j}
ℓ(y,y^)=−j=1∑qyjlogy^j
对于
y
j
y_j
yj,从
j
=
1
j=1
j=1到
q
q
q,仅存在一个
j
j
j能使得
y
j
y_j
yj为1,这个时候的
j
j
j就是人脑对应的分类结果,遍历整个求和过程,只有一项不为0,对于
y
^
j
\hat{y}_j
y^j,由于是概率,是一个小于1的数字,因此取对数后小于0
相当于
ℓ
(
y
,
y
^
)
=
−
y
j
log
y
^
j
\ell(y,\hat{y})=-y_j\log{\hat{y}_j}
ℓ(y,y^)=−yjlogy^j
这里的
y
j
=
1
y_j=1
yj=1
ℓ
(
y
,
y
^
)
=
−
log
y
^
j
\ell(y,\hat{y})=-\log{\hat{y}_j}
ℓ(y,y^)=−logy^j
接下来,将Loss对O求导:
由于O是一个矩阵,所以把它分为
o
1
,
o
2
,
.
.
.
,
o
n
o_1,o_2,...,o_n
o1,o2,...,on分开计算
为了方便表示,我们假设,分类的类别有两类,猫和狗,对于一个样本,它预测的未标准化的结果是
o
1
,
o
2
o_1,o_2
o1,o2,也就是在
o
1
,
o
2
o_1,o_2
o1,o2分别有一个数值,表示预测的结果,随后经过标准化,得到
y
^
1
,
y
^
2
\hat{y}_1,\hat{y}_2
y^1,y^2,对于该样本,我们假设它表示的是猫,即
y
1
=
1
,
y
2
=
0
y_1=1,y_2=0
y1=1,y2=0,接下来我们进行详细计算:
ℓ
(
y
,
y
^
)
=
−
log
y
^
1
\ell(y,\hat{y})=-\log{\hat{y}_1}
ℓ(y,y^)=−logy^1
y
^
1
=
exp
(
o
1
)
∑
k
exp
(
o
k
)
\hat{y}_1=\frac{\exp(o_1)}{\sum_k\exp(o_k)}
y^1=∑kexp(ok)exp(o1)
∂
ℓ
∂
o
1
=
∂
ℓ
∂
y
^
1
∂
y
^
1
∂
o
1
=
−
1
y
^
1
(
−
(
y
^
1
)
2
+
y
^
1
)
=
y
^
1
−
1
=
y
^
1
−
y
1
=
s
o
f
t
m
a
x
(
o
1
)
−
y
1
\frac{\partial\ell}{\partial{o}_1}=\frac{\partial\ell}{\partial{\hat{y}}_1}\frac{\partial{\hat{y}_1}}{\partial{o}_1}=-\frac{1}{\hat{y}_1}(-(\hat{y}_1)^2+\hat{y}_1)=\hat{y}_1-1=\hat{y}_1-y_1=softmax(o_1)-y_1
∂o1∂ℓ=∂y^1∂ℓ∂o1∂y^1=−y^11(−(y^1)2+y^1)=y^1−1=y^1−y1=softmax(o1)−y1
∂
ℓ
∂
o
2
=
∂
ℓ
∂
y
^
1
∂
y
^
1
∂
o
2
=
−
1
y
^
1
(
−
y
^
1
y
^
2
)
=
y
^
2
=
y
^
2
−
0
=
y
^
2
−
y
2
=
s
o
f
t
m
a
x
(
o
2
)
−
y
2
\frac{\partial\ell}{\partial{o}_2}=\frac{\partial\ell}{\partial{\hat{y}}_1}\frac{\partial{\hat{y}_1}}{\partial{o}_2}=-\frac{1}{\hat{y}_1}(-\hat{y}_1\hat{y}_2)=\hat{y}_2=\hat{y}_2-0=\hat{y}_2-y_2=softmax(o_2)-y_2
∂o2∂ℓ=∂y^1∂ℓ∂o2∂y^1=−y^11(−y^1y^2)=y^2=y^2−0=y^2−y2=softmax(o2)−y2
因此对于任意的
o
i
o_i
oi
∂
ℓ
∂
o
i
=
s
o
f
t
m
a
x
(
o
i
)
−
y
i
\frac{\partial\ell}{\partial{o}_i}=softmax(o_i)-y_i
∂oi∂ℓ=softmax(oi)−yi
我们分开计算了
o
o
o的求导,接下来,我们进行整合
O
=
[
o
1
o
2
]
\mathbf{O}=\left[ \begin{array}{} \mathbf{o}_1 & \mathbf{o}_2 \end{array} \right]
O=[o1o2]
∂
ℓ
∂
O
=
[
∂
ℓ
∂
o
1
∂
ℓ
∂
o
2
]
=
[
y
^
1
−
y
1
y
^
2
−
y
2
]
=
[
s
o
f
t
m
a
x
(
o
1
)
−
y
1
s
o
f
t
m
a
x
(
o
2
)
−
y
2
]
\frac{\partial\ell}{\partial{\mathbf{O}}}=\left[ \begin{array}{} \frac{\partial\ell}{\partial{\mathbf{o}_1}} & \frac{\partial\ell}{\partial{\mathbf{o}_2}} \end{array} \right]= \left[ \begin{array}{} \hat{y}_1-y_1 & \hat{y}_2-y_2 \end{array} \right]=\left[ \begin{array}{} softmax(o_1)-y_1 & softmax(o_2)-y_2 \end{array} \right]
∂O∂ℓ=[∂o1∂ℓ∂o2∂ℓ]=[y^1−y1y^2−y2]=[softmax(o1)−y1softmax(o2)−y2]