从数学推导看机器学习的激活函数与损失函数

关于回归任务和分类任务在不同函数上的选择

Posted by cloudingyu on March 22, 2026

引言

本文尝试从数学的角度,分析线性回归、二分类、多分类机器学习任务下,选择不同损失函数和激活函数的原因。

负对数似然

假设有一个参数为 $\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.\]

不同任务激活函数不同,本质是因为输出空间和概率模型不同。从反向传播角度看,正是这些激活函数与损失函数的配对,使得梯度形式统一、实现简洁。