引言
我们自动求导工具第一阶段的实现已经完成了,本文最简单的模型——线性回归模型进行简单的介绍。
线性回归
给定输入 x x x,可能有多个维度(特征),和输出 y y y。线性回归(linear regression)假设输入 x x x和输出 y y y之间的关系是线性的。即 y y y可以表示为 x x x中元素的加权和,这里通常允许包含观测值的一些噪声,我们假设任何噪声都比较正常,比如噪声遵循高斯分布。
我们举一个例子:我们希望根据房屋的面积(㎡)和房龄(年)来估计房屋的售价(万/㎡)。以某卖房软件上深圳南山区近地铁口售价的真实数据为例。我们收集了房屋的售价、面积和房龄。在机器学习中,该数据集称为训练集(training data set)。每行数据(一次房屋交易相对应的数据)称为样本(sample),也称为数据点(data point)。我们把试图预测的目标(比如房屋价格)称为标签(label)或目标(target)。预测所依据的自变量(面积或房龄)称为特征(feature)。
我们使用 n n n来表示数据集中的样本数,对索引为 i i i的样本,其输入表示为 x ( i ) = [ x 1 ( i ) , x 2 ( i ) ] T x^{(i)} = [x^{(i)}_1,x^{(i)}_2]^T x(i)=[x1(i),x2(i)]T,其对应的标签是 y ( i ) y^{(i)} y(i)。
我们收集到的数据集如下:
X = [
[64.4, 31], # [面积, 房龄]
[68, 21],
[74.1, 19],
[74.8, 24],
[76.9, 17],
[78.1, 16],
[78.6, 17]
]
y = [6.1, 6.25, 7.8, 6.66, 7.82, 7.14, 8.02]
线性回归假设目标(房屋价格)可以表示为特征(面积和房龄)的加权和,如下:
price
=
w
area
⋅
area
+
w
age
⋅
age
+
b
(1)
\text{price} = w_{\text{area}} \cdot \text{area} + w_{\text{age}} \cdot \text{age} + b \tag{1}
price=warea⋅area+wage⋅age+b(1)
其中
w
area
w_{\text{area}}
warea和
w
age
w_{\text{age}}
wage称为权重(weight),权重代表每个特征对预测值的影响(权重越大表面影响越大)。
b
b
b称为偏置(bias)或截距(intercept)。严格来说,上式是输入特征的一个仿射变换(affine transformation)。仿射变换是通过加权和对特征进行线性变换(linear transformation),并通过偏置项来进行平移(translation)。
有了数据集以后,我们的目标是寻找线性回归模型的权重 w w w和偏置 b b b,以对新的样本进行预测。
在机器学习领域,我们使用的一般是高维数据集,建模时采用线性代数表示法会比较方便。假设我们的输入包含
d
d
d个特征时,我们将预测结果
y
^
\hat y
y^表示为:
y
^
=
w
1
x
1
+
⋯
+
w
d
x
d
+
b
(2)
\hat y = w_1 x_1 + \cdots + w_d x_d + b\tag{2}
y^=w1x1+⋯+wdxd+b(2)
比如在我们房价预测的例子中总共有2个特征,分别是房屋面积和房龄。所以可以写成:
y
^
=
w
1
x
1
+
w
2
x
2
+
b
\hat y = w_1x_1 + w_2x_2 + b
y^=w1x1+w2x2+b
假设
x
1
x_1
x1表示面积;
x
2
x_2
x2表示房龄。
如果将所有的特征都放到向量
x
∈
R
d
x \in \Bbb R^d
x∈Rd中,并将所有权重放到向量
w
∈
R
d
w \in \Bbb R^d
w∈Rd中,我们可以用点积形式来简介地表达模型:
y
^
=
w
T
x
+
b
(3)
\hat y = w^T x + b \tag{3}
y^=wTx+b(3)
向量
x
x
x表示包含所有特征的单个样本数据。那么用符号
X
∈
R
n
×
d
X \in \Bbb R^{n \times d}
X∈Rn×d可以表示我们整个数据集中的
n
n
n个样本,其中,
X
X
X的每一行是一个样本,每一列是一种特征。
那么预测值
y
^
∈
R
n
\hat y \in \Bbb R^n
y^∈Rn就可以通过矩阵-向量乘法表示:
y
^
=
X
w
+
b
(4)
\hat y = Xw + b \tag{4}
y^=Xw+b(4)
有时候也可以把
b
b
b加到权重
w
w
w中去,
X
X
X也进行相应的变化得到增广矩阵。上面的式子展开如下:
[
y
^
1
y
^
2
⋮
y
^
n
]
=
b
+
[
x
1
(
1
)
⋯
x
d
(
1
)
x
1
(
2
)
⋯
x
d
(
2
)
⋮
⋱
⋮
x
1
(
n
)
⋯
x
d
(
n
)
]
⋅
[
w
1
w
2
⋮
w
d
]
\begin{bmatrix} \hat y_1 \\ \hat y_2 \\ \vdots \\ \hat y_n \end{bmatrix} = b + \begin{bmatrix} x^{(1)}_1 & \cdots & x^{(1)}_d\\ x^{(2)}_1 & \cdots & x^{(2)}_d\\ \vdots & \ddots & \vdots\\ x^{(n)}_1 & \cdots & x^{(n)}_d\\ \end{bmatrix} \cdot \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_d \end{bmatrix}
⎣⎢⎢⎢⎡y^1y^2⋮y^n⎦⎥⎥⎥⎤=b+⎣⎢⎢⎢⎢⎡x1(1)x1(2)⋮x1(n)⋯⋯⋱⋯xd(1)xd(2)⋮xd(n)⎦⎥⎥⎥⎥⎤⋅⎣⎢⎢⎢⎡w1w2⋮wd⎦⎥⎥⎥⎤
这里的
b
b
b会进行广播。我们如果把
b
b
b加到权重
w
w
w中去,就变成了:
[
y
^
1
y
^
2
⋮
y
^
n
]
=
b
+
[
1
x
1
(
1
)
⋯
x
d
(
1
)
1
x
1
(
2
)
⋯
x
d
(
2
)
⋮
⋮
⋱
⋮
1
x
1
(
n
)
⋯
x
d
(
n
)
]
⋅
[
b
w
1
w
2
⋮
w
d
]
⇒
y
^
=
X
w
\begin{bmatrix} \hat y_1 \\ \hat y_2 \\ \vdots \\ \hat y_n \end{bmatrix} = b + \begin{bmatrix} 1 & x^{(1)}_1 & \cdots & x^{(1)}_d\\ 1 & x^{(2)}_1 & \cdots & x^{(2)}_d\\ \vdots & \vdots & \ddots & \vdots\\ 1 & x^{(n)}_1 & \cdots & x^{(n)}_d\\ \end{bmatrix} \cdot \begin{bmatrix} b \\ w_1 \\ w_2 \\ \vdots \\ w_d \end{bmatrix} \Rightarrow \hat y = X w
⎣⎢⎢⎢⎡y^1y^2⋮y^n⎦⎥⎥⎥⎤=b+⎣⎢⎢⎢⎢⎡11⋮1x1(1)x1(2)⋮x1(n)⋯⋯⋱⋯xd(1)xd(2)⋮xd(n)⎦⎥⎥⎥⎥⎤⋅⎣⎢⎢⎢⎢⎢⎡bw1w2⋮wd⎦⎥⎥⎥⎥⎥⎤⇒y^=Xw
上式最后用
X
X
X和
w
w
w表示增广后的矩阵和向量。
我们已经有了数据集和模型,那么如何得到模型参数呢?答案就是学习过程。
学习过程
学习过程说的是:基于初始的模型参数,我们可以得到一个预测输出,然后我们计算该输出和真实输出之间的距离。通过最小化损失函数和优化方法就可以来优化模型参数。
损失函数: 衡量实际值与预测值之间的差距。数值越小代表损失越小,完美预测时损失为0。
优化: 改变模型参数以获得更少的损失
损失函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SubhEmcY-1640855920361)(https://gitee.com/nlp-greyfoss/images/raw/master/data/fit-linreg.svg)]
我们为一维情况下的回归问题绘制图像,如上图所示。一维情况即样本 x x x只有一个特征。比如横坐标代表身高,纵坐标代表体重。
假设某人的真实身高是180cm,你预测的身高是156cm。那么衡量距离,你首先想到的应该是它们之间的差值。为了避免负数,也应该加一个绝对值。所以定义为
∣
y
^
i
−
y
(
i
)
∣
|\hat y^{{i}} - y^{(i)}|
∣y^i−y(i)∣,但是绝对值是不可求导的,我们可以把绝对值改成平方,并加上系数
1
2
\frac{1}{2}
21好进行求导。这就是平方误差损失函数:
l
(
i
)
=
1
2
(
y
^
(
i
)
−
y
(
i
)
)
2
(5)
l^{(i)} = \frac{1}{2}(\hat y^{(i)} - y^{(i)})^2 \tag{5}
l(i)=21(y^(i)−y(i))2(5)
这是度量单个样本的损失,为了度量整个数据集的损失,我们需要计算训练集
n
n
n个样本上的损失均值:
L
(
w
,
b
)
=
1
n
l
(
i
)
(
w
,
b
)
=
1
n
∑
i
=
1
n
1
2
(
w
T
x
(
i
)
+
b
−
y
(
i
)
)
2
(6)
L(w,b) = \frac{1}{n}l^{(i)}(w,b) = \frac{1}{n} \sum_{i=1}^n \frac{1}{2} \left(w^T x^{(i)} + b - y^{(i)} \right)^2 \tag{6}
L(w,b)=n1l(i)(w,b)=n1i=1∑n21(wTx(i)+b−y(i))2(6)
此时
L
(
w
,
b
)
L(w,b)
L(w,b)叫作均方误差损失函数。
我们要找的就是能使所有训练样本上的损失均值最小的参数:
w
∗
,
b
∗
=
arg
min
w
,
b
L
(
w
,
b
)
(7)
w^*, b^* = \arg \, \min_{w,b} L(w,b) \tag{7}
w∗,b∗=argw,bminL(w,b)(7)
梯度下降
对于线性回归来说,有一种方法叫作解析解。但是它应用有限,无法进行推广。因此这里不做分析。
本节介绍的方法即使我们无法得到解析解的情况下,仍然可以有效地训练模型。
那就是梯度下降(gradient descent)的方法,这种方法几乎可以优化所有的深度学习模型。它通过不断地在损失函数递减的方向上更新参数来降低误差。
梯度下降最简单的用法是计算损失函数关于模型参数的导数(或者说是梯度)。通常是遍历完整个数据集再进行参数更新,但实际上可能非常慢。因此我们遍历的时候只遍历部分批量数据,遍历完该批量数据即进行参数更新。
我们刚刚看到的方法叫作小批量随机梯度下降法,随机指的是每批数据都是随机抽取的。
用下面的数学公式来表示这一更新过程:
(
w
,
b
)
←
(
w
,
b
)
−
η
∣
B
∣
∑
i
∈
B
∂
(
w
,
b
)
l
(
i
)
(
w
,
b
)
(8)
(w,b) \leftarrow (w,b) - \frac{\eta}{|B|} \sum_{i \in B} \partial_{(w,b)} l^{(i)}(w,b) \tag{8}
(w,b)←(w,b)−∣B∣ηi∈B∑∂(w,b)l(i)(w,b)(8)
其中
∂
\partial
∂表示偏导数;
B
B
B代表小批量数据;
∣
B
∣
|B|
∣B∣表示这一小批量数据的数量;
η
\eta
η是学习率。
算法的步骤如下:
- 初始化模型参数,通常采用随机初始化
- 从数据集中随机抽取小批量样本,且在梯度的反方向上更新参数,不断迭代这一步骤。
批量大小和学习率的值通常需要预先指定,而不是通过学习得到的,这种参数叫作超参数(hyperparameter)。
在训练了预先确定的若干次迭代次数后(或满足某些停止条件),我们保存此时模型参数的估计值,记为 w ^ , b ^ \hat w,\hat b w^,b^。
优化方法
线性回归恰好只有一个最小值,但是对于深度神经网络这种复杂的模型来说,可能有多个局部极小值点。
此时可能需要用到随机梯度下降法的一些变体,比如Adagrad、RMSProp等。这些变体被称为优化方法或优化器。
关于这些变体后面的文章会讨论。
从最大似然来看均方误差
本节来看一下为什么采用均分误差作为损失函数。
我们上面说过,假设噪声(误差)遵循高斯分布(正态分布)。为什么要这么假设呢,一种解释是,根据中心极限定理:许多独立随机变量的和趋向于正态分布。因为影响噪声的因素有很多,而这些因素都是独立且随机分布的,所以这么假设。
若随机变量
x
x
x具有均值
μ
\mu
μ和方差
σ
2
\sigma^2
σ2,其正态分布概率密度函数如下:
p
(
x
)
=
1
2
π
σ
2
exp
(
−
1
2
σ
2
(
x
−
μ
)
2
)
(9)
p(x) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp \left( -\frac{1}{2\sigma^2}(x-\mu)^2\right) \tag{9}
p(x)=2πσ21exp(−2σ21(x−μ)2)(9)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5ELJp12-1640855920363)(https://gitee.com/nlp-greyfoss/images/raw/master/data/output_linear-regression_216540_58_0.svg)]
改变均值会产生沿 x x x轴的偏移,增加方差会降低分布的峰值。
均方误差损失函数(简称均方误差)可以用于线性回归的一个原因是: 我们假设了观测中包含噪声,其中噪声服从正态分布。则预测函数可以写为:
y
=
w
T
x
+
b
+
ϵ
(10)
y = w^T x + b + \epsilon \tag{10}
y=wTx+b+ϵ(10)
其中
ϵ
∼
N
(
0
,
σ
2
)
\epsilon \sim N(0,\sigma^2)
ϵ∼N(0,σ2),有
p
(
ϵ
)
=
1
2
π
σ
2
exp
(
−
1
2
σ
2
(
ϵ
)
2
)
p(\epsilon) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp \left( -\frac{1}{2\sigma^2}(\epsilon)^2\right)
p(ϵ)=2πσ21exp(−2σ21(ϵ)2)
根据
(
10
)
(10)
(10),也可写成
ϵ
=
y
−
w
T
x
−
b
\epsilon = y - w^T x - b
ϵ=y−wTx−b。
因此,我们可以写出给定
x
x
x观测到特定
y
y
y的似然:
p
(
y
∣
x
)
=
1
2
π
σ
2
exp
(
−
1
2
σ
2
(
y
−
w
T
x
−
b
)
2
)
(11)
p(y|x) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp \left( -\frac{1}{2\sigma^2}(y - w^T x - b)^2\right) \tag{11}
p(y∣x)=2πσ21exp(−2σ21(y−wTx−b)2)(11)
参数
w
w
w和
b
b
b的最优值是使整个数据集的似然最大的值:
p
(
y
∣
X
)
=
∏
i
=
1
n
p
(
y
(
i
)
∣
x
(
i
)
)
(12)
p(y|X) = \prod_{i=1}^n p(y^{(i)}|x^{(i)}) \tag{12}
p(y∣X)=i=1∏np(y(i)∣x(i))(12)
由于取对数不改变单调性,同时优化一般是指最小化,我们再加上负号,变成最小化负对数似然
−
log
p
(
y
∣
X
)
- \log p(y|X)
−logp(y∣X),由此可得:
− log p ( y ∣ X ) = − ∑ i = 1 n log p ( y ( i ) ∣ x ( i ) ) (13) - \log p(y|X) = - \sum_{i=1}^n \log p(y^{(i)}|x^{(i)}) \tag{13} −logp(y∣X)=−i=1∑nlogp(y(i)∣x(i))(13)
代入 ( 11 ) (11) (11)得:
−
log
p
(
y
∣
X
)
=
−
∑
i
=
1
n
log
1
2
π
σ
2
exp
(
−
1
2
σ
2
(
y
(
i
)
−
w
T
x
(
i
)
−
b
)
2
)
=
−
∑
i
=
1
n
log
1
2
π
σ
2
−
∑
i
=
1
n
log
exp
(
−
1
2
σ
2
(
y
(
i
)
−
w
T
x
(
i
)
−
b
)
2
)
=
−
∑
i
=
1
n
log
1
2
π
σ
2
+
∑
i
=
1
n
1
2
σ
2
(
y
(
i
)
−
w
T
x
(
i
)
−
b
)
2
=
−
∑
i
=
1
n
log
1
2
π
σ
2
+
1
σ
2
∑
i
=
1
n
1
2
(
y
(
i
)
−
w
T
x
(
i
)
−
b
)
2
\begin{aligned} - \log p(y|X) &= - \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi \sigma^2}} \exp \left( -\frac{1}{2\sigma^2}(y^{(i)} - w^T x^{(i)} - b)^2\right) \\ &= - \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi \sigma^2}} - \sum_{i=1}^n \log \exp \left( -\frac{1}{2\sigma^2}(y^{(i)} - w^T x^{(i)} - b)^2\right) \\ &= - \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi \sigma^2}} + \sum_{i=1}^n \frac{1}{2\sigma^2}(y^{(i)} - w^T x^{(i)} - b)^2 \\ &= - \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi \sigma^2}} + \frac{1}{\sigma^2} \sum_{i=1}^n \frac{1}{2}(y^{(i)} - w^T x^{(i)} - b)^2 \end{aligned}
−logp(y∣X)=−i=1∑nlog2πσ21exp(−2σ21(y(i)−wTx(i)−b)2)=−i=1∑nlog2πσ21−i=1∑nlogexp(−2σ21(y(i)−wTx(i)−b)2)=−i=1∑nlog2πσ21+i=1∑n2σ21(y(i)−wTx(i)−b)2=−i=1∑nlog2πσ21+σ21i=1∑n21(y(i)−wTx(i)−b)2
上面式子的解并不依赖于
σ
\sigma
σ,因此,在高斯噪声的假设下,最小化均方误差等价于对线性模型的极大似然估计。
参考
- 动手学习深度学习