深度学习:线性回归

线性回归

线性回归输出的是一个连续值,因此适用于回归问题。
常见回归问题:预测房屋价格、气温、销售额等连续值问题。
线性回归方程的运算案例(便于理解原理,来源百度百科):

若在一组具有相关关系的变量的数据(x与y)间,通过散点图我们可观察出所有数据点都分布在一条直线附近,这样的直线可以画出许多条,而我们希望其中的一条最好地反映x与Y之间的关系,即我们要找出一条直线,使这条直线“最贴近”已知的数据点
因为模型中有残差,并且残差无法消除,所以就不能用二点确定一条直线的方法来得到方程,要保证几乎所有的实测值聚集在一条回归直线上,就需要它们的纵向距离的平方和到那个最好的拟合直线距离最小(平方函数)

1. 线性回归的基本要素

跟大多数深度学习模型一样,对于线性回归这样一种单层神经网络,它的基本要素包括模型、训练数据、损失函数和优化算法

我们使用一个例子:简单的房屋价格预测,解释线性回归的基本要素。
题目目标:预测一栋房子的售出价格(元)。
假设房屋价格只取决于面积(平方米)和房龄(年)。

1.1 模型定义

设房屋的面积为 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 \widehat{y}=x_1w_1+x_2w_2+b y =x1w1+x2w2+b
其中 w 1 w_1 w1 w 2 w_2 w2是权重(weight),b是偏差(bias),且均为标量。它们是线性回归模型的参数(parameter)。模型输出的 y ^ \widehat{y} y 是线性回归对真实价格 y y y的预测或估计。

1.2模型训练

模型训练即通过数据来寻找特定的模型参数值,使模型在数据上的误差尽可能小。
模型训练涉及的3个要素:

(1)训练数据

我们通常收集一系列的真实数据,例如多栋房屋的真实售出价格和它们对应的面积和房龄。我们希望在这个数据上面寻找模型参数(即 w 1 w_1 w1 w 2 w_2 w2 b b b)来使模型的预测价格与真实价格的误差最小。
在机器学习术语里,该数据集被称为训练数据集(training data set)或训练集(training set),一栋房屋被称为一个样本(sample),其真实售出价格叫作标签(label),用来预测标签的两个因素叫作特征(feature)。特征用来表征样本的特点。

假设我们采集的样本数为 n n n,索引为 i i i的样本的特征为 x 1 ( i ) x_1^{(i)} x1(i) x 2 ( i ) x_2^{(i)} x2(i),标签为 y ( i ) y^{(i)} y(i)。对于索引为 i i i的房屋,线性回归模型的房屋价格预测表达式为
y ^ ( i ) = x 1 ( i ) w 1 + x 2 ( i ) w 2 + b \widehat{y}^{(i)}=x_1{(i)}w_1+x_2{(i)}w_2+b y (i)=x1(i)w1+x2(i)w2+b

(2)损失函数

