【深度学习】— softmax回归、网络架构、softmax 运算、小批量样本的向量化、交叉熵
- 3.4 Softmax 回归
- 3.4.1 分类问题
- 3.4.2 网络架构
- 3.4.3 全连接层的参数开销
- 3.4.4 softmax 运算
- 3.4.5 小批量样本的向量化
- 3.4.6 损失函数
- 对数似然
- softmax 的导数
- 3.4.7 信息论基础
- 熵
- 信息量
- 重新审视交叉熵
- 3.4.8 模型预测和评估
- 3.4.9 ⼩结
3.4 Softmax 回归
回归可以用于预测“多少”的问题。例如预测房屋被售出的价格,或者棒球队可能获得的胜场数,又或者患者住院的天数。
事实上,我们也对分类问题感兴趣:不是问“多少”,而是问“哪一个”:
- 某个电子邮件是否属于垃圾邮件文件夹?
- 某个用户可能注册或不注册订阅服务?
- 某个图像描绘的是驴、狗、猫,还是鸡?
- 某人接下来最有可能看哪部电影?
通常,机器学习实践者用分类这个词来描述两个有微妙差别的问题:
- 我们只对样本的“硬性”类别感兴趣,即属于哪个类别。
- 我们希望得到“软性”类别,即得到属于每个类别的概率。
这两者的界限往往很模糊。其中的一个原因是:即使我们只关心硬类别,我们仍然使用软类别的模型。
3.4.1 分类问题
我们从一个图像分类问题开始。假设每次输入是一个 2 × 2 2 \times 2 2×2 的灰度图像。我们可以用一个标量表示每个像素值,每个图像对应四个特征 x 1 , x 2 , x 3 , x 4 x_1, x_2, x_3, x_4 x1,x2,x3,x4。此外,假设每个图像属于类别“猫”,“鸡”和“狗”中的一个。
接下来,我们要选择如何表示标签。我们有两个明显的选择:最直接的想法是选择 y ∈ { 1 , 2 , 3 } y \in \{1, 2, 3\} y∈{1,2,3},其中整数分别代表 {狗, 猫, 鸡}。这是在计算机上存储此类信息的有效方法。如果类别间有一些自然顺序,比如说我们试图预测 {婴儿, 儿童, 青少年, 青年人, 中年人, 老年人},那么将这个问题转变为回归问题,并且保留这种格式是有意义的。
但一般的分类问题并不与类别之间的自然顺序有关。幸运的是,统计学家很早以前就发明了一种表示分类数据的简单方法:独热编码(one-hot encoding)。独热编码是一个向量,它的分量和类别一样多。类别对应的分量设置为 1,其他所有分量设置为 0。在我们的例子中,标签 y y y 将是一个三维向量,其中 ( 1 , 0 , 0 ) (1, 0, 0) (1,0,0) 对应于“猫”、 ( 0 , 1 , 0 ) (0, 1, 0) (0,1,0) 对应于“鸡”、 ( 0 , 0 , 1 ) (0, 0, 1) (0,0,1) 对应于“狗”:
y ∈ { ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 0 , 0 , 1 ) } . y \in \{(1, 0, 0), (0, 1, 0), (0, 0, 1)\}. y∈{(1,0,0),(0,1,0),(0,0,1)}.
3.4.2 网络架构
为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数(affine function)。每个输出对应于它自己的仿射函数。在我们的例子中,由于我们有 4 个特征和 3 个可能的输出类别,我们将需要 12 个标量来表示权重(带下标的 w w w),3 个标量来表示偏置(带下标的 b b b)。下面我们为每个输入计算三个未规范化的预测(logit): o 1 , o 2 , o 3 o_1, o_2, o_3 o1,o2,o3。
o 1 = x 1 w 11 + x 2 w 12 + x 3 w 13 + x 4 w 14 + b 1 , o_1 = x_1 w_{11} + x_2 w_{12} + x_3 w_{13} + x_4 w_{14} + b_1, o1=x1w11+x2w12+x3w13+x4w14+b1,
o 2 = x 1 w 21 + x 2 w 22 + x 3 w 23 + x 4 w 24 + b 2 , o_2 = x_1 w_{21} + x_2 w_{22} + x_3 w_{23} + x_4 w_{24} + b_2, o2=x1w21+x2w22+x3w23+x4w24+b2,
o 3 = x 1 w 31 + x 2 w 32 + x 3 w 33 + x 4 w 34 + b 3 . o_3 = x_1 w_{31} + x_2 w_{32} + x_3 w_{33} + x_4 w_{34} + b_3. o3=x1w31+x2w32+x3w33+x4w34+b3.
我们可以用神经网络图(图 3.4.1)来描述这个计算过程。与线性回归一样,softmax 回归也是一个单层神经网络。由于计算每个输出 o 1 , o 2 , o 3 o_1, o_2, o_3 o1,o2,o3 取决于所有输入 x 1 , x 2 , x 3 , x 4 x_1, x_2, x_3, x_4 x1,x2,x3,x4,所以 softmax 回归的输出层也是全连接层。
图 3.4.1: softmax 回归是一种单层神经网络
为了更简洁地表达模型,我们仍然使用线性代数符号。通过向量形式表达为:
o = W x + b , \mathbf{o} =\mathbf{W}\mathbf{x} + \mathbf{b}, o=Wx+b,
这是一种更适合数学和编写代码的形式。由此,我们已经将所有权重放到一个 3 × 4 3 \times 4 3×4 矩阵中。对于给定数据样本的特征 x \mathbf{x} x,我们的输出是由权重与输入特征进行矩阵-向量乘法再加上偏置 b \mathbf{b} b 得到的。
3.4.3 全连接层的参数开销
正如我们将在后续章节中看到的,在深度学习中,全连接层无处不在。然⽽,顾名思义,全连接层是“完全”连接的,可能有很多可学习的参数。具体来说,对于任何具有 d d d 个输⼊和 q q q 个输出的全连接层,参数开销为 O ( d q ) O(dq) O(dq),这个数字在实践中可能⾼得令⼈望⽽却步。幸运的是,将 d d d 个输⼊转换为 q q q 个输出的成本可以减少到 O ( d q n ) O\left(\frac{dq}{n}\right) O(ndq),其中超参数 n n n 可以由我们灵活指定,以在实际应⽤中平衡参数节约和模型有效性 [Zhang et al., 2021]。
3.4.4 softmax 运算
现在我们将优化参数以最⼤化观测数据的概率。为了得到预测结果,我们将设置⼀个阈值,如选择具有最⼤概率的标签。我们希望模型的输出 y ^ j \hat{y}_j y^j 可以视为属于类 j j j 的概率,然后选择具有最⼤输出值的类别 argmax j y ^ j \text{argmax}_j \hat{y}_j argmaxjy^j 作为我们的预测。例如,如果 y ^ 1 \hat{y}_1 y^1、 y ^ 2 \hat{y}_2 y^2 和 y ^ 3 \hat{y}_3 y^3 分别为 0.1、0.8 和 0.1,那么我们预测的类别是 2,在我们的例⼦中代表“鸡”。
然而我们能否将未规范化的预测 o o o 直接视作我们感兴趣的输出呢?答案是否定的。因为将线性层的输出直接视为概率时存在⼀些问题:⼀⽅⾯,我们没有限制这些输出数字的总和为 1;另⼀⽅⾯,根据输⼊的不同,它们可以为负值。这些违反了 2.6 节中所说的概率基本公理。
要将输出视为概率,我们必须保证在任何数据上的输出都是⾮负的且总和为 1。此外,我们需要⼀个训练的⽬标函数,来激励模型精准地估计概率。例如,在分类器输出 0.5 的所有样本中,我们希望这些样本是刚好有⼀半实际上属于预测的类别。这个属性叫做校准(calibration)。
社会科学家邓肯·卢斯于 1959 年在选择模型(choice model)的理论基础上发明的 softmax 函数正是这样做的:softmax 函数能够将未规范化的预测变换为⾮负数并且总和为 1,同时让模型保持可导的性质。为了完成这⼀⽬标,我们⾸先对每个未规范化的预测求幂,这样可以确保输出⾮负。为了确保最终输出的概率值总和为 1,我们再让每个求幂后的结果除以它们的总和。如下式:
y ^ = softmax ( o ) 其中 y ^ j = exp ( o j ) ∑ k exp ( o k ) \hat{y} = \text{softmax}(o) \quad \text{其中} \quad \hat{y}_j = \frac{\exp(o_j)}{\sum_k \exp(o_k)} y^=softmax(o)其中y^j=∑kexp(ok)exp(oj)
(3.4.3)
这⾥,对于所有的 j j j 总有 0 ≤ y ^ j ≤ 1 0 \leq \hat{y}_j \leq 1 0≤y^j≤1。因此, y ^ \hat{y} y^ 可以视为⼀个正确的概率分布。softmax 运算不会改变未规范化的预测 o o o 之间的⼤⼩次序,只会确定分配给每个类别的概率。因此,在预测过程中,我们仍然可以⽤下式来选择最有可能的类别:
argmax j y ^ j = argmax j o j \text{argmax}_j \hat{y}_j = \text{argmax}_j o_j argmaxjy^j=argmaxjoj
(3.4.4)
尽管 softmax 是⼀个⾮线性函数,但 softmax 回归的输出仍然由输⼊特征的仿射变换决定。因此,softmax 回归是⼀个线性模型(linear model)。
3.4.5 小批量样本的向量化
为了提高计算效率并充分利用 GPU,我们通常会对小批量样本的数据执行向量计算。假设我们读取了一个批量的样本 X \mathbf{X} X,其中特征维度(输入数量)为 d d d,批量大小为 n n n。此外,假设我们在输出中有 q q q 个类别。那么小批量样本的特征矩阵为 X ∈ R n × d \mathbf{X} \in \mathbb{R}^{n \times d} X∈Rn×d,权重矩阵为 W ∈ R d × q \mathbf{W} \in \mathbb{R}^{d \times q} W∈Rd×q,偏置向量为 b ∈ R 1 × q \mathbf{b} \in \mathbb{R}^{1 \times q} b∈R1×q。softmax 回归的向量计算表达式为:
相对于一次处理一个样本,小批量样本的向量化计算加快了对 X W \mathbf{X}\mathbf{W} XW 的处理速度。在小批量处理中,每个样本是 X \mathbf{X} X 的一行。softmax 运算可以按行执行:对 O \mathbf{O} O 的每一行,先进行幂运算,再标准化。公式 (3.4.5) 中的 X W + b \mathbf{XW} + \mathbf{b} XW+b 使用了广播机制,最终得到的未规范化预测 O \mathbf{O} O 和输出概率 Y ^ \hat{\mathbf{Y}} Y^ 都是 n × q n \times q n×q 形状的矩阵。
3.4.6 损失函数
为了评估模型的预测效果,我们使用最大似然估计,这与线性回归中的方法类似。
对数似然
softmax 函数输出向量 y ^ \hat{\mathbf{y}} y^,可看作条件概率。假设数据集 { X , Y } \{\mathbf{X}, \mathbf{Y}\} {X,Y} 有 n n n 个样本,每个样本由特征向量 x ( i ) \mathbf{x}^{(i)} x(i) 和独热标签 y ( i ) \mathbf{y}^{(i)} y(i) 组成,模型预测的概率为:
根据最大似然估计,最小化负对数似然为:
其中,损失函数为交叉熵损失:
softmax 的导数
将公式 (3.4.3) 代入损失函数 (3.4.8),得到:
对于未规范化的预测 o j o_j oj,其导数为:
这个导数表示模型分配的概率与真实标签之间的差异,类似于回归中的误差梯度。
3.4.7 信息论基础
信息论(information theory)涉及编码、解码、传输以及高效处理信息或数据的过程。
熵
信息论的核心是量化数据中的信息量,这个数值称为分布 P P P 的熵(entropy),定义为:
信息论的基本定理之一指出,为了对从分布 P P P 中随机抽取的数据进行编码,我们至少需要 H [ P ] H[P] H[P] 个“纳特(nat)”来编码。纳特是以自然对数 e e e 为底的单位,与比特(bit)的区别在于比特使用的是以 2 为底的对数。1 个纳特大约等于 1.44 比特。
信息量
压缩与预测密切相关。假如我们可以轻易预测数据的下一个值,那么它就容易压缩。举例来说,如果数据流中的所有数据完全相同,它们是无聊且可预测的,因此无需传递额外信息,因为下一个数据是确定的。在这种情况下,事件的信息量为零。
然而,当事件不易预测时,信息量增加。克劳德·香农用公式 log 1 P ( j ) = − log P ( j ) \log \frac{1}{P(j)} = - \log P(j) logP(j)1=−logP(j) 来量化这种“惊异”程度。当一个事件的概率较低时,它的信息量更大。在公式 (3.4.11) 中定义的熵是当概率分布与数据生成过程匹配时,事件信息量的期望值。
重新审视交叉熵
如果我们将熵 H ( P ) H(P) H(P) 理解为“知道真实概率的人所感受到的惊异程度”,那么交叉熵是从分布 P P P 到 Q Q Q 的信息量,记为 H ( P , Q ) H(P, Q) H(P,Q)。它可以看作是“主观认为分布为 Q Q Q 的观察者,看到根据分布 P P P 生成的数据时的预期惊异”。当 P = Q P = Q P=Q 时,交叉熵达到最小值,等于熵 H ( P ) H(P) H(P)。
简而言之,交叉熵目标有两个方面:(i)最大化观测数据的似然;(ii)最小化传达标签所需的信息量。
3.4.8 模型预测和评估
在训练softmax回归模型后,给出任何样本特征,我们可以预测每个输出类别的概率。通常我们使⽤预测概率最⾼的类别作为输出类别。如果预测与实际类别(标签)⼀致,则预测是正确的。在接下来的实验中,我们将使⽤精度(accuracy)来评估模型的性能。精度等于正确预测数与预测总数之间的⽐率。
3.4.9 ⼩结
• softmax运算获取⼀个向量并将其映射为概率。
• softmax回归适⽤于分类问题,它使⽤了softmax运算中输出类别的概率分布。
• 交叉熵是⼀个衡量两个概率分布之间差异的很好的度量,它测量给定模型编码数据所需的⽐特数。