在分类问题中,直接使用输出层的输出有两个问题。一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。例如,刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果o1=o3=103o_1=o_3=10^3o1=o3=103,那么输出值10却又表示图像类别为猫的概率很低。另一方面,由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。
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,y^2,y^3=softmax(o1,o2,o3)
其中
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=∑i=13exp(oi)exp(o1),y^2=∑i=13exp(oi)exp(o2),y^3=∑i=13exp(oi)exp(o3).
容易看出y^1+y^2+y^3=1\hat{y}_1 + \hat{y}_2 + \hat{y}_3 = 1y^1+y^2+y^3=1且0≤y^1,y^2,y^3≤10 \leq \hat{y}_1, \hat{y}_2, \hat{y}_3 \leq 10≤y^1,y^2,y^3≤1,因此y^1,y^2,y^3\hat{y}_1, \hat{y}_2, \hat{y}_3y^1,y^2,y^3是一个合法的概率分布。这时候,如果y^2=0.8\hat{y}_2=0.8y^2=0.8,不管y^1\hat{y}_1y^1和y^3\hat{y}_3y^3的值是多少,我们都知道图像类别为猫的概率是80%。此外,我们注意到
argmaxioi=argmaxiy^i \underset{i}{\arg\max} o_i = \underset{i}{\arg\max} \hat{y}_i iargmaxoi=iargmaxy^i
因此softmax运算不改变预测类别输出。
具体计算过程:广义上讲,给定一个小批量样本,其批量大小为nnn,输入个数(特征数)为ddd,输出个数(类别数)为qqq。设批量特征为X∈Rn×d\boldsymbol{X} \in \mathbb{R}^{n \times d}X∈Rn×d。假设softmax回归的权重和偏差参数分别为W∈Rd×q\boldsymbol{W} \in \mathbb{R}^{d \times q}W∈Rd×q和b∈R1×q\boldsymbol{b} \in \mathbb{R}^{1 \times q}b∈R1×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} OY^=XW+b,=softmax(O),
对于样本iii,我们构造向量y(i)∈Rq\boldsymbol{y}^{(i)}\in \mathbb{R}^{q}y(i)∈Rq ,使其第y(i)y^{(i)}y(i)(样本iii类别的离散数值)个元素为1,其余为0。这样我们的训练目标可以设为使预测概率分布y^(i)\boldsymbol{\hat y}^{(i)}y^(i)尽可能接近真实的标签概率分布y(i)\boldsymbol{y}^{(i)}y(i)。
在分类问题中,交叉熵(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)},H(y(i),y^(i))=−j=1∑qyj(i)logy^j(i),
其中带下标的yj(i)y_j^{(i)}yj(i)是向量y(i)\boldsymbol y^{(i)}y(i)中非0即1的元素,需要注意将它与样本iii类别的离散数值,即不带下标的y(i)y^{(i)}y(i)区分。在上式中,我们知道向量y(i)\boldsymbol y^{(i)}y(i)中只有第y(i)y^{(i)}y(i)个元素yy(i)(i)y^{(i)}_{y^{(i)}}yy(i)(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)}H(y(i),y^(i))=−logy^y(i)(i)。也就是说,交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确。当然,遇到一个样本有多个标签时,例如图像里含有不止一个物体时,我们并不能做这一步简化。但即便对于这种情况,交叉熵同样只关心对图像中出现的物体类别的预测概率。
假设训练数据集的样本数为nnn,交叉熵损失函数定义为
ℓ(Θ)=1n∑i=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 ),ℓ(Θ)=n1i=1∑nH(y(i),y^(i)),
其中Θ\boldsymbol{\Theta}Θ代表模型参数。同样地,如果每个样本只有一个标签,那么交叉熵损失可以简写成ℓ(Θ)=−(1/n)∑i=1nlogy^y(i)(i)\ell(\boldsymbol{\Theta}) = -(1/n) \sum_{i=1}^n \log \hat y_{y^{(i)}}^{(i)}ℓ(Θ)=−(1/n)∑i=1nlogy^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)}exp(−nℓ(Θ))=∏i=1ny^y(i)(i),即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。
对于二项分布,交叉熵损失可作进一步简化,表示为:
loss=−ylog(y^)−(1−y)log(1−y^)
\text {loss}=-y \log (\hat{y})-(1-y) \log (1-\hat{y})
loss=−ylog(y^)−(1−y)log(1−y^)
Softmax函数将输出转换为概率分布,解决输出值不确定性和离散标签间的误差衡量问题。交叉熵损失是衡量分类问题中预测概率与真实标签间差距的常用方法,关注正确类别的预测概率。在训练时,最小化交叉熵损失等价于最大化联合预测概率。

9255

被折叠的 条评论
为什么被折叠?



