引言
本文尝试从数学的角度,分析线性回归、二分类、多分类机器学习任务下,选择不同损失函数和激活函数的原因。
负对数似然
假设有一个参数为 θ 的模型。对于一组观测数据 Y={y1,y2,...,yn},似然函数 L(θ) 表示的是在参数为 θ 的情况下,这组数据发生的概率。
根据独立同分布假设,总概率等于单样本概率的连乘:
L(θ)=P(y1,...,yn∣θ)=i=1∏nP(yi∣θ)
似然越大,说明模型参数 θ 越契合真实数据,所以机器学习初步的任务是最大化似然。
概率 P(yi∣θ) 通常是很小的数(比如 0.1)。如果有过多的样本连乘,可能会导致数值下溢。同时,求和导数的求取难度远小于求乘积的导数。取对数可以把 ∏ 变成 ∑:
lnL(θ)=ln[i=1∏nP(yi∣θ)]=i=1∑nlnP(yi∣θ)
由于 ln 函数的单调性,最大化 L(θ) 等价于最大化 lnL(θ) 。又为了配合梯度下降算法,这一寻找等价于最小化 −lnL(θ),即负对数似然(NLL)。
损失函数
回归任务
在回归任务中,预测值是连续的实数。记模型预测值为 t=f(x),假设真实值 y 是在该预测值基础上叠加一个服从高斯分布的随机噪声 ϵ。即:
y=t+ϵ,ϵ∼N(0,σ2)
给定 x,y 的条件概率分布是一个以模型预测值 t 为均值的高斯分布:
P(y∣x)=2πσ21exp(−2σ2(y−t)2)
−lnP(y∣x)==−ln[2πσ21exp(−2σ2(y−t)2)]2σ21(y−t)2−ln2πσ21
在优化 θ 时,常数项和系数均不影响极值点。最终得到均方误差:
LossMSE=(y−t)2
二分类任务
在二分类任务中,输出 y∈{0,1},假设其服从伯努利分布。令模型的输出 t 代表模型认为结果为 1 的概率:
P(y=1∣x)=tORP(y=0∣x)=1−t
为了使得似然估计能更好体现模型对真实数据的契合性,得到如下似然函数
P(y∣x)=ty(1−t)1−y
取 NLL 之后得到二元交叉熵损失:
LossBCE=−log[ty(1−t)1−y]=−ylnt−(1−y)ln(1−t)
多分类任务
多分类任务假设 y 服从类别分布。若有 K 个类别,输出的是一个概率向量 t=[t1,t2,⋯,tK]T,其中 tk 代表属于第 k 类的概率。
同上,得到似然函数
P(y∣x)=k=1∏Ktkyk
取 NLL 之后得到交叉熵损失:
LossCE=−ln(k=1∏Ktkyk)=−k=1∑Kyklntk
激活函数
激活函数的选择并不是独立于损失函数和任务目标而存在的。更自然的理解顺序是先看输出需要满足什么约束,再看在该约束下反向传播会得到怎样的梯度形式。
回归任务
回归任务的目标值是连续实数,因此模型末层需要保留实数域上的自由表达能力,最自然的选择就是线性激活。设模型最后一层输出为
z=wTx+b,
并令
t=z.
在使用带 21 系数的均方误差
Loss=21(t−y)2,
时,根据链式法则有
∂z∂Loss=∂t∂Loss⋅∂z∂t=(t−y)⋅1=t−y.
也就是说,线性激活既满足回归输出范围的需求,也使末层梯度直接化为 t−y。
二分类任务
二分类任务需要输出可解释为“属于正类的概率”,因此输出应落在 (0,1) 内,这正是 Sigmoid 的作用。设最后一层先产生 logit z,再经过 Sigmoid:
t=σ(z)=1+e−z1.
对应该任务的二元交叉熵损失为
Loss=−[ylnt+(1−y)ln(1−t)].
先对 t 求导可得
∂t∂Loss=−ty+1−t1−y=t(1−t)t−y.
再由 Sigmoid 导数
∂z∂t=t(1−t).
二者链式相乘得到
∂z∂Loss=∂t∂Loss⋅∂z∂t=t(1−t)t−y⋅t(1−t)=t−y.
因此,Sigmoid 在给出概率语义的同时,也与 BCE 配对出简洁的末层梯度 t−y。
多分类任务
多分类任务要求输出是一个合法的类别概率分布,即各分量非负且总和为 1,因此末层选择 Softmax。设最后一层 logits 为 z=[z1,⋯,zK]T,其输出为
ti=∑j=1Kezjezi.
对应交叉熵损失
Loss=−i=1∑Kyilnti.
Softmax 导数可以分两种情况讨论。记
ti=∑j=1Kezjezi.
当 i=k 时,有
∂zi∂ti=(∑j=1Kezj)2ezi(∑j=1Kezj)−eziezi=∑j=1Kezjezi(1−∑j=1Kezjezi)=ti(1−ti).
当 i=k 时,有
∂zk∂ti=(∑j=1Kezj)20⋅(∑j=1Kezj)−eziezk=−∑j=1Kezjezi∑j=1Kezjezk=−titk.
于是对任意第 k 个 logit,利用链式法则可得
∂zk∂Loss=i=1∑K∂ti∂Loss∂zk∂ti=i=1∑K(−tiyi)∂zk∂ti=(−tkyk)tk(1−tk)+i=k∑(−tiyi)(−titk)=−yk(1−tk)+i=k∑yitk=−yk+yktk+tki=k∑yi=−yk+tki=1∑Kyi.
由于 one−hot 满足 ∑i=1Kyi=1,故
∂zk∂Loss=tk−yk.
写成向量形式即
∇zLoss=t−y.
可见,Softmax 不仅满足多分类分布约束,也在与交叉熵联用时给出统一的末层梯度形式 t−y。
统一视角
可以看到,三种任务在最后一层都得到同一个核心误差:
∂z∂Loss=t−y.
不同任务激活函数不同,本质是因为输出空间和概率模型不同。从反向传播角度看,正是这些激活函数与损失函数的配对,使得梯度形式统一、实现简洁。