Skip to content

2.3 多类分类

在二元分类中,目标变量 y 的可能取值只有 {0,1};现在我们将二元分类进行拓展,让 y{1,2,,k}:即更多的类。我们该如何建模呢?

在这种情况下,p(yx;θ) 是多项分布。多项分布包含了 k 个参数 ϕ1,ϕ2,,ϕk,它们表示了出现各个结果的概率,并满足 i=1kϕk=1。我们将会构造一个模型,使得输出的 ϕ1,,ϕk 满足上述条件。

我们引入 k 组参数 θ1,,θk,每一个都是 Rd 中的向量。依照我们先前的经验,我们会使用 θ1Tx,,θkTx 来表示 ϕ1,,ϕk,但这种方法有两种问题:一是 θjTx 不一定落在区间 [0,1] 内部;二是 j=1nθjTx 不一定为 1。因此,我们不能使用这种简单的方法。一种解决思路是使用 softmax 函数将 (θ1Tx,,θkTx) 转化为概率向量,使得每一个分量都非负且总和为 1

定义函数 softmax:RkRk 如下

softmax(t1,,tk)=[exp(t1)j=1kexp(tj)exp(tk)j=1kexp(tj)].

其中,输入项向量 t 常常被称作逻辑特 (logits)。

下面,我们令 (t1,,tk)=(θ1Tx,,θkTx),这样我们就能够利用 softmax 函数,将线性向量转变为合法的概率向量。我们不妨将输出的概率向量作为条件概率 P(y=1x;θ),,P(y=kx;θ),然后我们就得到了下面的概率模型

[P(y=1x;θ)P(y=kx;θ)]=softmax(t1,,tk)=[exp(θ1Tx)j=1kexp(θjTx)exp(θkTx)j=1kexp(θjTx)].

为了记号的简洁,我们令 ϕi=exp(θiTx)j=1kexp(θjTx),于是有

P(y=ix;θ)=ϕi.

接下来我们对单个训练样本 (x,y) 计算负对数似然函数:

logp(yx,θ)=log(exp(ty)j=1kexp(tj))=log(exp(θyTx)j=1kexp(θjTx)).

损失函数,即整个训练集的负对数似然函数为

l(θ)=i=1nlog(exp(θy(i)Tx(i))j=1kexp(θjTx(i))).

我们定义交叉熵损失函数 lce:Rk×{1,,k}R0

lce((t1,,tk),y)=log(exp(θyTx)j=1kexp(θjTx)).

使用这个记号,我们可以把 l(θ) 改写为

l(θ)=i=1nlce((θ1Tx(i),,θkTx(i)),y(i)).

交叉熵损失函数的梯度表达式极其简洁。如果令 t=(t1,,tk),结合 ϕi=exp(ti)j=1kexp(tj),可推导出

tilce(t,y)=ϕiI{y=i},

其中 I{} 为指示函数,即

I{y=i}={1if y=i,0otherwise.

若将上面的梯度写成向量形式,则有

tlce(t,y)=ϕey,

其中 eyRk 是第 y 个自然基向量。由链式法则,我们有

θilce((θ1Tx,,θkTx),y)=j=1n(ϕi(j)I{y(i)=i})x(j),

其中 ϕi(j)=exp(θiTx(j))s=1kexp(θsTx(j)) 是模型预测 x(i) 样本的输出为 i 的概率。

在计算出上面梯度的基础上,我们可以利用梯度下降法,使得损失函数 l(θ) 最小化。