一、概述
线性回归的输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,例如预测房屋价格、气温、销售额等连续值的问题。由于线性回归是单层神经网络,所以先学习线性回归,了解深度学习模型的基本要素和基本方法。
二、一个具体的例子
以房屋价格预测作为例子来解释线性回归的基本要素。房屋的价格受很多因素的影响,比如房屋状况、地段、市场行情等等。这里,我们假设价格只取决于两个因素:面积(平方米)和房龄(年)。我们希望探索价格与这两个因素的具体关系。
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
\hat{y} =x_1w_1+x_2w_2+b
y^=x1w1+x2w2+b
其中
- w 1 , w 2 w_1,w_2 w1,w2是权重, b b b是偏差,且均为标量。它们是线性回归模型的参数(parameter)
- 模型输出 y ^ \hat{y} y^是模型对真实价格的预测值。通常,其与真实值有一定误差
2.模型训练
模型训练是指这样一个过程:通过数据寻找特定的模型参数,使得模型在数据上的误差尽可能小。这个过程包含三个要素:训练数据、损失函数、优化算法。
训练数据
我们通常会收集或寻找一些列真实数据,比如多栋房屋的真实出售价格和它们对应的面积、房龄。我们希望通过这些数据来寻找模型参数,以最小化预测值和真实值之间的误差。在机器学习术语中:
- 这个数据集称为训练集
- 一栋房屋称为样本
- 真实出售价格称为标签
- 两个因素面积、房龄称为特征
假设我们采集的样本数为
n
n
n,其中索引为
i
i
i的特征
为
x
1
(
i
)
,
x
2
(
i
)
x_1^{(i)},x_2^{(i)}
x1(i),x2(i),标签为
y
(
i
)
y^{(i)}
y(i)。对于该样本,线性回归模型的房屋价格预测表达式为
y
^
(
i
)
=
x
1
(
i
)
w
1
+
x
2
(
i
)
w
2
+
b
\hat{y}^{(i)} =x_1^{(i)}w_1+x_2^{(i)}w_2+b
y^(i)=x1(i)w1+x2(i)w2+b
损失函数
训练模型的时候,如何评估现在的参数效果呢?当然是采用损失函数了~。最常用的是平方损失函数。
对于索引为
i
i
i的样本,其误差的表达式为:
ℓ
(
i
)
(
w
1
,
w
2
,
b
)
=
1
2
(
y
^
(
i
)
−
y
(
i
)
)
2
ℓ ^{(i)}(w_1,w_2,b)=\frac {1}{2}(\hat{y}^{(i)}-y^{(i)})^2
ℓ(i)(w1,w2,b)=21(y^(i)−y(i))2
可以看出这个损失函数是关于所有模型参数的一个多元函数。其中1/2是为了使得该损失函数求导后系数为1,这样形式上稍微简单些。
通常,我们用训练数据集中所有样本误差的平均
来衡量模型预测的质量,即
ℓ
(
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
)
)
2
ℓ (w_1,w_2,b)=\frac 1n \sum_{i=1}^nℓ ^{(i)}(w_1,w_2,b)=\frac 1n \sum_{i=1}^n\frac 12(x_1^{(i)}w_1+x_2^{(i)}w_2+b-y^{(i)})^2
ℓ(w1,w2,b)=n1i=1∑nℓ(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∗),使得训练样本平均损失最小:
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}{\operatorname {arg\,min}}\,ℓ (w_1,w_2,b)
w1∗,w2∗,b∗=w1,w2,bargminℓ(w1,w2,b)
优化算法
当模型和损失函数形式较为简单时,上述最小化问题的解可以直接表达出来。这类解叫做解析解。而大多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失。这类解叫数值解。
在求数值解的优化算法中,小批量梯度下降在深度学习中被广泛应用。其算法如下:
- 选一组模型参数的初始值,例如随机选取
- 接下来对参数进行多次迭代,使得每次迭代都可能降低损失函数的值
在每次迭代中:
- 我们先随机均匀采样一个由固定数量训练数据样本所组成的小批量(mini-batch) β \beta β;
- 然后求小批量的平均损失有关模型参数的导数(梯度)
- 最后用此结果与预先设定的一个正数的乘积作为模型参数在本次迭代的减少量
在训练上述模型的时候,模型的每个参数将作如下迭代:
w
1
←
w
1
−
l
r
∗
1
∣
β
∣
∑
i
∈
β
∂
ℓ
(
i
)
(
w
1
,
w
2
,
b
)
∂
w
1
w_1\leftarrow w_1-lr*\frac {1}{|\beta|}\sum_{i\in \beta}\frac {\partial ℓ ^{(i)}(w_1,w_2,b)}{\partial w_1}
w1←w1−lr∗∣β∣1i∈β∑∂w1∂ℓ(i)(w1,w2,b)
(
w
2
,
b
w_2,b
w2,b类似)
其中
l
r
lr
lr为学习率,|
β
\beta
β|是小批量样本个数。需要注意的是,批量大小和学习率都是人为设定的,并不是模型训练出来的,因此称为超参数。通常说的“调参”就是调节超参数。