1 分类问题
深度学习从大方向上来说,就是回归预测和分类问题。
假设输入一个 2 ∗ 2 2*2 2∗2的灰度图像,可能属于“鸡、猫、狗”三个类别中的一个,那如何在计算机中表示标签呢?最常见的想法是 y = { 1 , 2 , 3 } y= \{1,2,3\} y={1,2,3},其中的数字分别代表 { 狗 , 猫 , 鸡 } \{ 狗,猫,鸡 \} {狗,猫,鸡}。
但是一般的分类问题并不与类别之间的自然顺序有关,所以会使用one-hot编码, 即类别对应的分量设置为1,其他所有分量设置为0。
在我们的例子中,标签将是一个三维向量, 其中 ( 0 , 1 , 0 ) (0,1,0) (0,1,0)对应于“猫”、 ( 0 , 0 , 1 ) (0,0,1) (0,0,1)对应于“鸡”、 ( 1 , 0 , 0 ) (1,0,0) (1,0,0)对应于“狗”。
2 网络架构
为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。
我们假设有4个特征和3个可能对的输出,所有有12个标量表示权重
w
w
w,3个标量表示偏置项
b
b
b,
o
o
o 是预测输出:
为了解决这种多分类问题,这里使用softmax网络:
softmax网络是一个有多个输入、多个输出的单层神经网络,我们使用向量表达式
o
=
W
x
+
b
o=Wx+b
o=Wx+b 简洁的表达模型
3 全连接层的参数开销
具体来说,对于任何具有 d d d 个输入和 q q q 个输出的全连接层, 参数开销为 O ( q d ) O(qd) O(qd) ,这个数字在实践中可能高得令人望而却步。
幸运的是,将 d d d 个输入转换为 q q q 个输出的成本可以减少到 O ( d q / n ) O(dq/n) O(dq/n), 其中超参数 n n n 可以由我们灵活指定。
4 softmax运算
我们希望模型最后输出的 数据 X 数据X 数据X 对应的 各个标签 各个标签 各个标签 的是一个概率,然后把最大的概率标签视为我们最后的预测结果。要将输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1。
此外,我们需要一个训练的目标函数,来激励模型精准地估计概率。 softmax函数会将每个元素转换为一个介于0和1之间的值,同时保证所有输出的概率总和为1,同时让模型保持可导的性质,公式如下:
P = e o i ∑ j = 1 k e o j P = \frac{e^{o_{i} } }{ {\textstyle \sum_{j=1}^{k}}e^{o_{j} } } P=∑j=1keojeoi
o o o是把输入的特征向量 x x x经过线性变换得到的向量,长度为 k k k。 P P P表示输入向量 x x x属于类别 i i i的概率
尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。 因此,softmax回归是一个线性模型。
5 小批量样本的矢量化
为了提高计算效率并充分利用GPU,我们通常会对小批量样本的数据执行矢量计算。
假设我们读取一个批量的样本 X X X,特征维度为 d d d,批量大小为 n n n,我们输出有 q q q 个类别。
所以小批量样本的特征为 X ∈ R n × d X \in \mathbb{R}^{n\times d} X∈Rn×d,权重为 W ∈ R d × q W \in \mathbb{R}^{d\times q} W∈Rd×q,偏置为 W ∈ R 1 × q W \in \mathbb{R}^{1\times q} W∈R1×q
所以softmax回归的矢量表达式为:
相对于一次处理一个样本, 小批量样本的矢量化使用了矩阵-向量乘法,可以充分利用GPU进行加速计算。
6 损失函数
在线性回归中,我们使用的是MSE作为损失函数,但之前那个例子是回归预测,这里是分类任务,所以这里使用最大似然估计,概念如下:
假设我们有一个概率模型 P ( x ∣ θ ) P(x∣θ) P(x∣θ),其中 x x x 是观测数据, θ θ θ 是模型的参数。我们的目标是找到参数 θ θ θ 的最优值,使得观测数据 x x x 出现的概率最大。
6.1 对数似然
softmax函数会输出一个向量 y ^ \hat{y} y^,即“输入的 x x x 对应的每个标签的条件概率”,例如 y ^ 1 = P ( y = 猫 ∣ X ) \hat{y}_{1}=P(y=猫 | X) y^1=P(y=猫∣X)。
假设整个数据集
{
X
,
Y
}
\{X,Y\}
{X,Y},其中索引为
i
i
i的样本由特征向量
x
(
i
)
x^{(i)}
x(i)和one-hot编码
y
(
i
)
y^{(i)}
y(i)组成,所以我们可以将估计值和真实值进行比较:
表示在给定整个数据集的特征
X
X
X 的情况下,标签
Y
Y
Y 的概率等于每个样本中在给定该样本特征
x
(
i
)
x^{(i)}
x(i) 的情况下标签
y
(
i
)
y^{(i)}
y(i) 的概率之积。
我们要最大化
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X) ,所以应该取负对数,因为取对数可以把累积转化为累加,同时因为对数函数是单调递增的,对概率取对数后再取负,最小化负对数似然就等价于最大化原始的概率,所以损失函数如下:
6.2 softmax及其导数
将softmax函数带入损失函数得到:
**注意:**因为是
y
y
y 独热标签向量,即除了对应真实类别的那个位置为
1
1
1,其余位置都为
0
0
0,所以
∑
j
=
1
q
y
i
=
1
\sum_{j=1}^{q}y_{i}=1
∑j=1qyi=1
然后对损失函数求
o
j
o_{j}
oj的导数(为了计算梯度),步骤如下:
即
换句话说,这个导数是我们softmax模型分配的概率与实际发生的情况(由独热标签向量表示)之间的差异。
6.3 交叉熵损失
最后输出的是 ( 0.1 , 0.2 , 0.7 ) (0.1,0.2,0.7) (0.1,0.2,0.7),而不是 ( 0 , 0 , 1 ) (0,0,1) (0,0,1),所以所有标签分布的预期损失值,称为交叉熵损失(cross-entropy loss),它是分类问题最常用的损失之一。
下面将通过介绍信息论来帮助理解交叉熵损失
7 信息论基础
信息论(Information Theory)是研究信息的量化、存储、传输和处理的数学理论,涉及编码、解码、发送以及尽可能简洁地处理信息或数据。
7.1 熵
信息论的核心思想是量化数据中的信息内容。 在信息论中,该数值被称为分布 P P P 的(entropy)。
对于一个随机变量 X X X ,其概率分布为 P ( X = j ) = p ( j ) P(X=j)=p(j) P(X=j)=p(j),即一个事件 X = j X=j X=j 的概率为 P ( j ) P(j) P(j),所以该事件的自信息量(表示一个事件发生所带来的信息量) 被定义为 I ( j ) = − l o g P ( j ) I(j)=-logP(j) I(j)=−logP(j)。
之所以这样定义,是因为概率 P ( j ) P(j) P(j) 越小, − l o g P ( j ) -logP(j) −logP(j) 的值就越大,符合低概率事件带来高信息量的直观理解。
所以熵
H
[
P
]
H[P]
H[P]就是所有可能发生的事件的自信息量的期望:
7.2 重新审视交叉熵
交叉熵(Cross-Entropy)是信息论中的一个重要概念,用于衡量两个概率分布之间的差异。
假设有两个概率分布
P
P
P 和
Q
Q
Q ,其中
P
P
P 表示真实分布,
Q
Q
Q 表示模型预测的分布,所以交叉熵分布
H
(
P
,
Q
)
H(P,Q)
H(P,Q) 定义为:
H
(
P
,
Q
)
=
∑
x
P
(
x
)
l
o
g
Q
(
x
)
H(P,Q)=\sum_{x}P(x)logQ(x)
H(P,Q)=x∑P(x)logQ(x)
x
x
x 表示所有可能的事件或者类别。
8 模型预测和评估
在训练softmax回归模型后,给出任何样本特征,我们可以预测每个输出类别的概率。 通常我们使用预测概率最高的类别作为输出类别。 如果预测与实际类别(标签)一致,则预测是正确的。 在接下来的实验中,我们将使用精度(accuracy)来评估模型的性能。 精度等于正确预测数与预测总数之间的比率。