第二部分 · 学习给文本分类

不止两个选项时,模型怎样分类?

先给每个类别打分,再用 softmax 把分数转换成概率。这样就能从好评、中评、差评等多个选项中做出判断。

如果答案不止两个,怎么办? Lec 5 · PDF pp. 20-22

评论除了正面、负面,还可能是中性的。一个词的词性也可能是名词、动词、形容词等。这些任务都不止两种答案,单靠二分类逻辑回归还不够。

多分类逻辑回归(multinomial logistic regression)把原来的模型扩展到 \(K\) 个可能的类别。这里每个输入只选一个答案,类别之间互斥,因此所有类别的概率要加起来等于 1:

\[ \sum_{c=1}^{K} P(y=c\mid x)=1 \]

如果对每个类别分别使用 sigmoid,各自得到一个概率,并不能保证总和为 1。我们改用 softmax 函数,把所有类别的分数一起转成一个概率分布。某个类别的分数提高,它分到的概率就会增加,其他类别的概率也会随之改变。

让每个类别都有自己的一组权重 Lec 5 · PDF pp. 25-27

各个类别看到的是同一份输入特征 \(x\),但可以对这些线索作出不同解释。类别 \(c\) 有自己的权重 \(w_c\) 和偏置 \(b_c\),得到分数 \(z_c=w_c^\top x+b_c\)。这种尚未转成概率的分数称为 logit。

把每个类别的权重排成一行,就得到矩阵 \(W\)。如果有 \(K\) 个类别、\(d\) 个特征,就需要 \(K\) 行、\(d\) 列。这里把输入和输出都写成列向量,于是整个计算可以合写为:

每个类别的权重放在矩阵的一行
\[ x\in\mathbb{R}^{d},\qquad W=\begin{bmatrix}w_1^\top\\ \vdots\\ w_K^\top\end{bmatrix}\in\mathbb{R}^{K\times d},\qquad b\in\mathbb{R}^{K} \] \[ z=Wx+b\in\mathbb{R}^{K},\qquad \hat y=\operatorname{softmax}(z)\in\mathbb{R}^{K} \]
符号维度里面存放什么
\(x\)\(d\times1\)一个输入的 \(d\) 个特征。
\(W\)\(K\times d\)每一行是一个类别的权重。
\(b,z,\hat y\)\(K\times1\)分别存放每个类别的偏置、分数和概率。

这种写法一共存储 \(Kd+K\) 个参数,也就是 \(Kd\) 个权重和 \(K\) 个偏置。例如,三个情感类别配上六个特征,\(W\) 的维度就是 \(3\times6\)。在这里的列向量约定下,写成 \(6\times3\) 就对不上了。

感叹号既可能表示赞赏,也可能表示不满

课件用 \(x_5=1\) 表示文档里有感叹号。这个特征对应的权重分别是:正面类别 \(3.5\)、负面类别 \(3.1\)、中性类别 \(-5.3\)。

这很好理解:感叹号既可能表达强烈赞赏,也可能表达强烈不满,而平静的中性陈述相对少用它。这些权重改变的是各类分数,它们本身不是概率。

用 softmax 把分数变成概率 Lec 5 · PDF pp. 22-25; Lec 6 · PDF pp. 4-6

计算分成两步:先对每个分数取指数,让结果都变成正数;再让每个结果除以它们的总和。这样就得到每个类别的概率:

类别 c 的预测概率
\[ \hat y_c=P(y=c\mid x;W,b)=\frac{\exp(z_c)}{\sum_{j=1}^{K}\exp(z_j)}=\frac{\exp(w_c^\top x+b_c)}{\sum_{j=1}^{K}\exp(w_j^\top x+b_j)} \]
  • \(\exp(z_c)\) 也就是 \(e^{z_c}\)。即使分数 \(z_c\) 为负,取指数后也为正。
  • 所有类别共用分母 \(\sum_j\exp(z_j)\),因此各类概率加起来等于 1。
  • 最后选择概率最大的类别:\(\hat c=\arg\max_c\hat y_c=\arg\max_c z_c\)。若出现并列,就按事先约定的一致规则选择。

只要分数有限且 \(K>1\),每个概率都严格在 0 和 1 之间。分数的排序不会改变:最高分仍对应最高概率,但最高分不会自动得到概率 1。

把课件中的六分类例子算一遍 Lec 5 · PDF p. 24

把六个类别从 1 编号到 6。下面第一行是原始分数,第二行对它们取指数,第三行求总和,最后一行再把各个指数值除以总和:

\[ z=[0.6,\;1.1,\;1.5,\;1.2,\;3.2,\;1.1] \] \[ \exp(z)\approx[1.8221,\;3.0042,\;4.4817,\;3.3201,\;24.5325,\;3.0042] \] \[ \sum_{j=1}^{6}\exp(z_j)\approx40.165 \] \[ \hat y\approx[0.0454,\;0.0748,\;0.1116,\;0.0827,\;0.6108,\;0.0748] \]

