对第 ii 个样本,输入xix_i,模型输出分数向量 s=f(xi;W)RCs=f(x_i;W)\in\mathbb{R}^C,其中 sis_i 是第 ii 类的分数。直觉上,预测准确则loss低,预测错误则loss高。

损失函数最常见的两种选择有Hinge loss和Softmax loss。

P1:Hinge loss

多分类 SVM 希望:正确类的分数 syis_{y_i} 比每个错误类分数 sjs_j 至少高一个固定间隔(margin)Δ\Delta

对单个样本的 loss 定义为:

Li=jyimax(0,  sjsyi+Δ)L_i = \sum_{j\neq y_i} \max\big(0,\; s_j - s_{y_i} + \Delta\big)

syisj+Δs_{y_i} \ge s_j + \Delta,这一项为 0(该错误类“达标了”)
syi<sj+Δs_{y_i} < s_j + \Delta,就按“差多少”线性惩罚

二分类里经常把标签写成 y{1,+1}y\in\{-1,+1\},预测打分为 tt(例如 t=wTxt=w^Tx),hinge loss 常写成:

(t,y)=max(0,1yt)\ell(t,y)=\max(0, 1-y\,t)

直观对应关系:分类正确且“置信度/间隔”足够大(yt1y\,t\ge 1)→ loss=0;分类错或置信度不够(yt<1y\,t<1)→ 线性惩罚

Hinge loss 示意图
一些实现里还会用squaredHinge=max(0,1yt)2squaredHinge=\max(0,1-yt)^2,对违反margin的样本惩罚更重。

P2:Softmax loss

Softmax把分数当作未归一化的对数概率(logits),并得到类别概率:

pj=esjkeskp_j = \frac{e^{s_j}}{\sum_k e^{s_k}}

Softmax 概率归一化示意图

直观来看是这样:先使用指数将得到的分数全部变为正数,再归一化为概率分布。将交叉熵作为损失,将softmax代入L=logPL=-\log P即可得到第ii项的损失函数。

Li=log(esyijesj)=syi+logjesjL_i = -\log\left(\frac{e^{s_{y_i}}}{\sum_j e^{s_j}}\right) = -s_{y_i} + \log\sum_j e^{s_j}

softmax 里有指数,esje^{s_j} 可能非常大导致溢出。常用的稳定技巧:

ssmaxjsjs \leftarrow s - \max_j s_j

因为对所有分数加同一个常数不会改变 softmax 的结果(分子分母同乘一个常数会约掉),但能显著提升数值稳定性。

P3:Hinge vs Softmax

两者在实践中都很常见,效果通常接近,但优化“性格”不同:

  1. Hinge / SVM 更“局部”:只关心是否超过 margin;一旦满足就不再推动分数继续分离
  2. Softmax 更“全局”:永远不会完全满意,总想让正确类概率更大、错误类更小

一个对比:
对于分数 [10,100,100][10,-100,-100][10,9,9][10,9,9],只要 margin 满足,SVM 可能都给 0 loss;Softmax 会认为 [10,9,9][10,9,9] “不够自信”,因为错误类也很接近,会产生更大 loss。

P4:信息论补充——熵和交叉熵

之前没有学过信息论,故让ai写了这部分,还是蛮清晰的。

自信息(Surprisal)与编码长度

信息论把一个事件 xx 发生时携带的信息量定义为自信息:

I(x)=logp(x)I(x) = -\log p(x)

它可以理解为:如果你用概率 p(x)p(x) 来做无损编码,那么事件越罕见(p(x)p(x) 越小),所需编码长度越长。

备注:对数底为 2 时单位是 bit;用自然对数时单位是 nat。深度学习里默认用自然对数更常见。

熵(Entropy)= 最小平均编码长度

若随机变量服从真实分布 PP,熵定义为“平均意义下的最小编码长度”(香农的核心观点):

