softmax回归
softmax回归
标签(空格分隔): 深度学习
回归估计一个连续值, 分类预测一个离散类别。
在上一节学习了线性回归问题,回归可以用于预测多少的问题。比如预测房屋被出售的价格,或者棒球队可能获得的胜利数量,又或者患者住院的天数。事实上,我们经常对分类问题感兴趣:不是问“多少”,而是问“哪一个”。
通常,机器学习实践者用分类这个词来描述两个有微妙差别的问题:
- 我们只对样本的硬性类别感兴趣,即属于哪个类别;
- 我们希望得到软性类别,即得到属于每个类别的概率;
这两者的界限往往很模糊,其中一个原因是,即使我们只关心硬类别,我们仍然使用软类别的模式。
分类问题
让我们从一个图像分类问题开始简单的尝试一下。每次输入的是一个\(2\times2\)的回复图像。我们可以用一个标量表示每个像素值,每个图像对应四个特征\(x_1,x_2,x_3,x_4\)。此外,让我们假设每个图像属于类别“猫”,“鸡”,“狗”中的一个。
接下来,我们要选择如歌表示标签。我们有两个明显的选择,也许最直接的想法是选择\(y\in\{1,2,3\}\),其中整数分别代表“猫”,“狗”,“鸡”。这是在计算机上存储此类信息的好方法。如果类别之间有一些自然顺序,比如说我们试图预测\(\{婴儿,儿童,青少年,青年人,中年人,老年人\}\),那么将这个问题转变为回归问题并保留这种格式是有意义的。
但是一般的分类问题并不与类别之间的自然顺序有关。幸运的是统计学家很早之前就发明了一种表示分类数据的简单方法:独热编码(one-hot encoding)。独热编码是一个向量,他的分量和类别一样多。类别对应分量的设置为1,其他所有分量设置为0.在我们的例子中,标签\(y\)将是一个三维向量,其中\((1,0,0)\)对应“猫”,\((0,1,0)\)对应“鸡”,\((0,0,1)\)对应于“狗”:$$y\in{(1,0,0),(0,1,0),(0,0,1)}\tag1$$
为了顾及所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数。每个输出对应于他自己的仿射函数。在我们的例子中,由于我们有4个特征和3个可能的输出类别,我们需要12个标量来表示权重(带下标的\(\omega\)),3个标量来表示偏置(带下标的\(b\))。下面我们为每个输入计算三个未归一化的预测(logits):\(o_1,o_2和o_3\)。
和线性回归一样,softmax回归也是一个单层神经网络。由于计算每个输出\(o_1,o_2和o_3\)取决于所有的\(x_1,x_2,x_3和x_4\),所以softmax回归的输出层也是全连接层。为了简洁的表达模型,我们仍然使用线性代数符号。通过向量形式表达为\(o=Wx+b\),这是一种更适合数学和编写代码的形式。我们已经将所有权重放到一个\(3\times4\)的矩阵上。对于给定数据样本的特征x,我们的输出是由权重与输入特征进行矩阵-向量乘法再加上偏置\(b\)得到的。具体来说,对于任何具有\(d\)个输入和\(q\)个输出的全连接层,参数开销为\(O(dp)\),在时间当中可能搞得令人望而却步。幸运的是,将\(d\)个输入转换为\(q\)个输出的成本可以减少到\(O(\frac{dp}{n})\),其中超参数\(n\)可以由我们灵活确定,以在实际应用中平衡参数节约和模型有效性。
softmax运算
在这里要采取的主要方法是将模型的输出视为概率,我们将优化参数以最大化观测数据的概率。为了得到预测结果,我们将设置一个阈值,如选择具有最大概率的标签。
我们希望模型的输出\(\hat{y}_j\)可以视为属于类\(j\)的概率。然后我们可以选择具有最大输出值的类别\(argmax_jy_j\)作为我们的预测。例如,如果\(\hat{y}_1,\hat{y}_2和\hat{y}_3\)分别为\(0.1,0.8,0.1\),那么我们预测的类别是2,在我们的例子中代表“鸡”。
如果将未归一化的预测直接视作我们感兴趣的输出,会产生一些问题:一方面,没有限制这些数字的总和为1.另一方面根据输入的不同他们可以为负值。
要将输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1。此外,我们需要一个训练目标,来鼓励模型精确的估计概率。在分类器输出\(0.5\)的所有样本中,我们希望这些样本有一半实际上属于预测的类。
社会科学家邓肯·鲁斯于1959年在选择模型的背景下发明的softmax函数正式这样做的。为了将未归一化的预测变换为非负并且总和为1,同时要求模型保持可到。我们首先对每个未归一化的预测求幂,这样可以确保输出非负。为了确保最终输出的总和为1,我们在对每个求幂后的结果除以他们的总和:
这样的话所有的概率都是非负且总和为1,并且不会改变概率大小的顺序。
小批量样本的矢量化
为了提高计算效率并且充分利用GPU,我们通常会针对小批量数据执行矢量计算。假设我们读取了一个小批量的样本\(X\),其中特征维度(输入数量)为\(d\),批量大小为\(n\)。此外,假设输出中有\(q\)个类别。那么该批量的特征为\(X\in\mathbb{R}^{n\times d}\),权重为\(W\in\mathbb{R}^{d\times{q}}\),偏置为\(b\in\mathbb{R}^{q\times{1}}\)。softmax回归的矢量计算表达式为:
相对于一次处理一个样本,小批量样本的矢量化加快了\(X\times W\)的矩阵-向量乘法。由于X中的每一行代表一个数据样本,所以softmax可以按行执行:对于\(O\)的每一行,我们先对所有项进行幂运算,然后通过求和对他们进行标准化。小批量的未归一化的预测\(O\)和输出概率都是\(n\times q\)的矩阵。
损失函数
我们需要一个损失函数来度量预测概率的结果。我们将依赖最大似然估计,这与我们在为线性回归中的均方误差目标提供概率证明时遇到的概念完全相同。
对数似然
softmax函数给出了一个向量\(\hat{y}\),我们可以将其视为给定任意输入\(x\)的每个类的估计条件概率。例如,\(\hat{y}_1=P(y=猫|x)\)。假设整个数据集\({x,y}\)具有\(n\)个样本,其中索引\(i\)的样本由特征向量\(x^{(i)}\)和独热标签向量\(y^{(i)}\)组成,我们可以将估计值与实际值进行比较: