线性回归输出的是连续值,适用于如预测房屋价格、气温、销售额等连续值的问题。

线性回归的基本要素

模型定义

假设输入有两个参数,分别为$x_1$和$x_2$,输出为一个数$y$。建立一个基于输入$x_1$和$x_2$来计算输出$y$的表达式,也就是模型(model)。

线性回归假设输出与各输入之间是线性关系:

$$\hat{y}=x_1 w_1+x_2 w_2+b$$

其中$w_1$和$w_2$是权重(weight),$b$是偏差(bisa),均为标量。它们是线性回归模型的参数(parameter)。$\hat{y}$是模型的输出。

训练模型

通过模型训练(model training),根据数据寻找到特定的模型参数值,使得模型的输出尽可能接近正确的答案。

训练数据

将收集到的一系列用于训练模型的真实数据称之为训练数据集(training data set)或训练集(training set),其中的一套数据称为一个样本(sample),一套数据中的$x_1$、$x_2$称为特征(feature),$y$被称为标签(label)。

假设采集的样本数为$n$,索引为$i$的样本特征写作$x_1^{(i)}$和$x_2^{(i)}$,标签写作$y^{(i)}$。对于索引为$i$的样本,其线性模型的预测值表达式为:

$$\hat{y}^{(i)}=x_1^{(i)} w_1+x_2^{(i)} w_2+b$$

损失函数

在模型训练中,需要衡量预测与真实值的误差。通常会选择一个非负数作为误差,且数值越小误差越小。一个常用的选择是平方函数。索引为$i$的样本误差的表达式为:

$$\ell^{(i)}\left(w_1, w_2, b\right)=\frac{1}{2}\left(\hat{y}^{(i)}-y^{(i)}\right)^2$$

将模型输出的预测值$\hat{y}^{(i)}$与标签(即标准答案)相减,再乘方来将可能出现的负数转换为正数。常数$\frac{1}{2}$使对平方项求导后的常数系数为1,这样在会让后续求导后的结果在形式上稍微简单一些。

给定训练集,这个误差只与模型参数有关,因此将它记为以模型参数为参数的函数。该函数被称为损失函数(loss function),在这里用$\ell^{(i)}\left(w_1, w_2, b\right)$来表示索引为$i$的样本的损失函数。这里使用的平方误差函数也称为平方损失(square loss)。

通常,用训练数据集中所有样本误差的平均来衡量模型预测的质量,即

$$\ell\left(w_1, w_2, b\right)=\frac{1}{n} \sum_{i=1}^n \ell^{(i)}\left(w_1, w_2, b\right)=\frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(x_1^{(i)} w_1+x_2^{(i)} w_2+b-y^{(i)}\right)^2$$

用求和函数将训练数据集中每个样本的误差相加,随后除以n得到训练数据集的平均误差。

在模型训练中,我们希望找出一组模型参数,记为 $w_1^*$, $w_2^*$, $b^*$ ,来使训练样本平均损失最小:

$$ w_1^*, w_2^*, b^*=\underset{w_1, w_2, b}{\arg \min } \ell\left(w_1, w_2, b\right)$$

优化算法

当模型和损失函数形式较为简单时,上面的误差最小化问题的解可以直接用公式表达出来。这类解叫作解析解(analytical solution)。本节使用的线性回归和平方误差刚好属于这个范畴。然而,大多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函数的值。这类解叫作数值解(numerical solution)。

在求数值解的优化算法中,深度学习中通常使用小批量随机梯度下降(mini-batch stochastic gradient descent)。

首先选取一组模型参数的初始值(如随机选取);接下来对参数进行多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代中,先随机均匀采样一个由固定数目训练数据样本所组成的小批量(mini-batch)$\mathcal{B}$,然后求小批量中数据样本的平均损失有关模型参数的导数(梯度),最后用此结果与预先设定的一个正数的乘积作为模型参数在本次迭代的减小量。

梯度即为损失函数的导数,之所以在迭代中需要乘以梯度,是因为导数反应了模型的预测值与标签之间的差距的大小,差距越大该导数越大,也就是梯度越大。为了做到模型参数的减小量随着预测值与标签之间的大小改变而改变,所以在计算减小值时采用梯度,差距越大,模型参数改变的越大,差距越小,模型参数改变的越小。

同上,假设模型仅有两个参数$x_1$,$x_2$和一个输出$y$,则每个参数将做如下迭代:

$$
w_1 \leftarrow w_1-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{\partial \ell^{(i)}\left(w_1, w_2, b\right)}{\partial w_1}=w_1-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} x_1^{(i)}\left(x_1^{(i)} w_1+x_2^{(i)} w_2+b-y^{(i)}\right)
$$

$$
w_2 \leftarrow w_2-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{\partial \ell^{(i)}\left(w_1, w_2, b\right)}{\partial w_2}=w_2-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} x_2^{(i)}\left(x_1^{(i)} w_1+x_2^{(i)} w_2+b-y^{(i)}\right)
$$

$$
b \leftarrow b-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{\partial \ell^{(i)}\left(w_1, w_2, b\right)}{\partial b}=b-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}\left(x_1^{(i)} w_1+x_2^{(i)} w_2+b-y^{(i)}\right)
$$

在上式中,$|\mathcal{B}|$ 代表每个小批量中的样本个数(批量大小,batch size),$\eta$ 称作学习率(learning rate)并取正数。这里的批量大小和学习率的值是人为设定的,并不是通过模型训练学出的,因此叫作超参数(hyperparameter)。

