动手学习机器学习(Day3-1)

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)=1q
d i m ( W ) = q ∗ d dim(W)=q*d dim(W)=qd
d i m ( x ) = d ∗ 1 dim(x)=d*1 dim(x)=d1
d i m ( b ) = q ∗ 1 dim(b)=q*1 dim(b)=q1
对于批量样本,采用以下方式表示:
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)=nq
d i m ( W ) = d ∗ q dim(W)=d*q dim(W)=dq
d i m ( X ) = n ∗ d dim(\mathbf{X})=n*d dim(X)=nd
d i m ( b ) = 1 ∗ q dim(b)=1*q dim(b)=1q
![[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,可以发现

  1. o o o的总和不为1
  2. 可能存在 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^)=nq

损失函数(极大似然估计)

如果采用MSE计算损失:
模型1

预测真实是否正确
0.3 0.3 0.40 0 1(猪)正确
0.3 0.4 0.40 1 0(狗)正确
0.1 0.2 0.71 0 0 (猫)错误

模型1对于样本1和样本2以非常微弱的优势判断正确,对于样本3的判断则彻底错误。
模型2

预测真实是否正确
0.1 0.2 0.70 0 1(猪)正确
0.1 0.7 0.20 1 0 (狗)正确
0.3 0.4 0.31 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(YX)=i=1nP(yixi)

对于这个公式的理解:对于这个数据集 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(YX)=i=1nlogP(yixi)=i=1n(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=1qyjlogy^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^1o1y^1=y^11((y^1)2+y^1)=y^11=y^1y1=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^1o2y^1=y^11(y^1y^2)=y^2=y^20=y^2y2=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=[o1o2]=[y^1y1y^2y2]=[softmax(o1)y1softmax(o2)y2]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值