深入学习深度学习——softmax概念

softmax的基本概念

  • 分类问题
    一个简单的图像分类问题,输入图像的高和宽均为2像素,色彩为灰度。
    图像中的4像素分别记为x1,x2,x3,x4x_1, x_2, x_3, x_4
    假设真实标签为狗、猫或者鸡,这些标签对应的离散值为y1,y2,y3y_1, y_2, y_3
    我们通常使用离散的数值来表示类别,例如y1=1,y2=2,y3=3y_1=1, y_2=2, y_3=3

  • 权重矢量
    o1=x1w11+x2w21+x3w31+x4w41+b1 \begin{aligned} o_1 &= x_1 w_{11} + x_2 w_{21} + x_3 w_{31} + x_4 w_{41} + b_1 \end{aligned}

o2=x1w12+x2w22+x3w32+x4w42+b2 \begin{aligned} o_2 &= x_1 w_{12} + x_2 w_{22} + x_3 w_{32} + x_4 w_{42} + b_2 \end{aligned}

o3=x1w13+x2w23+x3w33+x4w43+b3 \begin{aligned} o_3 &= x_1 w_{13} + x_2 w_{23} + x_3 w_{33} + x_4 w_{43} + b_3 \end{aligned}

  • 神经网络图
    下图用神经网络图描绘了上面的计算。softmax回归同线性回归一样,也是一个单层神经网络。由于每个输出o1,o2,o3o_1, o_2, o_3的计算都要依赖于所有的输入x1,x2,x3,x4x_1, x_2, x_3, x_4,softmax回归的输出层也是一个全连接层。

Image Name

softmax \begin{aligned}softmax回归是一个单层神经网络\end{aligned}

既然分类问题需要得到离散的预测输出,一个简单的办法是将输出值oio_i当作预测类别是ii的置信度,并将值最大的输出所对应的类作为预测输出,即输出 argmaxioi\underset{i}{\arg\max} o_i。例如,如果o1,o2,o3o_1,o_2,o_3分别为0.1,10,0.10.1,10,0.1,由于o2o_2最大,那么预测类别为2,其代表猫。

  • 输出问题
    直接使用输出层的输出有两个问题:
    1. 一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。例如,刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果o1=o3=103o_1=o_3=10^3,那么输出值10却又表示图像类别为猫的概率很低。
    2. 另一方面,由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。

softmax运算符(softmax operator)解决了以上两个问题。它通过下式将输出值变换成值为正且和为1的概率分布:

y^1,y^2,y^3=softmax(o1,o2,o3) \hat{y}_1, \hat{y}_2, \hat{y}_3 = \text{softmax}(o_1, o_2, o_3)

其中

y^1=exp(o1)i=13exp(oi),y^2=exp(o2)i=13exp(oi),y^3=exp(o3)i=13exp(oi). \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+y^2+y^3=1\hat{y}_1 + \hat{y}_2 + \hat{y}_3 = 10y^1,y^2,y^310 \leq \hat{y}_1, \hat{y}_2, \hat{y}_3 \leq 1,因此y^1,y^2,y^3\hat{y}_1, \hat{y}_2, \hat{y}_3是一个合法的概率分布。这时候,如果y^2=0.8\hat{y}_2=0.8,不管y^1\hat{y}_1y^3\hat{y}_3的值是多少,我们都知道图像类别为猫的概率是80%。此外,我们注意到

argmaxioi=argmaxiy^i \underset{i}{\arg\max} o_i = \underset{i}{\arg\max} \hat{y}_i

因此softmax运算不改变预测类别输出。

  • 计算效率
    • 单样本矢量计算表达式
      为了提高计算效率,我们可以将单样本分类通过矢量计算来表达。在上面的图像分类问题中,假设softmax回归的权重和偏差参数分别为

W=[w11w12w13w21w22w23w31w32w33w41w42w43],b=[b1b2b3], \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},

设高和宽分别为2个像素的图像样本ii的特征为

x(i)=[x1(i)x2(i)x3(i)x4(i)], \boldsymbol{x}^{(i)} = \begin{bmatrix}x_1^{(i)} & x_2^{(i)} & x_3^{(i)} & x_4^{(i)}\end{bmatrix},

输出层的输出为

o(i)=[o1(i)o2(i)o3(i)], \boldsymbol{o}^{(i)} = \begin{bmatrix}o_1^{(i)} & o_2^{(i)} & o_3^{(i)}\end{bmatrix},

预测为狗、猫或鸡的概率分布为

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}.

