第 5 章 损失函数(Loss functions)

返回目录

本章一句话:损失函数告诉我们“模型拟合得有多差”,而它并不是凭空设计的——只要把网络看成输出一个概率分布的参数,再用“最大似然”这把万能钥匙,就能为回归、二分类、多分类等各种任务自动推导出对应的损失(最小二乘、BCE、交叉熵都是它的特例)。

读这章的收获:掌握“构造损失函数的五步配方”;理解为什么回归用最小二乘(高斯分布)、二分类用 BCE(伯努利)、多分类用交叉熵(softmax);搞清“负对数似然”和“交叉熵”其实是同一回事。


本章速览

  • 核心转变:别再把网络看成“直接吐出答案 \(y\)”,而要看成“吐出一个概率分布 \(Pr(y\mid x)\) 的参数”。模型预测的是“对每个可能答案的信心”。
  • 损失从哪来:好的参数应让训练数据出现的概率最大(最大似然)。为了好算、为了变成“最小化”,对它取对数再加负号,就得到负对数似然——这就是损失函数。
  • 五步配方:选分布 → 让网络预测分布的参数 → 写出负对数似然当损失 → 训练最小化 → 推理时取分布的峰值。全章都在套这个配方。
  • 回归(例1):选高斯分布,网络预测均值 \(\mu\)。负对数似然化简后正好等于最小二乘——这解释了第 2 章为什么用平方误差。
  • 二分类(例2):选伯努利分布,网络输出过 sigmoid 压到 \([0,1]\) 当作概率 \(\lambda\)。损失是二元交叉熵(BCE)
  • 多分类(例3):选类别分布,\(K\) 个网络输出过 softmax 变成一组和为 1 的概率。损失是多分类交叉熵
  • 多输出:要同时预测多个目标,假设它们相互独立,似然连乘,取负对数后各项相加即可。
  • 交叉熵 = 负对数似然:从“拉近模型分布与数据经验分布的 KL 距离”这个角度推,结果和最大似然完全一样,两套说法殊途同归。

5.1 最大似然(Maximum likelihood)

前几章我们默认模型 \(f[x,\phi]\) 直接算出预测值 \(y\)。本章换一个视角:把模型看成在算一个条件概率分布 \(Pr(y\mid x)\)——给定输入 \(x\),模型对“输出 \(y\) 可能是多少”给出一整套信心分布。损失要做的事,就是鼓励每个训练输出 \(y_i\) 在“由它对应输入 \(x_i\) 算出的那个分布”下概率尽量大

配图直觉(回归任务):横轴是输入 \(x\),纵轴是输出 \(y\),橙色点是训练数据。对每一个 \(x\),模型不是给出一个点,而是给出一条竖直方向的概率曲线(比如在 \(x=2\) 和 \(x=7\) 处各有一条钟形曲线)。训练就是调整参数,让这些钟形曲线尽量“罩住”真实的橙色点。分类任务同理,只是把钟形曲线换成柱状图(对每个类别的概率)。

5.1.1 让模型输出一个分布

怎么让 \(f[x,\phi]\) 算出一个分布?办法很简单,分两步:

  1. 先在输出域 \(y\) 上选定一个带参数的分布 \(Pr(y\mid\theta)\);
  2. 再用网络去计算这个分布的参数 \(\theta\)。

举例:若输出是实数 \(y\in\mathbb{R}\),可以选一元正态(高斯)分布,它由均值 \(\mu\) 和方差 \(\sigma^2\) 决定,即 \(\theta=\{\mu,\sigma^2\}\)。可以让网络去预测均值 \(\mu\),而把方差 \(\sigma^2\) 暂时当成一个未知常数。

5.1.2 最大似然准则

现在网络对每个训练输入 \(x_i\) 算出一套分布参数 \(\theta_i=f[x_i,\phi]\)。我们希望每个观测到的 \(y_i\) 在其对应分布 \(Pr(y_i\mid\theta_i)\) 下概率都高。于是选这样的参数 \(\phi\):让所有 \(I\) 个训练样本的联合概率最大:

