单层神经网络有线性回归和softmax回归。线性回归输出是一个连续值,因此适用于回归问题。而与回归问题不同,分类问题中模型的最终输出是一个离散值。我们所说的图像分类、垃圾邮件识别、疾病诊断等输出为离散值的问题都属于分类问题的范畴。softmax回归则适用于分类问题。下面我们依次介绍线性回归和softmax回归。
设房屋面积为 x 1 x_{1} x1,房龄为 x 2 x_{2} x2,售出的价格为 y y y。我们需要建立基于输入 x 1 x_{1} x1和 x 2 x_{2} x2来计算 y y y的表达式,也就是模型,模型如下所示: y ^ = x 1 w 1 + x 2 w 2 + b \hat y=x_1w_1+x_2w_2+b y^=x1w1+x2w2+b
其中 w 1 w_1 w1和 w 2 w_2 w2是权重, b b b是偏差,均为标量。他们是线性回归模型的参数。接下来我们要通过数据寻找特定的模型参数数值,使模型在数据上的误差尽可能小,这个过程叫做模型训练。下面我们介绍模型训练所涉及的三个要素。
我们通常收集一系列的真实数据,我们在这个数据上寻找模型参数使模型预测价格和真实价格误差最小。这些数据集被称为训练数据集或训练集,数据集中的一个数据称为样本,样本中需要预测的结果称为标签,用来预测标签的因素称为特征。
在模型训练中,我们需要衡量价格预测值和真实值之间的误差。通常我们会选取一个非负数作为误差,且数值越小表示误差越小。一个常用的选择是平方函数,它在评估索引为 i i i的样本误差的表达式为:
l ( i ) ( w 1 , w 2 , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 l^{(i)}(w_1,w_2,b)=\frac{1}{2}(\hat y^{(i)}-y^{(i)})^2 l(i)(w1,w2,b)=21(y^(i)−y(i))2
机器学习中,将衡量误差的函数称为损失函数。这里使用的平方误差也称为平方损失。
通常,我们用训练数据集中所有样本误差的平均来衡量模型预测的质量,即: l ( w 1 , w 2 , b ) = 1 n ∑ i = 1 n l ( i ) ( w 1 , w 2 , b ) = 1 n ∑ i = 1 n 1 2 ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) 2 l(w_1,w_2,b)=\frac 1 n\sum_{i=1}^nl^{(i)}(w_1,w_2,b)=\frac1 n\sum_{i=1}^n\frac1 2(x_1^{(i)}w_1+x_2^{(i)}w_2+b-y^{(i)})^2 l(w1,w2,b)=n1i=1∑nl(i)(w1,w2,b)=n1i=1∑n21(x1(i)w1+x2(i)w2+b−y(i))2
在模型训练中,我们希望找出一组模型参数,记为 w 1 ∗ , w 2 ∗ , b ∗ w_1^*,w_2^*,b^* w1∗,w2∗,b∗,来使训练样本平均损失最小。
解析解:当模型和损失函数形式较为简单时,上面的误差最小化问题的解可以直接用公式表达出来,这类解叫做解析解。
数值解:然而大多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函数的值,这类解叫做数值解。
在求解数值解的优化算法中,小批量随机梯度下降在深度学习中被广泛应用。其优化算法如下:
在上式中, ∣ β ∣ \left| \beta\right| ∣β∣代表每个小批量中的样本个数(批量大小), η \eta η称作学习效率并取正数。这里的批量大小和学习效率的值是人为设定的,因此称为超参数。我们通常所说的“调参”指的正是调节超参数。
模型训练完之后,我们将模型参数 w 1 , w 2 , b w_1,w_2,b w1,w2,b在优化算法停止时的值分别记作 w ^ 1 , w ^ 2 , b ^ \hat w_1,\hat w_2,\hat b w^1,w^2,b^。注意,我们这里得到的并不一定是最小化损失函数的最优解 w 1 ∗ , w 2 ∗ , b ∗ w_1^*,w_2^*,b^* w1∗,w2∗,b∗,而是对最优解的一个近似。然后我们就可以使用学出的线性回归模型来估算训练数据集以外任意一个样本的标签了。
对于离散值的预测问题,我们可以使用诸如softmax回归在内的分类模型。和线性回归不同,softmax回归输出单元从一个变为多个,且引入softmax运算使输出更适合离散值得预测和训练。
softmax和线性回归一样将输入特征与权重做线性叠加。与线性回归的一个主要不同在于,softmax回归的输出值个数等于标签里的类别数。假设模型中一共有4种特征和3种输出动物类别,所以权重包含12个标量(带下标的 w w w)、偏差包含三个标量(带下标的 b b b),且对每个输入计算 o 1 , o 2 , o 3 o_1,o_2,o_3 o1,o2,o3这三个输出:
o 1 = x 1 w 11 + x 2 w 21 + x 3 w 31 + x 4 w 41 + b 1 o_1=x_1w_{11}+x_2w_{21}+x_3w_{31}+x_4w_{41}+b_1 o1=x1w11+x2w21+x3w31+x4w41+b1
o 2 = x 1 w 12 + x 2 w 22 + x 3 w 32 + x 4 w 42 + b 2 o_2=x_1w_{12}+x_2w_{22}+x_3w_{32}+x_4w_{42}+b_2 o2=x1w12+x2w22+x3w32+x4w42+b2
o 3 = x 1 w 13 + x 2 w 23 + x 3 w 33 + x 4 w 43 + b 3 o_3=x_1w_{13}+x_2w_{23}+x_3w_{33}+x_4w_{43}+b_3 o3=x1w13+x2w23+x3w33+x4w43+b3
softmax运算通过下式将输出值变换为正且和为1的概率分布:
y ^ 1 , y ^ 2 , y ^ 3 = s o f t m a x ( o 1 , o 2 , o 3 ) \hat y_1,\hat y_2,\hat y_3=softmax(o_1,o_2,o_3) y^1,y^2,y^3=softmax(o1,o2,o3)
其中
y ^ 1 = e x p ( o 1 ) ∑ i = 1 3 e x p ( o i ) , y ^ 2 = e x p ( o 2 ) ∑ i = 1 3 e x p ( o i ) , y ^ 3 = e x p ( o 3 ) ∑ i = 1 3 e x p ( o i ) \hat y_1=\frac {exp(o_1)} {\sum_{i=1}^3exp(o_i)}, \hat y_2=\frac {exp(o_2)} {\sum_{i=1}^3exp(o_i)}, \hat y_3=\frac {exp(o_3)} {\sum_{i=1}^3exp(o_i)} y^1=∑i=13exp(oi)exp(o1),y^2=∑i=13exp(oi)exp(o2),y^3=∑i=13exp(oi)exp(o3)
其中 y ^ 1 + y ^ 2 + y ^ 3 = 1 \hat y_1+\hat y_2+\hat y_3=1 y^1+y^2+y^3=1且 0 ≤ y ^ 1 , y ^ 2 , y ^ 3 ≤ 1 0\le\hat y_1,\hat y_2,\hat y_3\le1 0≤y^1,y^2,y^3≤1。
对于样本 i i i,我们构造向量 y ( i ) \mathbf{y^{(i)}} y(i),使其第 y ( i ) y^{(i)} y(i)个元素为1,其余为0。这样我们的训练目标可以设为使预测概率分布 y ^ ( i ) \mathbf{\hat y^{(i)}} y^(i)尽可能接近真实的标签概率分布 y ( i ) \mathbf{y^{(i)}} y(i)。
我们可以像线性回归那样使用平方损失函数。然而,想要预测分类结果正确,我们其实并不需要预测概率完全等于标签概率。所以我们使用更适合衡量两个概率分布差异的测量函数。其中交叉熵是一个常用的衡量方法:
H ( y ( i ) , y ^ ( i ) ) = − ∑ j = 1 q y j ( i ) l o g y ^ j ( i ) H(\mathbf{y^{(i)}},\mathbf{\hat y^{(i)}})=-\sum_{j=1}^qy_j^{(i)}log{\hat y_j^{(i)}} H(y(i),y^(i))=−j=1∑qyj(i)logy^j(i)
其中带下标的 y j ( i ) y_j^{(i)} yj(i)是向量 y ( i ) \mathbf{y^{(i)}} y(i)中非0即1的元素。在上式中,我们知道向量 y ( i ) \mathbf {y^{(i)}} y(i)中只有第 y ( i ) y^{(i)} y(i)个元素 y y ( i ) ( i ) y_{y^{(i)}}^{(i)} yy(i)(i)为1,其余全为0,于是:
H ( y ( i ) , y ^ ( i ) ) = − l o g y ^ y ( i ) ( i ) H(\mathbf{y^{(i)}},\mathbf{\hat y^{(i)}})=-log\hat y_{y^{(i)}}^{(i)} H(y(i),y^(i))=−logy^y(i)(i)
交叉熵只关心正确类别的预测概率,因为只要其值足够大,就可以保证分类结果的正确。
假设训练集样本数为 n n n,交叉熵损失函数定义为:
l ( θ ) = 1 n ∑ i = 1 n H ( y ( i ) , y ^ ( i ) ) l(\theta)=\frac1 n\sum_{i=1}^nH(\mathbf{y^{(i)}},\mathbf{\hat y^{(i)}}) l(θ)=n1i=1∑nH(y(i),y^(i))
其中 θ \theta θ代表模型参数。同样地,如果每个样本只有一个标签,那么交叉熵损失可以简写成:
l ( θ ) = − 1 n ∑ i = 1 n l o g y ^ y ( i ) ( i ) l(\theta)=-\frac1 n\sum_{i=1}^nlog\hat y_{y^{(i)}}^{(i)} l(θ)=−n1i=1∑nlogy^y(i)(i)
从另一个角度来看,我们知道最小化 l ( θ ) l(\theta) l(θ)等价于最大化: e x p ( − n l ( θ ) ) = ∏ i = 1 n y ^ y ( i ) ( i ) exp(-nl(\theta))=\prod_{i=1}^n\hat y_{y^{(i)}}^{(i)} exp(−nl(θ))=i=1∏ny^y(i)(i)
即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。
同样使用小批量随机梯度下降来优化模型的损失函数。(可以参考上文)
在训练好softmax回归模型后,给定任一样本特征,就可以预测每一个输出类别的概率。通常,我们把预测概率最大的类别作为输出类别。如果它与真实类别(标签)一致,说明预测是正确的。我们使用准确率来评价模型的表现,它等于正确预测数量与总预测数量之比。