Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

4.8 多项逻辑回归中的学习

多项逻辑回归的损失函数把二元逻辑回归的损失从 2 类推广到 KK 类。回顾二元逻辑回归的交叉熵损失(式 4.19):

LCE(y^,y)=logp(yx)=[ylogy^+(1y)log(1y^)](4.37)L_{\mathrm{CE}}(\hat y,y)=-\log p(y\mid x)=-[y\log\hat y+(1-y)\log(1-\hat y)]\tag{4.37}

多项逻辑回归把式 4.37 中的两项——y=1y=1 时非零的一项和 y=0y=0 时非零的一项——推广为 KK 项。此时,y\mathbf yy^\hat{\mathbf y} 都表示向量。真实标签 y\mathbf yKK 个元素,每个元素对应一个类别;若正确类别为 cc,则 yc=1y_c=1,其余元素均为 0。分类器输出的估计向量 y^\hat{\mathbf y} 也有 KK 个元素,每个 y^k\hat y_k 表示估计概率 p(yk=1x)p(y_k=1\mid\mathbf x)

对单个样本 xx,损失函数是 KK 个输出类别的对数之和,每项以指示值 yky_k 加权(式 4.38)。它恰好等于正确类别 cc 的负对数概率(式 4.39):

LCE(y^,y)=k=1Kyklogy^k=logy^c,(c 为正确类别)=logp^(yc=1x)=logexp(wcx+bc)j=1Kexp(wjx+bj)(4.38–4.40)\begin{array}{l}L_{\mathrm{CE}}(\hat{\mathbf y},\mathbf y)=-\sum_{k=1}^K y_k\log\hat y_k\\=-\log\hat y_c,\quad(\text{$c$ 为正确类别})\\=-\log\hat p(y_c=1\mid\mathbf x)\\=-\log\frac{\exp(\mathbf w_c\cdot\mathbf x+b_c)}{\sum_{j=1}^K\exp(\mathbf w_j\cdot\mathbf x+b_j)}\end{array}\tag{4.38--4.40}

为什么式 4.38 会化为式 4.39?因为只有一个类别 cc 正确,向量 y\mathbf y 只在 k=ck=c 时取 1,即 yc=1y_c=1yj=0,jcy_j=0,\forall j\ne c。因此式 4.38 求和中除真实类别 cc 对应的项之外,其余各项均为 0。交叉熵损失便是正确类别输出概率的负对数,所以式 4.39 也称为负对数似然损失(negative log likelihood loss)。

进行梯度下降时,真正需要的是损失的梯度。单个样本的梯度与式 4.26 中二元逻辑回归的梯度 (y^y)x(\hat y-y)x 非常相似。考察其中一个权重:对每个类别 kk,输入 x\mathbf xii 个元素的权重为 wk,iw_{k,i}。损失对 wk,iw_{k,i} 的偏导数,就是类别 kk 的真实值(0 或 1)与分类器输出概率之差,再以输入值 xix_i 加权:

LCEwk,i=(yky^k)xi=(ykp(yk=1x))xi=(ykexp(wkx+bk)j=1Kexp(wjx+bj))xi(4.41)\begin{array}{ll}\frac{\partial L_{\mathrm{CE}}}{\partial w_{k,i}}&=-(y_k-\hat y_k)x_i\\&=-(y_k-p(y_k=1\mid x))x_i\\&=-\left(y_k-\frac{\exp(\mathbf w_k\cdot\mathbf x+b_k)}{\sum_{j=1}^K\exp(\mathbf w_j\cdot\mathbf x+b_j)}\right)x_i\end{array}\tag{4.41}