\[ \hat\phi=\underset{\phi}{\arg\max}\left[\prod_{i=1}^{I}Pr(y_i\mid x_i)\right]=\underset{\phi}{\arg\max}\left[\prod_{i=1}^{I}Pr(y_i\mid\theta_i)\right]=\underset{\phi}{\arg\max}\left[\prod_{i=1}^{I}Pr\big(y_i\mid f[x_i,\phi]\big)\right]. \]

这个连乘项叫做参数的似然(likelihood),所以上式称为最大似然准则。背后有两个隐含假设:① 每个数据点输出分布的形式相同;② 各样本的条件分布相互独立,因此联合似然才能写成连乘:

\[ Pr(y_1,\dots,y_I\mid x_1,\dots,x_I)=\prod_{i=1}^{I}Pr(y_i\mid x_i). \]

小注:同一个表达式 \(Pr(z\mid\psi)\),看作 \(z\) 的函数时是“概率分布”(对 \(z\) 求和为 1);看作 \(\psi\) 的函数时叫“似然”,它一般为 1。

5.1.3 最大化对数似然

直接用连乘很不实用:每个 \(Pr(y_i\mid\cdot)\) 都可能很小,几百上千项乘起来会小到浮点数表示不了。好在我们可以等价地最大化它的对数

\[ \hat\phi=\underset{\phi}{\arg\max}\left[\sum_{i=1}^{I}\log Pr\big(y_i\mid f[x_i,\phi]\big)\right]. \]

为什么等价?因为 \(\log\) 是单调递增函数:\(z>z'\) 就有 \(\log z>\log z'\)。所以让对数似然变大,原似然也跟着变大;两者的最大值出现在同一组参数 \(\hat\phi\) 上。而对数把“连乘”变成了“连加”,数值上就不会下溢了。

配图直觉:\(\log\) 曲线一路向上爬,它不会改变原函数峰值的“位置”,只改变“高度”——原来斜率为正的地方取对数后斜率仍为正,原来的最高点取对数后还是最高点。

5.1.4 最小化负对数似然

按惯例,模型拟合都写成“最小化损失”。把上面的最大化乘以 \(-1\),就变成最小化的负对数似然准则,这正是最终的损失函数 \(L[\phi]\):

\[ \hat\phi=\underset{\phi}{\arg\min}\left[-\sum_{i=1}^{I}\log Pr\big(y_i\mid f[x_i,\phi]\big)\right]=\underset{\phi}{\arg\min}\,L[\phi]. \]

记住这个核心式子:\(L[\phi]=-\sum_i\log Pr(y_i\mid f[x_i,\phi])\)——后面所有损失都从它推出来。

5.1.5 推理(Inference)

训练好之后,网络给出的是“一个分布”,但实际用时我们常想要一个确定的点估计 \(\hat y\),于是取分布的峰值(最可能的值):

\[ \hat y=\underset{y}{\arg\max}\;Pr\big(y\mid f[x,\hat\phi]\big). \]

通常能用分布参数把它写出来,比如一元正态的峰值就在均值 \(\mu\) 处。


5.2 构造损失函数的配方(Recipe for constructing loss functions)

把上一节的思路提炼成一套通用配方——给定训练数据 \(\{x_i,y_i\}\),按下面四步走,就能造出任意预测类型的损失:

  1. 选分布:在预测域 \(y\) 上选一个合适的带参数分布 \(Pr(y\mid\theta)\)。
  2. 接网络:让模型 \(f[x,\phi]\) 去预测这个分布的(一个或多个)参数,即 \(\theta=f[x,\phi]\)。
  3. 写损失并训练:用训练数据的负对数似然作为损失,找最小化它的参数:

\[ \hat\phi=\underset{\phi}{\arg\min}\,L[\phi]=\underset{\phi}{\arg\min}\left[-\sum_{i=1}^{I}\log Pr\big(y_i\mid f[x_i,\phi]\big)\right]. \]

  1. 推理:对新样本 \(x\),要么返回整个分布 \(Pr(y\mid f[x,\hat\phi])\),要么返回它的峰值点。

