目录
一、Softmax
Softmax 激活函数 常接在神经网络最后一层之后,以用于分类任务。相比于 Sigmoid 只能用于二分类,Softmax 还可用于多分类。
当然,这并不意味着 Softmax 总是优于 Sigmoid,还需要具体情况具体分析。例如,Softmax 在调整数值范围时,会影响数值间的相对关系,故有时各自独立约束数值范围的 Sigmoid 会更受欢迎。
通常,Softmax 用于所有 预测值 (logits) 转换为 预测概率值 (probs),并约束在有意义的 (0, 1] 范围之间,且概率值之和为 1。
例如,第 个类别的样本预测值 (logit)
,经 Softmax 得到的预测概率值 (prob)
为:
由于网络输出的预测值可能存在负值,故采用 指数处理,使得预测值总大于 0,既得到了符合实际意义的 (0, 1] 概率范围,又统一了量纲便于比较。
此外,由于是指数运算,往往也会因网络预测值过大造成 指数溢出 的情况 ,如 等就 指数爆炸 了。
因此,通常还需增加一个数值处理,即 令每个预测值先减去最大预测值,再进行指数运算。例如,第 个类别的预测值
经 Softmax 处理和去最大值处理后,得到的预测概率值
为:
为方便起见,后续说明仍使用未经减去最大预测值处理的 Softmax。
二、Cross Entropy Loss

在 单标签多分类 任务中,常用 交叉熵损失 (Cross Entropy Loss) 作为损失函数。
设在某个 分类问题下,模型对第
个样本的 预测值 (logits) 为
,经 Softmax 得到 预测概率值 (probs) 为
,其 GroundTruth / Label / Target 为
,则 第
个样本的交叉熵损失
为 (如上图例子所示):
注意,当使用 One-Hot 编码时可知,只有当前第 个样本的预测概率值
及其对应的真实标签为
,故该项损失为
;而其余项因
计算损失时均为 0。因此,单标签多分类任务下,每个样本仅属于一个类别,即只有一项损失不为 0。那么,第
个样本的交叉熵损失
实际可表示为:
因此,设 batch size = ,则 一个 batch 的交叉熵损失
可表示为:
三、Softmax Cross Entropy Loss
紧接上节,若将网络最后一个全连接层的 Softmax 操作单独提取出来,可得到针对 一个 batch 的预测值 (logit) (而非预测概率值) 的 Softmax Loss 为:
举个例子,设在某三分类问题下 ,对某一模型输入
的 batch。
其中样本 1 的模型预测值 ,
,那么该 batch 的 Softmax Loss 为:
实际操作中,通常会在网络最后一层接一个 Softmax,很多 paper 将 传统 Softmax loss 表示为如下形式:
其中, 和
是网络最后一个全连接层的第
个权重和偏置;
和
则是馈入的深层特征
的 GT / Target / Label
所对应的权重和偏置,简称 Target 权重 和 Target 偏置。
简言之,Softmax Loss 与 Softmax 和 Cross Entropy Loss 的关系是:将网络输出的预测值 (logit) 先用使用 Softmax 转换为预测概率值 (probs),再传入 Cross Entropy Loss 计算,就得到了最终的 Softmax Loss。
换言之,Softmax Cross Entropy Loss = Softmax + Cross Entropy Loss。