H(P)=ExP[logP(x)]=xP(x)logP(x)H(P) = \mathbb{E}_{x\sim P}[-\log P(x)] = -\sum_x P(x)\log P(x)

直觉:分布越“平均”(不确定性越大),熵越大;若几乎总发生同一件事,熵就很小。

交叉熵(Cross-Entropy)= 用 Q 去编码来自 P 的数据

现实里我们通常不知道真实分布 PP,模型给出一个估计分布 QQ
如果你用 QQ 来编码来自 PP 的样本,平均编码长度就是交叉熵:

H(P,Q)=ExP[logQ(x)]=xP(x)logQ(x)H(P,Q)=\mathbb{E}_{x\sim P}[-\log Q(x)] = -\sum_x P(x)\log Q(x)

交叉熵与熵的关键关系:

H(P,Q)=H(P)+DKL(PQ)    H(P)H(P,Q)=H(P)+D_{KL}(P\|Q)\;\ge\;H(P)

因为 KL 散度 DKL0D_{KL}\ge 0,所以用“错误的分布” QQ 编码,平均长度只会更长;只有当 Q=PQ=P 时才达到最短。

为什么 Softmax loss 就是交叉熵

分类任务里,标签通常是 one-hot:真实分布 PP 把全部概率质量放在正确类别 yy 上(P(y)=1P(y)=1,其余为 0)。
这时:

  • H(P)=0H(P)=0(因为它完全确定)
  • 交叉熵退化为

H(P,Q)=logQ(y)H(P,Q) = -\log Q(y)

Q(y)Q(y) 正是 softmax 输出的正确类概率 pyp_{y},因此 Softmax 的交叉熵损失就是:

Li=logpyiL_i = -\log p_{y_i}

二分类交叉熵(BCE)常用形式

若二分类标签 y{0,1}y\in\{0,1\},模型预测正类概率为 pp,则

BCE(y,p)=[ylogp+(1y)log(1p)]\mathrm{BCE}(y,p)= -\big[y\log p + (1-y)\log(1-p)\big]

它同样是“真实分布(由标签给出)”与“模型分布”的交叉熵。

P5:最小化负对数似然——L=-logP的另一种理解

课上直接写 L=logPL=-\log P。当时没看懂,在《Understanding Deep Learning》里找到一段对数似然的证明:
假设数据独立同分布,训练集的条件似然可写成乘积

Pr(y1,,yIx1,,xI)=i=1IPr(yixi)\Pr(y_1,\dots,y_I\mid x_1,\dots,x_I)=\prod_{i=1}^{I}\Pr(y_i\mid x_i)

于是最大似然准则是最大化联合概率(似然):

ϕ^=argmaxϕi=1IPr(yif(xi,ϕ))\hat\phi = \arg\max_{\phi} \prod_{i=1}^{I} \Pr\big(y_i\mid f(x_i,\phi)\big)

为避免小概率连乘带来的数值下溢问题,对似然取对数;由于 log\log 单调递增,最优点不变:

ϕ^=argmaxϕlogi=1IPr(yif(xi,ϕ))=argmaxϕi=1IlogPr(yif(xi,ϕ))\hat\phi =\arg\max_{\phi}\log\prod_{i=1}^{I}\Pr\big(y_i\mid f(x_i,\phi)\big) =\arg\max_{\phi}\sum_{i=1}^{I}\log\Pr\big(y_i\mid f(x_i,\phi)\big)

把“最大化似然”改写成“最小化损失”,就得到负对数似然:

ϕ^=argminϕ[i=1IlogPr(yif(xi,ϕ))]argminϕL(ϕ)\hat\phi =\arg\min_{\phi}\left[-\sum_{i=1}^{I}\log\Pr\big(y_i\mid f(x_i,\phi)\big)\right] \equiv \arg\min_{\phi} L(\phi)

当使用softmax时,Pr(yif(xi,ϕ))\Pr(y_i\mid f(x_i,\phi)) 就是正确类的softmax概率。