本章接下来就是反复套用这套配方,针对三种常见任务造损失。


5.3 例1:单变量回归(Univariate regression)

目标:从输入 \(x\) 预测一个标量实数 \(y\in\mathbb{R}\)。

选分布:输出是实数,选一元正态(高斯)分布,它定义在整个实轴上,参数为均值 \(\mu\) 和方差 \(\sigma^2\):

\[ Pr(y\mid\mu,\sigma^2)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp\!\left[-\frac{(y-\mu)^2}{2\sigma^2}\right]. \]

配图直觉:高斯就是那条“钟形曲线”。均值 \(\mu\) 决定峰在哪(左右平移),方差 \(\sigma^2\) 决定钟有多宽——方差越小越瘦高,越大越矮胖(因为曲线下面积恒为 1)。

接网络:让网络只预测均值 \(\mu=f[x,\phi]\),方差 \(\sigma^2\) 先当常数:

\[ Pr\big(y\mid f[x,\phi],\sigma^2\big)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp\!\left[-\frac{(y-f[x,\phi])^2}{2\sigma^2}\right]. \]

写损失:负对数似然为

\[ L[\phi]=-\sum_{i=1}^{I}\log Pr\big(y_i\mid f[x_i,\phi],\sigma^2\big). \]

5.3.1 最小二乘损失(Least squares)

把高斯代进去做点代数化简:先把对数拆开(\(\log\) 把乘积和指数都打散),扔掉不依赖 \(\phi\) 的常数项(那个 \(\log\frac{1}{\sqrt{2\pi\sigma^2}}\)),再扔掉正的常数缩放因子 \(\frac{1}{2\sigma^2}\)(它不改变最小值的位置),最后剩下:

\[ L[\phi]=\sum_{i=1}^{I}\big(y_i-f[x_i,\phi]\big)^2. \]

这正是第 2 章讲线性回归时用过的最小二乘损失。结论很漂亮:最小二乘并不是拍脑袋选的,它是“误差独立 + 服从均值为 \(f[x_i,\phi]\) 的正态分布”这两个假设的自然产物。

配图直觉:最小二乘是在最小化每个真实点 \(y_i\) 到回归线 \(f[x_i,\phi]\) 的竖直偏差的平方和(虚线)。拟合好时这些虚线很短、平方和小;拟合差时虚线很长、平方和大。从概率角度看:拟合好 → 数据点落在钟形曲线高处 → 概率大 → 负对数概率小;反之亦然。两种说法等价。

5.3.2 推理

网络预测的是均值 \(\mu=f[x,\phi]\)。正态分布的峰值就在均值处,所以点估计直接是 \(\hat y=f[x,\hat\phi]\)。

5.3.3 估计方差

注意最终的最小二乘式子里没有 \(\sigma^2\)。但没人拦着我们把 \(\sigma^2\) 也当成可学习参数,对 \(\phi\) 和 \(\sigma^2\) 一起最小化负对数似然。这样推理时:均值 \(\mu=f[x,\hat\phi]\) 给出最佳预测,而学到的 \(\hat\sigma^2\) 告诉我们这个预测的不确定性有多大。

5.3.4 异方差回归(Heteroscedastic regression)

上面假设方差处处相同(同方差,homoscedastic)。但很多时候不确定性会随输入变化异方差,heteroscedastic)。做法是让网络同时输出均值和方差:第一路输出 \(f_1[x,\phi]\) 预测均值,第二路输出 \(f_2[x,\phi]\) 预测方差。但方差必须为正,网络输出却可能是任意实数——于是给第二路套一个平方保证正:

\[ \mu=f_1[x,\phi],\qquad \sigma^2=f_2[x,\phi]^2. \]

代回负对数似然,就得到异方差回归的完整损失:

\[ \hat\phi=\underset{\phi}{\arg\min}\left[-\sum_{i=1}^{I}\left(\log\frac{1}{\sqrt{2\pi f_2[x_i,\phi]^2}}-\frac{(y_i-f_1[x_i,\phi])^2}{2f_2[x_i,\phi]^2}\right)\right]. \]

配图直觉:同方差模型的均值是分段折线,但上下的“误差带”(\(\pm2\) 标准差的灰色区域)宽度恒定;异方差模型的误差带宽度也变成了随 \(x\) 变化的折线——哪里数据吵闹,哪里带子就宽。


5.4 例2:二分类(Binary classification)

目标:把 \(x\) 判给两个类别之一,\(y\in\{0,1\}\)(此时 \(y\) 叫标签)。例如判断评论是好评(\(y=1\))还是差评(\(y=0\)),或 MRI 上有无肿瘤。

选分布:输出域是 \(\{0,1\}\),选伯努利分布。它只有一个参数 \(\lambda\in[0,1]\),表示“\(y=1\) 的概率”:

\[ Pr(y\mid\lambda)=(1-\lambda)^{1-y}\cdot\lambda^{y}\quad\Big(\text{即 } y=1 \text{ 时为 }\lambda,\ y=0 \text{ 时为 }1-\lambda\Big). \]

接网络:让网络预测 \(\lambda\)。但 \(\lambda\) 必须落在 \([0,1]\),网络输出却是任意实数——于是套一个把 \(\mathbb{R}\) 压到 \([0,1]\) 的函数,即逻辑 sigmoid

\[ \mathrm{sig}[z]=\frac{1}{1+\exp[-z]}. \]

配图直觉:sigmoid 是一条 S 形曲线。输入 0 映到 0.5;负的越多越靠近 0;正的越多越靠近 1。它把“任意大小的打分”平滑地翻译成“概率”。

于是 \(\lambda=\mathrm{sig}[f[x,\phi]]\),似然为 \(Pr(y\mid x)=(1-\lambda)^{1-y}\cdot\lambda^{y}\)。

写损失:取负对数似然,得到二元交叉熵损失(BCE)

\[ L[\phi]=\sum_{i=1}^{I}\Big[-(1-y_i)\log\big(1-\mathrm{sig}[f[x_i,\phi]]\big)-y_i\log\big(\mathrm{sig}[f[x_i,\phi]]\big)\Big]. \]

直观看:当 \(y_i=1\) 时只剩 \(-\log\lambda\)(逼模型把 \(\lambda\) 推高),当 \(y_i=0\) 时只剩 \(-\log(1-\lambda)\)(逼模型把 \(\lambda\) 压低)。

配图直觉:网络原始输出是任意实数的折线 → 过 sigmoid 压成 \([0,1]\) 的曲线 → 这条曲线就是“\(y=1\) 的概率 \(\lambda\)”,而 \(1-\lambda\) 是“\(y=0\) 的概率”。损失偏好这样的参数:在正例 \(y_i=1\) 处把 \(\lambda\) 顶高,在负例 \(y_i=0\) 处把 \(\lambda\) 压低。

推理:若 \(\lambda>0.5\) 判 \(y=1\),否则判 \(y=0\)。


5.5 例3:多分类(Multiclass classification)

目标:把 \(x\) 判给 \(K>2\) 个类别之一,\(y\in\{1,2,\dots,K\}\)。例如识别图片是 0–9 哪个数字(\(K=10\)),或预测下一个词是词表里的哪一个。

选分布:选类别分布(categorical),它有 \(K\) 个参数 \(\lambda_1,\dots,\lambda_K\),每个 \(\lambda_k=Pr(y=k)\)。约束是:每个 \(\lambda_k\in[0,1]\),且 \(\sum_k\lambda_k=1\)。

接网络:用一个有 \(K\) 个输出的网络去算这 \(K\) 个参数。但网络输出不会自动满足“非负且和为 1”,于是套上 softmax 函数,把任意长度为 \(K\) 的向量变成一组合法概率。其第 \(k\) 个分量为:

\[ \mathrm{softmax}_k[z]=\frac{\exp[z_k]}{\sum_{k'=1}^{K}\exp[z_{k'}]}. \]