在模型训练中,我们需要衡量价格预测值和真实值之间的误差。通常我们会选取一个非负数作为误差,且数值越小表示误差越小。这里选择平方函数。它在评估索引为 i i i的样本误差的表达式为
ℓ ( i ) ( w 1 , w 2 , b ) = 1 / 2 ( y ^ ( i ) − y ( i ) ) 2 ℓ^{(i)}(w_1,w_2,b)=1/2(\widehat{y}^{(i)}-y^{(i)})^2 (i)(w1,w2,b)=1/2(y (i)y(i))2
其中常数 1 / 2 1/2 1/2使对平方项求导后的常数系数为1,这样在形式上稍微简单一些。误差越小表示预测价格与真实值价格越相近,且二者相等时误差为0。 给定训练数据集,这个误差只与模型参数相关,因此我们将它记为以模型参数为参数的函数。在机器学习里,将衡量误差的函数称为损失函数(loss function)。这里使用的平方误差函数也称为平方损失(square loss)。
我们通常使用训练数据集中所有样本误差的平均来衡量所有样本误差的平均来衡量模型预测的质量,即
ℓ ( w 1 , w 2 , b ) = 1 / n ∑ i = 1 n ℓ ( 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 ) ) ℓ(w_1,w_2,b)=1/n\sum_{i=1}^nℓ^{(i)}(w_1,w_2,b)=1/n\sum_{i=1}^n1/2(x_1^{(i)}w_1+x_2^{(i)}w_2+b-y^{(i)}) (w1,w2,b)=1/ni=1n(i)(w1,w2,b)=1/ni=1n1/2(x1(i)w1+x2(i)w2+by(i))
在模型训练中,我们希望找出一组模型参数,记为 w 1 ∗ w_1^* w1 w 2 ∗ w_2^* w2 b ∗ b^* b,来使训练样本平均损失最小:
w 1 ∗ , w 2 ∗ , b ∗ = arg ⁡ min ⁡ w 1 , w 2 , b ℓ ( w 1 , w 2 , b ) w_1^*,w_2^*,b^*=\underset{w_1, w_2, b}{\arg\min} \ell(w_1, w_2, b) w1w2b=w1,w2,bargmin(w1,w2,b)

(3)优化算法

当模型和损失函数形式较为简单时,上面的误差最小化问题的解可以直接用公式表达出来。这类解叫作解析解(analytical solution)。本节使用的线性回归和平方误差刚好属于这个范畴。然而,大多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函数的值。这类解叫作数值解(numerical solution)。
在求数值解的优化算法中,小批量随机梯度下降(mini-batch stochastic gradient descent)在深度学习中被广泛使用。算法原理:先选取一组模型参数的初始值,如随机选取;接下来对参数进行多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代中,先随机均匀采样一个由固定数目训练数据样本所组成的小批量(mini-batch) B \mathcal{B} B,然后求小批量中数据样本的平均损失有关模型参数的导数(梯度)(求每个参数的偏导),最后用此结果与预先设定的一个正数的乘积作为模型参数在本次迭代的减小量。

其中,模型的每个参数将做如下迭代:
w 1 ← w 1 − η ∣ B ∣ ∑ i ∈ B ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ w 1 = w 1 − η ∣ B ∣ ∑ i ∈ B x 1 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) ,   w 2 ← w 2 − η ∣ B ∣ ∑ i ∈ B ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ w 2 = w 2 − η ∣ B ∣ ∑ i ∈ B x 2 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) ,   b ← b − η ∣ B ∣ ∑ i ∈ B ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ b = b − η ∣ B ∣ ∑ i ∈ B ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) . \begin{aligned} w_1 &\leftarrow w_1 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\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)}(w_1, w_2, b) }{\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)}(w_1, w_2, b) }{\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). \end{aligned} w1w1BηiBw1(i)(w1,w2,b)=w1BηiBx1(i)(x1(i)w1+x2(i)w2+by(i)), w2w2BηiBw2(i)(w1,w2,b)=w2BηiBx2(i)(x1(i)w1+x2(i)w2+by(i)), bbBηiBb(i)(w1,w2,b)=bBηiB(x1(i)w1+x2(i)w2+by(i)).
∣ B ∣ |\mathcal{B}| B代表每个小批量中的样本个数(批量大小,batch size),ηη 称作学习率(learning rate)并取正数。需要强调的是,这里的批量大小和学习率的值是人为设定的,并不是通过模型训练学出的,因此叫作超参数(hyperparameter)。我们通常所说的“调参”指的正是调节超参数,例如通过反复试错来找到超参数合适的值。在少数情况下,超参数也可以通过模型训练学出。

1.3模型预测

训练完成后,我们将模型参数 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,而是对最优解的一个近似。

2.线性回归的表示方法

2.1 神经网络图