在求参数$w_1$的减小量时,求出小批量$\mathcal{B}$中每个样本的损失函数对于参数$w_1$的偏导数并带入数值,然后将每个样本的偏导数相加,除以小批量的样本个数$|\mathcal{B}|$得到该小批量的平均误差,然后再乘以学习率$\eta$,就得到了该函数的减小量。然后将该参数减去这个减小量,就得到了调整后的参数值。
每一个参数的调整过程,都与$w_1$一样。

模型预测

模型训练完成后,我们将模型参数$w_1$,$w_2$,$b$ 在优化算法停止时的值分别记作$\hat{w}1$,$\hat{w}_2$,$\hat{b}$。这里得到的并不一定是最小化损失函数的最优解 $w_1^*$, $w_2^*$, $b^*$ ,而是对最优解的一个近似。然后,就可以使用学出的线性回归模型$x_1\hat{w}_1+x_2\hat{w}_2+\hat{b}$来估算训练数据集的数据了。这里的估算也叫作模型预测、模型推断或模型测试。

线性回归的表示方法

神经网络图

神经网络图隐去了模型参数权重和偏差。

图中所示的神经网络中,输入为$x_1$,$x_2$,因此输入层的输入个数为2。输入个数也叫特征数或特征向量维度。

图中网络的输出为$o$,输出层个数为1。在这里,直接将神经网络的输出$o$作为线性回归的输出,即$\hat{y}=o$。由于输入层不涉及计算,图示中的神经网络的层数为1.

所以,线性回归是一个单层神经网络。输出层中负责计算$o$的单元又叫神经元。在线性回归中,$o$的计算依赖$x_1$和$x_2$。也就是说,输出层中的神经元和输入层中各个输入完全连接。因此,这里的输出层又叫全连接层(fully-connected layer)或稠密层(dense layer)。

矢量计算表达式

在模型训练或预测时,我们常常会同时处理多个数据样本并用到矢量计算。由于矢量计算比一个个元素单独运算更快,所以应该尽可能采用矢量计算,以提升计算效率。

依然采用上文中两个输入参数的模型。如果取出训练集中的3个样本进行计算,则会有下列公式:

$$\hat{y}^{(1)}=x_1^{(1)} w_1+x_2^{(1)} w_2+b$$
$$\hat{y}^{(2)}=x_1^{(2)} w_1+x_2^{(2)} w_2+b$$
$$\hat{y}^{(3)}=x_1^{(3)} w_1+x_2^{(3)} w_2+b$$

上面的三个等式可以转化为矢量计算:

$$
\hat{\mathbf{y}}=\left[\begin{array}{l}
\hat{y}^{(1)} \\
\hat{y}^{(2)} \\
\hat{y}^{(3)}
\end{array}\right], \quad \mathbf{X}=\left[\begin{array}{ll}
x_1^{(1)} & x_2^{(1)} \\
x_1^{(2)} & x_2^{(2)} \\
x_1^{(3)} & x_2^{(3)}
\end{array}\right], \quad \mathbf{w}=\left[\begin{array}{l}
w_1 \\
w_2
\end{array}\right]
$$

对这三个样本预测值的矢量计算表达式为$\hat{\mathbf{y}}=\mathbf{X} \mathbf{w}+b$,其中的加法运算使用了广播机制。

广义上,当数据样本数为$n$,特征数为$d$时,线性回归的矢量计算表达式为

$$\hat{\mathbf{y}}=\mathbf{X} \mathbf{w}+b$$

其中模型输出$ \hat{\mathbf{y}} \in \mathbb{R}^{n \times 1} $批量数据样本特征$\mathbf{X} \in \mathbb{R}^{n \times d}$,权重$\mathbf{w} \in \mathbb{R}^{d \times 1}$ ,偏差$b \in \mathbb{R}$。相应地,批量数据样本标签$\mathbf{y} \in \mathbb{R}^{n \times 1}$。设模型参数$\mathbf{\theta}=\left[w_1, w_2, b\right]^{\top}$($\mathbb{R}$可以理解为矩形的形状)。我们可以重写损失函数为:

$$
\ell(\mathbf{\theta})=\frac{1}{2 n}(\hat{\mathbf{y}}-\mathbf{y})^{\top}(\hat{\mathbf{y}}-\mathbf{y})
$$

其中$(\hat{\mathbf{y}}-\mathbf{y})^{\top}(\hat{\mathbf{y}}-\mathbf{y})$表示$\left(\hat{y}-y\right)^2$

小批量随机梯度下降的迭代步骤将相应地改写为:

$$
\mathbf{\theta} \leftarrow \mathbf{\theta}-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \nabla_{\mathbf{\theta}} \ell^{(i)}(\mathbf{\theta})
$$

其中梯度是损失有关3个为标量的模型参数的偏导数组成的向量:

$$
\nabla_{\mathbf{\theta}} \ell^{(i)}(\mathbf{\theta})=\left[\begin{array}{c}
\frac{\partial \ell^{(i)}\left(w_1, w_2, b\right)}{\partial w_1} \\
\frac{\partial \ell^{(i)}\left(w_1, w_2, b\right)}{\partial w_2} \\
\frac{\partial \ell^{(i)}\left(w_1, w_2, b\right)}{\partial b}
\end{array}\right]=\left[\begin{array}{c}
x_1^{(i)}\left(x_1^{(i)} w_1+x_2^{(i)} w_2+b-y^{(i)}\right) \\
x_2^{(i)}\left(x_1^{(i)} w_1+x_2^{(i)} w_2+b-y^{(i)}\right) \\
x_1^{(i)} w_1+x_2^{(i)} w_2+b-y^{(i)}
\end{array}\right]=\left[\begin{array}{c}
x_1^{(i)} \\
x_2^{(i)} \\
1
\end{array}\right]\left(\hat{y}^{(i)}-y^{(i)}\right)
$$


循之际,如星夜般的幻想。