分子的指数保证非负,分母(所有指数之和)保证和为 1。于是 \(Pr(y=k\mid x)=\mathrm{softmax}_k\big[f[x,\phi]\big]\)。

配图直觉(\(K=3\)):网络三路原始输出是三条可任意取值的折线 → 过 softmax 后被约束成三条非负、且任一竖直切片上三值相加为 1 的曲线。任取一个 \(x\),竖切一刀得到的三个高度,正好是一个类别分布的三根柱子。

写损失:负对数似然即多分类交叉熵损失

\[ L[\phi]=-\sum_{i=1}^{I}\log\Big[\mathrm{softmax}_{y_i}\big[f[x_i,\phi]\big]\Big]=-\sum_{i=1}^{I}\left(f_{y_i}[x_i,\phi]-\log\sum_{k'=1}^{K}\exp\big[f_{k'}[x_i,\phi]\big]\right), \]

其中 \(f_{y_i}\)、\(f_{k'}\) 分别是网络第 \(y_i\)、第 \(k'\) 个输出。

推理:取概率最大的类别 \(\hat y=\arg\max_k Pr\big(y=k\mid f[x,\hat\phi]\big)\)——也就是图里在该 \(x\) 处“最高的那条曲线”。

5.5.1 预测其他数据类型

本章聚焦回归与分类,但配方是通用的:想预测别的类型,只需换一个合适的分布再套五步即可。例如——计数 \(y\in\{0,1,2,\dots\}\) 用泊松分布;角度/方向 \(y\in(-\pi,\pi]\) 用冯·米塞斯(von Mises)分布;要更稳健(抗离群点)的回归用拉普拉斯/t 分布;多峰回归用高斯混合;预测 \([0,1]\) 间的比例用 beta 分布;排序用 Plackett-Luce。万变不离其宗。


5.6 多输出(Multiple outputs)

很多时候要用同一个模型同时做多个预测,目标 \(y\) 是个向量(如同时预测分子的熔点和沸点,或给图像每个像素分类)。最常见的做法是假设各个预测相互独立,把联合概率写成各分量的连乘:

\[ Pr\big(y\mid f[x,\phi]\big)=\prod_{d}Pr\big(y_d\mid f_d[x,\phi]\big), \]

其中 \(f_d[x,\phi]\) 是网络第 \(d\) 组输出,负责 \(y_d\) 那个分布的参数。例如预测多个连续量就给每个 \(y_d\) 配一个正态分布;预测多个离散量就给每个 \(y_d\) 配一个类别分布。

取负对数后,连乘自动变成求和——所以多输出的损失就是各单输出损失逐项相加

\[ L[\phi]=-\sum_{i=1}^{I}\log Pr\big(y_i\mid f[x_i,\phi]\big)=-\sum_{i=1}^{I}\sum_{d}\log Pr\big(y_{id}\mid f_d[x_i,\phi]\big). \]

同时预测不同类型(如风向 + 风速)也一样:风向用冯·米塞斯、风速用指数分布,独立假设让联合似然等于各自似然之积,取负对数后变成相加。


5.7 交叉熵损失(Cross-entropy loss)

前面所有损失都来自“最小化负对数似然”。但实践中常听到另一个名字——交叉熵损失。本节说明:交叉熵损失和负对数似然其实是同一个东西。

交叉熵的出发点是:找参数 \(\theta\),让模型分布 \(Pr(y\mid\theta)\) 尽量贴近数据的经验分布 \(q(y)\)。两个分布的“距离”用 KL 散度衡量:

\[ D_{KL}\big[q\,\|\,p\big]=\int q(z)\log q(z)\,dz-\int q(z)\log p(z)\,dz. \]

配图直觉:图 a 是训练样本的经验分布——一堆扎在数据点上的“尖针”(狄拉克 delta);图 b 是平滑的模型分布(比如一条高斯)。交叉熵法就是调模型参数,把这两个分布之间的 KL 距离拉到最小。

把经验分布写成数据点上的点质量之和 \(q(y)=\frac{1}{I}\sum_i\delta[y-y_i]\),代入最小化 KL:

\[ \hat\theta=\underset{\theta}{\arg\min}\left[-\int q(y)\log Pr(y\mid\theta)\,dy\right] \]

(第一项 \(\int q\log q\) 不含 \(\theta\),直接丢掉;剩下的第二项就叫交叉熵——它可理解为:在已知另一个分布所提供的信息后,某个分布中仍残留的不确定性量)。把 \(q(y)\) 的定义代进去,并扔掉常数 \(1/I\):

\[ \hat\theta=\underset{\theta}{\arg\min}\left[-\sum_{i=1}^{I}\log Pr(y_i\mid\theta)\right]. \]

最后把参数换成由网络计算 \(\theta=f[x_i,\phi]\):

\[ \hat\phi=\underset{\phi}{\arg\min}\left[-\sum_{i=1}^{I}\log Pr\big(y_i\mid f[x_i,\phi]\big)\right]. \]

正是 5.2 配方里的负对数似然准则。结论:从“最大化数据似然”推,和从“最小化模型分布与经验分布的距离”推,得到的损失完全一样——所以“负对数似然”和“交叉熵”只是同一件事的两种说法。这也解释了为什么前面 BCE 和多分类损失都叫“交叉熵”。


本章小结

  • 视角的转变是全章的关键:网络不直接预测 \(y\),而是预测概率分布 \(Pr(y\mid\theta)\) 的参数 \(\theta\)。这给了我们一套有原则的造损失方法。
  • 选参数 \(\phi\) 让数据最大似然 = 最小化负对数似然 \(L[\phi]=-\sum_i\log Pr(y_i\mid f[x_i,\phi])\)。这是本章唯一需要记住的母公式。
  • 最小二乘是“高斯 + 预测均值”的自然结果;还能进一步学方差(估计不确定性)、让方差随输入变化(异方差)。
  • 同一套配方用到分类:二分类 → 伯努利 + sigmoid → BCE多分类 → 类别分布 + softmax → 交叉熵
  • 多输出靠独立假设,把似然连乘、负对数后逐项相加。
  • 交叉熵 = 负对数似然:从 KL 散度角度推出的结果与最大似然一致。
  • 本章只解决“损失怎么定义(衡量拟合好坏)”;下一章讲“怎么真正找到最小化损失的参数”(模型训练)。

关键术语对照

中文 English 一句话含义
损失/代价函数 Loss / Cost function 一个数,衡量预测与真值的不匹配程度
最大似然 Maximum likelihood 选参数让训练数据出现的概率最大
似然 Likelihood 同一概率式看作参数的函数;一般不为 1
负对数似然 Negative log-likelihood 似然取对数加负号,作为要最小化的损失
正态/高斯分布 Normal / Gaussian 实数域的钟形分布,参数为均值 \(\mu\)、方差 \(\sigma^2\)
最小二乘 Least squares 平方误差和;高斯+预测均值的产物
同方差/异方差 Homoscedastic / Heteroscedastic 不确定性恒定 / 随输入变化
伯努利分布 Bernoulli \(\{0,1\}\) 上的分布,参数 \(\lambda\) 为 \(y=1\) 的概率
逻辑 sigmoid Logistic sigmoid 把 \(\mathbb{R}\) 压到 \([0,1]\) 的 S 形函数
二元交叉熵 Binary cross-entropy (BCE) 二分类的负对数似然损失
类别分布 Categorical distribution \(K\) 类上的离散分布,参数和为 1
Softmax Softmax 把 \(K\) 个实数变成非负且和为 1 的概率
交叉熵损失 Cross-entropy loss 拉近模型分布与经验分布的损失,等价于负对数似然
KL 散度 KL divergence 衡量两个概率分布之间的“距离”
推理 Inference 用训练好的模型对新输入给出点估计(取分布峰值)

返回目录 | 上一章:第 4 章 深层神经网络 | 下一章:第 6 章 模型拟合