引言
本文尝试从数学的角度,分析线性回归、二分类、多分类机器学习任务下,选择不同损失函数和激活函数的原因。
负对数似然
假设有一个参数为 $\theta$ 的模型。对于一组观测数据 $Y = {y_1, y_2, …, y_n}$,似然函数 $L(\theta)$ 表示的是在参数为 $\theta$ 的情况下,这组数据发生的概率。
根据独立同分布假设,总概率等于单样本概率的连乘:
\[L(\theta) = P(y_1, ..., y_n | \theta) = \prod_{i=1}^n P(y_i | \theta)\]似然越大,说明模型参数 $\theta$ 越契合真实数据,所以机器学习初步的任务是最大化似然。
概率 $P(y_i \mid \theta)$ 通常是很小的数(比如 $0.1$)。如果有过多的样本连乘,可能会导致数值下溢。同时,求和导数的求取难度远小于求乘积的导数。取对数可以把 $\prod$ 变成 $\sum$:
\[\ln L(\theta) = \ln\left[\prod_{i=1}^n P(y_i | \theta)\right]=\sum_{i=1}^n \ln P(y_i | \theta)\]由于 $\ln$ 函数的单调性,最大化 $L(\theta)$ 等价于最大化 $\ln L(\theta)$ 。又为了配合梯度下降算法,这一寻找等价于最小化 $-\ln L(\theta)$,即负对数似然($\mathrm{NLL}$)。
损失函数
回归任务
在回归任务中,预测值是连续的实数。记模型预测值为 $t=f(x)$,假设真实值 $y$ 是在该预测值基础上叠加一个服从高斯分布的随机噪声 $\epsilon$。即:
\[y = t + \epsilon, \quad \epsilon \sim \mathcal{N}(0, \sigma^2)\]给定 $x$,$y$ 的条件概率分布是一个以模型预测值 $t$ 为均值的高斯分布:
\[P(y|x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y - t)^2}{2\sigma^2}\right)\] \[\begin{aligned} -\ln P(y|x) =& - \ln \left[ \frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( -\frac{(y - t)^2}{2\sigma^2} \right)\right]\\ =& \frac{1}{2\sigma^2} (y - t)^2 -\ln\frac{1}{\sqrt{2\pi\sigma^2}} \end{aligned}\]在优化 $\theta$ 时,常数项和系数均不影响极值点。最终得到均方误差:
\[Loss_{MSE} = (y - t)^2\]二分类任务
在二分类任务中,输出 $y \in {0, 1}$,假设其服从伯努利分布。令模型的输出 $t$ 代表模型认为结果为 $1$ 的概率:
\[P(y=1 | x) = t \quad \mathrm{OR} \quad P(y=0 | x) = 1-t\]为了使得似然估计能更好体现模型对真实数据的契合性,得到如下似然函数
\[P(y|x) = t^y (1-t)^{1-y}\]取 $\mathrm{NLL}$ 之后得到二元交叉熵损失:
\[Loss_{BCE} =-\log \left[ t^y (1-t)^{1-y} \right]= -y \ln t - (1-y) \ln (1-t)\]多分类任务
多分类任务假设 $y$ 服从类别分布。若有 $K$ 个类别,输出的是一个概率向量 $t = [t_1,t_2,\cdots,t_K]^T$,其中 $t_k$ 代表属于第 $k$ 类的概率。
同上,得到似然函数
\[P(y|x) = \prod_{k=1}^K t_k^{y_k}\]取 $\mathrm{NLL}$ 之后得到交叉熵损失:
\[Loss_{CE} = -\ln \left( \prod_{k=1}^K t_k^{y_k} \right) = -\sum_{k=1}^K y_k \ln t_k\]激活函数
激活函数的选择并不是独立于损失函数和任务目标而存在的。更自然的理解顺序是先看输出需要满足什么约束,再看在该约束下反向传播会得到怎样的梯度形式。
回归任务
回归任务的目标值是连续实数,因此模型末层需要保留实数域上的自由表达能力,最自然的选择就是线性激活。设模型最后一层输出为
\[z = w^T x + b,\]并令
\[t = z.\]在使用带 $\frac{1}{2}$ 系数的均方误差
\[Loss = \frac{1}{2}(t-y)^2,\]时,根据链式法则有
\[\frac{\partial Loss}{\partial z} = \frac{\partial Loss}{\partial t}\cdot\frac{\partial t}{\partial z} = (t-y)\cdot 1 = t-y.\]也就是说,线性激活既满足回归输出范围的需求,也使末层梯度直接化为 $t-y$。
二分类任务
二分类任务需要输出可解释为“属于正类的概率”,因此输出应落在 $(0,1)$ 内,这正是 $\mathrm{Sigmoid}$ 的作用。设最后一层先产生 $\mathrm{logit}$ $z$,再经过 $\mathrm{Sigmoid}$:
\[t = \sigma(z) = \frac{1}{1+e^{-z}}.\]对应该任务的二元交叉熵损失为
\[Loss = -\big[y\ln t + (1-y)\ln(1-t)\big].\]先对 $t$ 求导可得
\[\frac{\partial Loss}{\partial t} = -\frac{y}{t} + \frac{1-y}{1-t} = \frac{t-y}{t(1-t)}.\]再由 $\mathrm{Sigmoid}$ 导数
\[\frac{\partial t}{\partial z} = t(1-t).\]二者链式相乘得到
\[\frac{\partial Loss}{\partial z} = \frac{\partial Loss}{\partial t}\cdot\frac{\partial t}{\partial z} = \frac{t-y}{t(1-t)}\cdot t(1-t) = t-y.\]因此,$\mathrm{Sigmoid}$ 在给出概率语义的同时,也与 $\mathrm{BCE}$ 配对出简洁的末层梯度 $t-y$。
多分类任务
多分类任务要求输出是一个合法的类别概率分布,即各分量非负且总和为 1,因此末层选择 $\mathrm{Softmax}$。设最后一层 $\mathrm{logits}$ 为 $z=[z_1,\cdots,z_K]^T$,其输出为
\[t_i = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}}.\]对应交叉熵损失
\[Loss = -\sum_{i=1}^K y_i\ln t_i.\]$\mathrm{Softmax}$ 导数可以分两种情况讨论。记
\[t_i=\frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}}.\]当 $i=k$ 时,有
\[\frac{\partial t_i}{\partial z_i} =\frac{e^{z_i}\left(\sum_{j=1}^K e^{z_j}\right)-e^{z_i}e^{z_i}}{\left(\sum_{j=1}^K e^{z_j}\right)^2} =\frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}}\left(1-\frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}}\right) =t_i(1-t_i).\]当 $i\neq k$ 时,有
\[\frac{\partial t_i}{\partial z_k} =\frac{0\cdot\left(\sum_{j=1}^K e^{z_j}\right)-e^{z_i}e^{z_k}}{\left(\sum_{j=1}^K e^{z_j}\right)^2} =-\frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}}\frac{e^{z_k}}{\sum_{j=1}^K e^{z_j}} =-t_i t_k.\]于是对任意第 $k$ 个 $\mathrm{logit}$,利用链式法则可得
\[\begin{aligned} \frac{\partial Loss}{\partial z_k} &= \sum_{i=1}^K \frac{\partial Loss}{\partial t_i}\frac{\partial t_i}{\partial z_k}\\ &=\sum_{i=1}^K\left(-\frac{y_i}{t_i}\right)\frac{\partial t_i}{\partial z_k}\\ &=\left(-\frac{y_k}{t_k}\right)t_k(1-t_k)+\sum_{i\neq k}\left(-\frac{y_i}{t_i}\right)(-t_i t_k)\\ &=-y_k(1-t_k)+\sum_{i\neq k}y_i t_k\\ &=-y_k+y_k t_k+t_k\sum_{i\neq k}y_i\\ &=-y_k+t_k\sum_{i=1}^K y_i. \end{aligned}\]由于 $\mathrm{one-hot}$ 满足 $\sum_{i=1}^K y_i=1$,故
\[\frac{\partial Loss}{\partial z_k}=t_k-y_k.\]写成向量形式即
\[\nabla_z Loss = t-y.\]可见,$\mathrm{Softmax}$ 不仅满足多分类分布约束,也在与交叉熵联用时给出统一的末层梯度形式 $t-y$。
统一视角
可以看到,三种任务在最后一层都得到同一个核心误差:
\[\frac{\partial Loss}{\partial z}=t-y.\]不同任务激活函数不同,本质是因为输出空间和概率模型不同。从反向传播角度看,正是这些激活函数与损失函数的配对,使得梯度形式统一、实现简洁。