回归是单连续数值的输出,而分类通常有多个输出,输出 \(O_i\) 是第 \(i\) 类的置信度。
对类别进行一位有效编码 \(y = [y_1, y_2, ..., y_n]^T\)(这种编码方式叫做 one-hot encoding,相比于直接编码成类别的序号,去除了类别之间的自然顺序)。
这样可以用线性的全连接层建模,然后用均方损失进行训练:
\[o = Wx + b \]初看起来可以通过直接判断没有规范化的输出 \(o\) 的大小来选取输出结果的,但这样存在一些问题:我们不能将输出直接视为概率,它们不满足概率公理(和为 1,且都是正数)。我们需要让输出满足概率公理,也希望能有一个适合于评估概率的目标函数来鼓励模型估计概率。
我们可以使用 Softmax 函数和交叉熵损失。
Softmax 函数能够将一个向量归一化到单位向量上面。将 \(y=softmax(o)\) 定义为:
\[y_i = \exp{o_i} / \sum_k{\exp{o_k}} \]交叉熵损失用来衡量两个概率的区别(这个公式本身是由最大似然估计导出的,详见书上):
\[H(p, q) = \sum_i{-p_i \log{q_i}} \]略,主要见 Jupyter Notebook 中的代码。