书接上回,机器学习或者深度学习的目标是拟合一个最适合输入与输出关系的函数。其中,线性回归是最简单的一种,它可以用来预测连续变量的输出。假设我们有一组输入 $x$ 和对应的输出 $y$,线性回归的目标是找到一条直线,使得 $y$ 与 $x$ 的关系可以用一条直线来近似。假设输入 $x$ 是一个 $n$ 维向量,输出 $y$ 是一个标量。线性回归的假设函数为:
$$
y = Wx + b
$$
其中 $W$ 是模型的参数矩阵, $b$ 对应截距。
线性回归的损失函数为:
$$
L = \frac{1}{2n} \sum_{i=1}^n (\hat{y_i} - y_i)^2
$$
其中 $n$ 是训练集的大小, $\hat{y_i}$ 和 $y_i$ 是第 $i$ 个训练样本的预测输出和真实输出。这个损失函数就是比较常用的均方差损失函数(Mean Squared Error,MSE)。在训练模型的过程中,我们需要优化模型的可学习参数 $W$ 和 $b$,使得损失函数最小。
我们在应用线性回归以及其他类型的神经网络的时候,有时候关心输出的数值,比如房价预测,有时候只关心分类,比如图片分类任务。在分类任务中,如果继续用线性回归的输出,就有点令人迷惑,而如果我把结果表示为概率,就清晰很多了。举个例子,我有一个由猫和狗的照片构成的数据集,如果用线性回归的输出,那么输出的数值可能是0.5这样的数值,不够直观。而如果用softmax回归的输出,用概率表示输出结果,比如 ${(0.2, 0.8)}$ 就可以表示这个图片是猫的概率为0.2,狗的概率为0.8,那么就清楚多了。
那么该如何表示输出的结果呢?如果我们规定猫的标签为0,狗的标签为1,那么一个输出结果可以写为 ${0}$ 或者 ${1}$ ,这对于二分类问题也许可以,但是如果是一百个类别的分类任务呢?并且这种方式还有一个更大的问题,我该如何把前面的矩阵映射成一个常数?显然这种方法就不太合适了。
所以我们需要一种更加通用的方法来表示输出的结果,也就是独热编码(one-hot encoding)。独热编码是一种将类别标签转换成向量的编码方法,它将每个类别都用一个只有一个元素为1,其他元素为0的向量来表示。举个例子,假设数据集中有三种动物,猫、狗、鸟,我输入了四组数据,那么输出结果的独热编码可以表示为:
$$
\begin{bmatrix}
1 & 0 & 0 & 1\\
0 & 1 & 0 & 0\\
0 & 0 & 1 & 0\\
\end{bmatrix}
$$
其中每列中的1就代表预测出的类别,我只需要看1所在的行对应的是什么类别就可以清楚地知道预测的结果是什么。并且,使用独热编码可以得到一个结果矩阵,十分复合直觉,可以方便地进行计算。
实际上,softmax回归也是一种线性回归,只是输入是上一层的输出,输出的结果数量等于类别的数量,并且输出结果不是一个常数,而是一个概率分布。softmax回归的假设函数为:
$$
o = Wx + b
$$
其中 $o$ 是输出的概率分布, $W$ 是模型的参数矩阵, $b$ 对应截距。
前文提到,softmax回归会得到一个概率分布,但是直接由线性输出作为softmax回归的输出可能会违背一些概率论的基本假设,比如概率的和为1,并且所有的概率值都在0到1之间。所以我们需要对输出的概率分布进行一些处理,将其映射到0到1之间,并且满足概率的和为1。这就需要用到softmax函数:
$$
softmax(x_i) = \frac{e^{x_i}}{\sum_{j = 1}^{k} e^{x_j}}
$$
其中 $x_i$ 是第 $i$ 个输入的线性输出, $k$ 是类别的数量。softmax函数将线性输出映射到0到1之间,并且满足概率的和为1。
这部分内容较难理解,需要概率论基础,如果感兴趣可以查看参考文献。
如果你听说了我明天当上了电子科技大学的校长,你一定会感到非常惊讶,因为这件事情发生的概率非常小,你也一定会想,为什么我一个菜鸡会当上校长,这背后发生了什么,也就是常说的这件事信息量好大。对此,克劳德·香农用 $-log P(i)$ 来描述一个事件$i$包含的信息量,其中 $P(i)$ 表示事件 $i$ 发生的概率。由上大学前学的数学知识可以知道,一个事件发生的概率越小,这个函数值就越大,也就是信息量越大。以上内容引出了信息论中的熵,它可以表示为
$$
H[P] = -\sum_{i=1}^n P(i)log_2P(i)
$$
其中 $P(i)$ 表示事件 $i$ 发生的概率。
假设一个数据经过softmax回归的输出是 $\hat{y}$ ,输入的特征向量是 $x$ ,真实的标签是 $y$ ,那么对于 $n$ 个样本中的第 $i$ 个,我们可以将预测值与实际值比较:
$$
P(X|Y)=\Pi_{i=1}^n P(\hat{y_i}|x_i)
$$
根据最大似然估计,我们最大化 $P(X|Y)$ ,相当于最小化负对数似然:
$$
-log P(X|Y)=-\sum_{i=1}^n -log P(\hat{y_i}|x_i)=\sum_{i=1}^n l(\hat{y_i},y_i)
$$
其中 $l(\hat{y_i},y_i)$ 表示损失函数,通常被称为交叉熵函数(Cross-Entropy Function)。交叉熵函数衡量了模型预测的分布与真实分布之间的差异,它是信息论中的概念。如果把熵 $H(P)$ 想象为“知道真实概率的人所经历的惊异程度”,那么什么是交叉熵? 交叉熵从 $P$ 到 $Q$ ,记为 $H(P,Q)$ 。 我们可以把交叉熵想象为“主观概率为 $Q$ 的观察者在看到根据概率 $P$ 生成的数据时的预期惊异”. 当 $P=Q$ 时,交叉熵达到最低。 在这种情况下,从 $P$ 到 $Q$ 的交叉熵是 $H(P, P)=H(P)$ 。简而言之,我们可以从两方面来考虑交叉熵分类目标:
- 最大化观测数据的似然
- 最小化传达标签所需的惊异