softmax回归对样本ii分类的矢量计算表达式为

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}

  • 小批量矢量计算表达式
    为了进一步提升计算效率,我们通常对小批量数据做矢量计算。广义上讲,给定一个小批量样本,其批量大小为nn,输入个数(特征数)为dd,输出个数(类别数)为qq。设批量特征为XRn×d\boldsymbol{X} \in \mathbb{R}^{n \times d}。假设softmax回归的权重和偏差参数分别为WRd×q\boldsymbol{W} \in \mathbb{R}^{d \times q}bR1×q\boldsymbol{b} \in \mathbb{R}^{1 \times q}。softmax回归的矢量计算表达式为

O=XW+b,Y^=softmax(O), \begin{aligned} \boldsymbol{O} &= \boldsymbol{X} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{Y}} &= \text{softmax}(\boldsymbol{O}), \end{aligned}

其中的加法运算使用了广播机制,O,Y^Rn×q\boldsymbol{O}, \boldsymbol{\hat{Y}} \in \mathbb{R}^{n \times q}且这两个矩阵的第ii行分别为样本ii的输出o(i)\boldsymbol{o}^{(i)}和概率分布y^(i)\boldsymbol{\hat{y}}^{(i)}

交叉熵损失函数

对于样本ii,我们构造向量y(i)Rq\boldsymbol{y}^{(i)}\in \mathbb{R}^{q} ,使其第y(i)y^{(i)}(样本ii类别的离散数值)个元素为1,其余为0。这样我们的训练目标可以设为使预测概率分布y^(i)\boldsymbol{\hat y}^{(i)}尽可能接近真实的标签概率分布y(i)\boldsymbol{y}^{(i)}

  • 平方损失估计

Loss=y^(i)y(i)2/2 \begin{aligned}Loss = |\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}|^2/2\end{aligned}

然而,想要预测分类结果正确,我们其实并不需要预测概率完全等于标签概率。例如,在图像分类的例子里,如果y(i)=3y^{(i)}=3,那么我们只需要y^3(i)\hat{y}^{(i)}_3比其他两个预测值y^1(i)\hat{y}^{(i)}_1y^2(i)\hat{y}^{(i)}_2大就行了。即使y^3(i)\hat{y}^{(i)}_3值为0.6,不管其他两个预测值为多少,类别预测均正确。而平方损失则过于严格,例如y^1(i)=y^2(i)=0.2\hat y^{(i)}_1=\hat y^{(i)}_2=0.2y^1(i)=0,y^2(i)=0.4\hat y^{(i)}_1=0, \hat y^{(i)}_2=0.4的损失要小很多,虽然两者都有同样正确的分类预测结果。

改善上述问题的一个方法是使用更适合衡量两个概率分布差异的测量函数。其中,交叉熵(cross entropy)是一个常用的衡量方法:

H(y(i),y^(i))=j=1qyj(i)logy^j(i), H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \log \hat y_j^{(i)},

其中带下标的yj(i)y_j^{(i)}是向量y(i)\boldsymbol y^{(i)}中非0即1的元素,需要注意将它与样本ii类别的离散数值,即不带下标的y(i)y^{(i)}区分。在上式中,我们知道向量y(i)\boldsymbol y^{(i)}中只有第y(i)y^{(i)}个元素y(i)y(i)y^{(i)}{y^{(i)}}为1,其余全为0,于是H(y(i),y^(i))=logy^y(i)(i)H(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}) = -\log \hat y_{y^{(i)}}^{(i)}。也就是说,交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确。当然,遇到一个样本有多个标签时,例如图像里含有不止一个物体时,我们并不能做这一步简化。但即便对于这种情况,交叉熵同样只关心对图像中出现的物体类别的预测概率。

假设训练数据集的样本数为nn,交叉熵损失函数定义为
(Θ)=1ni=1nH(y(i),y^(i)), \ell(\boldsymbol{\Theta}) = \frac{1}{n} \sum_{i=1}^n H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ),

其中Θ\boldsymbol{\Theta}代表模型参数。同样地,如果每个样本只有一个标签,那么交叉熵损失可以简写成(Θ)=(1/n)i=1nlogy^y(i)(i)\ell(\boldsymbol{\Theta}) = -(1/n) \sum_{i=1}^n \log \hat y_{y^{(i)}}^{(i)}。从另一个角度来看,我们知道最小化(Θ)\ell(\boldsymbol{\Theta})等价于最大化exp(n(Θ))=i=1ny^y(i)(i)\exp(-n\ell(\boldsymbol{\Theta}))=\prod_{i=1}^n \hat y_{y^{(i)}}^{(i)},即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。

softmax:
https://blog.csdn.net/boke14122621/article/details/104316090
多层感知机:
https://blog.csdn.net/boke14122621/article/details/104320813
语言模型及RNN:
https://blog.csdn.net/boke14122621/article/details/104321048

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章