第 5 类的概率最大,为 \(24.5325/40.165\approx0.6108\),所以模型预测第 5 类。第 2 类和第 6 类分数一样,概率也就一样。显示的结果经过四舍五入,总和约为 1;舍入前的总和则等于 1。

先减去最大分数,计算会更稳定

指数值太大时,可能超出计算机能够表示的范围。一个不改变答案的办法是:先把每个分数都减去其中最大的分数。

令 \(m=\max_j z_j\),再计算 \(\hat y_c=\exp(z_c-m)/\sum_j\exp(z_j-m)\)。分子、分母中的同一个因子会约掉,因此概率不变,而最大的指数值现在只有 \(e^0=1\)。这个实用写法可以从课件公式直接推出;事实上,所有分数同时加减任意同一个常数,都不会改变结果。

看模型给正确答案分了多少概率 Lec 5 · PDF p. 28

训练时,先要标明哪个类别才是正确答案。独热标签(one-hot label)用一个向量 \(y\in\{0,1\}^{K}\) 来做这件事:正确类别 \(c\) 的位置填 1,即 \(y_c=1\),其他位置都填 0。预测向量 \(\hat y\) 则不同,里面装的是概率;分数有限时,这些概率都为正。

我们用交叉熵衡量预测好坏。正确类别得到的概率越小,惩罚越大。独热标签恰好可以从下面的求和中,只选出正确类别的对数概率:

一个训练样本的交叉熵
\[ L_{CE}(\hat y,y)=-\sum_{k=1}^{K}y_k\log\hat y_k=-\log\hat y_c \] \[ L_{CE}=-z_c+\log\left(\sum_{j=1}^{K}e^{z_j}\right) \]

其他项的标签为 0,所以都消失了。与二分类相同,最小化这个损失,就等于最大化给定输入后正确答案的概率。对于 \(N\) 个训练样本,我们最小化它们的平均损失,也可以加入正则化。

继续使用刚才的六分类结果

如果正确答案是第 5 类,标签就是 \(y=[0,0,0,0,1,0]\),损失为 \(L=-\log(0.6108)\approx0.493\)。如果正确答案其实是第 1 类,损失就变成 \(L=-\log(0.0454)\approx3.09\)。

模型的预测分布没有变,但真实答案分到的概率很小时,罚分就大得多。这里使用的是自然对数。

梯度仍然是在比较预测与真实答案

对上面的模型和损失求导,会得到熟悉的形式:每个类别的预测概率减去它的真实标签。再乘以某个输入特征,就是对应权重的梯度:

\[ \frac{\partial L}{\partial z_k}=\hat y_k-y_k,\qquad \frac{\partial L}{\partial W_{kj}}=(\hat y_k-y_k)x_j,\qquad \frac{\partial L}{\partial b_k}=\hat y_k-y_k \]

这些式子都可以从 softmax 和交叉熵推导出来。接着,梯度下降或小批量随机梯度下降就能据此更新参数,让损失降低。

只有两个类别时,就回到了 sigmoid

令 \(K=2\),两个类别的分数分别为 \(z_1\) 和 \(z_0\)。把类别 1 的概率式中的分子、分母都除以 \(e^{z_1}\),就会发现:结果恰好是对两个分数之差应用 sigmoid。

\[ P(y=1\mid x)=\frac{e^{z_1}}{e^{z_1}+e^{z_0}}=\frac{1}{1+e^{-(z_1-z_0)}}=\sigma(z_1-z_0) \]

所以,二分类模型只需要使用分数差 \(z_1-z_0=(w_1-w_0)^\top x+(b_1-b_0)\)。如果把参考分数设为 \(z_0=0\),就恢复成熟悉的 \(\sigma(w^\top x+b)\)。Softmax 只是把这个思路扩展到了多个候选类别。

这为什么会连接到词向量?

分类器要从固定的候选集合中选一个答案。如果把这个集合换成词表,每个词就成为一个类别,此时 \(K=|V|\)。输入可以是通过学习得到的词表示或语境表示,模型先给候选词打分,再用 softmax 为它们分配概率。

这里要分清两个角色:词向量(word embedding)用一组数表示一个词;softmax 的输出则表示各个候选词成为答案的概率。训练一个预测词的任务,就有机会学到有用的词表示。下一页的词向量与向量语义会解释,为什么一个词附近出现的其他词能提供词义线索。

这一页要记住什么
  • 每个类别都有自己的权重和分数,\(W\in\mathbb{R}^{K\times d}\),\(b\in\mathbb{R}^{K}\)。
  • Softmax 先取指数,再除以总和,把分数变成概率。
  • 使用独热标签时,交叉熵就是正确类别预测概率的 \(-\log\)。
  • 只有两个类别时,这等价于对分数差应用 sigmoid。
  • 从词表中预测一个词也是分类任务,可以用它来学习词的表示。

来源:第 5 讲 PDF 第 20–28 页介绍模型、计算例子、类别权重与损失;第 6 讲 PDF 第 4–6 页回顾 softmax。页码从 PDF 第一页起算,不采用幻灯片印刷的编号。稳定计算、梯度公式、sigmoid 推导以及与词向量的连接,是根据课件模型补充的解释。