在深度学习中,我们可以使用神经网络图直观地表现模型结构。
图1 线性回归是一个单层神经网络
图1 线性回归是一个单层神经网络
输入分别为 x 1 x_1 x1 x 2 x_2 x2,因此输入层的输入个数为2。输入个数也叫特征数或特征向量维度。图1中网络输出的 o o o,输出层的个数为1。注意,神经网络的输出 o o o作为线性回归的输出,即 y ^ = o \hat{y}=o y^=o。由于输入层不涉及计算,所以图1所示的神经网络层数为1。==所以,线性回归是一个单层神经网络。输出层中负责计算 o o o的单元又叫神经元。==在线性回归中, o o o的计算依赖于 x 1 x_1 x1 x 2 x_2 x2。也就是说,输出层中的神经元和输入层中各个输入完全连接。因此,这里的输出层又叫全连接层(fully-connected layer)或稠密层(dense layer)。

2.2矢量计算表达式

在模型训练或预测时,我们常常会同时处理多个数据样本并用到矢量计算。而且矢量计算比向量逐个元素计算要省时。所以,我们要尽量使用矢量计算,以提升计算效率。
当数据样本数为 n n n,特征数为 d d d时,线性回归的矢量计算表达式为
y ^ = X w + b \hat{y}=Xw+b y^=Xw+b
其中,模型输出 y ^ ∈ R n × 1 \hat{y} \in R^{n\times1} y^Rn×1,批量数据样本特征 X ∈ R n × d X \in R^{n\times d} XRn×d,权重 w ∈ R d × 1 w \in R^{d \times 1} wRd×1,偏差 b ∈ R b\in R bR
相应地,批量样本标签 y ^ ∈ R n × 1 \hat{y} \in R^{n\times1} y^Rn×1。设模型参数 θ = [ w 1 , w 2 , b ] ⊤ \boldsymbol{\theta} = [w_1, w_2, b]^\top θ=[w1,w2,b],我们可以重写损失函数为 ℓ ( θ ) = 1 2 n ( y ^ − y ) ⊤ ( y ^ − y ) \ell(\boldsymbol{\theta})=\frac{1}{2n}(\boldsymbol{\hat{y}}-\boldsymbol{y})^\top(\boldsymbol{\hat{y}}-\boldsymbol{y}) (θ)=2n1(y^y)(y^y)
小批量随机梯度下降的迭代步骤将相应地改写为 θ ← θ − η ∣ B ∣ ∑ i ∈ B ∇ θ ℓ ( i ) ( θ ) , \boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \nabla_{\boldsymbol{\theta}} \ell^{(i)}(\boldsymbol{\theta}), θθBηiBθ(i)(θ),

其中梯度是损失有关3个为标量的模型参数的偏导数组成的向量: ∇ θ ℓ ( i ) ( θ ) = [ ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ w 1   ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ w 2   ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ b ] = [ x 1 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) )   x 2 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) )   x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ] = [ x 1 ( i )   x 2 ( i )   1 ] ( y ^ ( i ) − y ( i ) ) \nabla_{\boldsymbol{\theta}} \ell^{(i)}(\boldsymbol{\theta})= \begin{bmatrix} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_1} \ \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_2} \ \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial b} \end{bmatrix} = \begin{bmatrix} x_1^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \ x_2^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \ x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)} \end{bmatrix}= \begin{bmatrix} x_1^{(i)} \ x_2^{(i)} \ 1 \end{bmatrix} (\hat{y}^{(i)} - y^{(i)}) θ(i)(θ)=[w1(i)(w1,w2,b) w2(i)(w1,w2,b) b(i)(w1,w2,b)]=[x1(i)(x1(i)w1+x2(i)w2+by(i)) x2(i)(x1(i)w1+x2(i)w2+by(i)) x1(i)w1+x2(i)w2+by(i)]=[x1(i) x2(i) 1](y^(i)y(i))

点击查看原文

猜你喜欢

转载自blog.csdn.net/qq_45465526/article/details/108502116