目录
- 一、线性回归
- 1.1 线性回归的基本元素
- 1.1.1 术语介绍
- 1.1.2 线性模型
- 1.1.3 损失函数
- 1.1.4 解析解
- 1.1.5 随机梯度下降
- 1.1.6 模型预测
- 1.2 正态分布与平方损失
因为线性神经网络篇幅比较长,就拆成几篇博客分开发布。目录序号保持连贯性。
一、线性回归
回归(regression)是能为一个或多个自变量与因变量之间的关系建模的一类方法,经常用来表示输入和输出之间的关系。
1.1 线性回归的基本元素
1.1.1 术语介绍
举一个现实生活中的例子:数据公司希望根据房屋的面积和房龄来估算房屋价格。为了开发一个能预测房屋价格的模型,需要收集真实的往年数据,包含房屋价格、面积和房龄等数据,构成一个数据集。
在机器学习的术语中,该数据集称为训练数据集或训练集。每行数据(比如一次房屋交易相对应的数据)称为数据样本,或者称为数据点或数据实例。我们把试图预测的目标(比如预测房屋价格)称为标签或目标。预测过程所依据的自变量(面积和房龄)称为特征或协变量。
1.1.2 线性模型
线性假设是指目标(房屋价格)可以表示为特征(面积和房龄)的加权和。
p
r
i
c
e
=
w
a
r
e
a
⋅
a
r
e
a
+
w
a
g
e
⋅
a
g
e
+
b
price=w_{area} \cdot area + w_{age} \cdot age+b
price=warea⋅area+wage⋅age+b
其中,
w
a
r
e
a
w_{area}
warea和
w
a
g
e
w_{age}
wage称为权重,权重决定了每个特征对预测值的影响,b称为偏置、偏移量或截距。偏置是指当所有特征都取值为0时,预测值应该为多少。(即使现实生活中不会有任何房屋的面积是0或者房龄也正好为0)我们需要设置偏置项,如果没有偏置项,我们模型的表达能力会受到限制。
上式可以理解为输入特征的一个仿射变换,仿射变换的特点是通过加权和对特征进行线性变换,并通过偏置项进行平移。
给定一个数据集,我们的目标是寻找模型的权重
w
w
w和偏置
b
b
b,使得根据模型做出的预测大体符合数据中的真实价格。输出的预测值由输入特征通过线性模型的仿射变化确定,而仿射变换又由所选权重和偏置确定。
1.1.3 损失函数
损失函数能够量化目标的实际值与观测值之间的差距。通常会选择非负数作为损失,且数值越小表示损失越小,完美预测时的损失为0.回归问题中最常用的损失函数是平方误差函数。
当样本
i
i
i的预测值为
y
^
(
i
)
\hat y^{(i)}
y^(i),其相应的真实标签为
y
(
i
)
y^{(i)}
y(i)时,平方误差可以定义为以下公式:
l
(
i
)
(
w
,
b
)
=
1
2
(
y
^
(
i
)
−
y
(
i
)
)
2
l^{(i)}(\bm w,b)=\frac 1 2 (\hat y^{(i)}-y^{(i)})^2
l(i)(w,b)=21(y^(i)−y(i))2
常数 1 2 \frac 1 2 21不会带来本质的差别,但这样在形式上稍微简单一些(因为这样对损失函数求导后常数系数为1)
为了度量模型在整个数据集上的预测质量,我们需要计算在训练集n个样本上的损失价值(等价于求和)
L
(
w
,
b
)
=
1
n
∑
i
=
1
n
l
(
i
)
(
w
,
b
)
=
1
n
∑
i
=
1
n
1
2
(
w
T
x
(
i
)
+
b
−
y
(
i
)
)
2
L(\bm w,b)=\frac 1 n \sum_{i=1}^n l^{(i)}(\bm w,b)=\frac 1 n \sum_{i=1}^n \frac 1 2(\bm w^T \bm x^{(i)}+b-y^{(i)})^2
L(w,b)=n1i=1∑nl(i)(w,b)=n1i=1∑n21(wTx(i)+b−y(i))2
在训练模型时,我们希望寻找一组参数
(
w
∗
,
b
∗
)
(\bm w^*,b^*)
(w∗,b∗),这组参数能最小化所有训练样本上的总损失。
w
∗
,
b
∗
=
arg min
w
,
b
L
(
w
,
b
)
\bm w^*,b^*=\argmin_{w,b} L(\bm w,b)
w∗,b∗=w,bargminL(w,b)
1.1.4 解析解
线性回归是一个比较简单的优化问题,线性回归的解可以用一个公式简单的表示,这类解叫做解析解 。
我们先将偏置
b
b
b合并到参数
w
\bm w
w中,合并方法是在包含所有参数的矩阵中附加一列,我们的预测问题是最小化
∥
y
−
X
w
∥
2
{\Vert \bm y-\bm{Xw} \Vert}^2
∥y−Xw∥2。这在损失平面上只有一个临界点,这个临界点对应于整个区域的损失极小值点。将算是关于
w
\bm w
w的导数设为0,得到解析解:
w
∗
=
(
X
T
X
)
−
1
X
T
y
{\bm w}^*={(\bm X^T \bm X)}^{-1} \bm X^T \bm y
w∗=(XTX)−1XTy
像线性回归这样的简单问题存在解析解,但并不是所有问题都存在解析解。
解析解可以进行很好的数学分析,但解析解对问题的限制很严格,导致它无法广泛应用在深度学习中。
1.1.5 随机梯度下降
梯度下降的方法几乎可以优化所有的深度学习模型。它通过不断地在损失函数递减的方向上更新参数来降低误差。
梯度下降的最简单的用法是计算损失函数(数据集中所有样本的损失均值)关于模型参数的导数(这里也可以称为梯度)。但实际中的执行可能会非常慢。因为在每次更新参数之前,我们必须遍历整个数据集。因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本,这种变体叫做小批量随机梯度下降.
在每次迭代中,我们先随机抽取一个小批量
B
\bm B
B,它是由固定数量的训练样本组成的;然后,计算小批量的损失均值关于模型参数的导数(也可以称为梯度);最后,将梯度乘以一个预先确定的正数
η
\bm \eta
η,并从当前参数的值中减掉。
数学公式表示更新过程:
(
w
,
b
)
←
(
w
,
b
)
−
η
∣
B
∣
∑
i
∈
B
∂
(
w
,
b
)
l
(
i
)
(
w
,
b
)
(\bm w,b) \leftarrow (\bm w,b)- \frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B} \partial_{(\bm w,b)} l^{(i)} (\bm w,b)
(w,b)←(w,b)−∣B∣ηi∈B∑∂(w,b)l(i)(w,b)
梯度更新算法的步骤如下:
(1)初始化模型参数的值,如随机初始化;
(2)从数据集中随机抽取小批量样本且在负梯度方向上更新参数,并不断迭代这一步骤。
对于平方损失和仿射变换,可以写成如下公式:
w
←
w
−
η
∣
B
∣
∑
i
∈
B
∂
(
w
)
l
(
i
)
(
w
,
b
)
=
w
−
η
∣
B
∣
∑
i
∈
B
x
(
i
)
(
w
T
x
(
i
)
+
b
−
y
(
i
)
)
\bm w \leftarrow \bm w-\frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B} \partial_{(w)} l^{(i)} (\bm w,b)=\bm w-\frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B} \bm x^{(i)} (\bm w^T \bm x^{(i)}+b-y^{(i)})
w←w−∣B∣ηi∈B∑∂(w)l(i)(w,b)=w−∣B∣ηi∈B∑x(i)(wTx(i)+b−y(i))
b
←
b
−
η
∣
B
∣
∑
i
∈
B
∂
(
b
)
l
(
i
)
(
w
,
b
)
=
b
−
η
∣
B
∣
∑
i
∈
B
(
w
T
x
(
i
)
+
b
−
y
(
i
)
)
b \leftarrow b-\frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B}\partial_{(b)} l^{(i)} (\bm w,b)=b-\frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B} (\bm w^T \bm x^{(i)}+b-y^{(i)})
b←b−∣B∣ηi∈B∑∂(b)l(i)(w,b)=b−∣B∣ηi∈B∑(wTx(i)+b−y(i))
其中,
∣
B
∣
\vert \bm B \vert
∣B∣表示每个小批量中的样本数,也称为批量大小 ;
η
\eta
η表示学习率 。
批量大小和学习率的值通常是预先手动指定,而不是通过模型训练得到的。
这些可以调整但不在训练过程中更新的参数称为超参数。
调参是选择超参数的过程。超参数通常是我们根据训练迭代结果来调整的,而训练迭代结果是在独立的验证数据集上评估得到的。
1.1.6 模型预测
在训练了预先确定的若干迭代后(或者直到满足某些其他停止条件后),我们记录下模型参数的估计值,表示为
w
^
,
b
^
\bm {\hat {w}},\hat {b}
w^,b^
给定“已学习”的线性回归模型
w
^
T
x
+
b
^
\bm {\hat {w}}^T \bm x +\hat {b}
w^Tx+b^,现在可以通过房屋面积
x
1
x_1
x1和房龄
x
2
x_2
x2两个特征来估计一个新的房屋价格。
给定特征的情况下,估计目标的过程通常称为预测 。
1.2 正态分布与平方损失
通过对噪声分布的假设来解读平方损失目标函数。正态分布和线性回归之间的关系很密切。
正态分布也称为高斯分布,若随机变量
x
x
x具有均值
μ
\mu
μ和方差
σ
2
\sigma^2
σ2,其正态分布概率密度函数如下:
p
(
x
)
=
1
2
π
σ
2
exp
(
−
1
2
σ
2
(
x
−
u
)
2
)
p(x)= \frac 1 {\sqrt {2 \pi \sigma^2}} \exp \Bigl( - \frac 1 {2 \sigma^2}(x-u)^2 \Bigr)
p(x)=2πσ21exp(−2σ21(x−u)2)
定义一个Python函数来计算正态分布:
def normal(x, mu, sigma):
p = 1 / math.sqrt(2 * math.pi * sigma**2)
return p * np.exp(-0.5 / sigma**2 * (x - mu)**2)
# 再次使用numpy进行可视化
x = np.arange(-7, 7, 0.01)
# 均值和标准差对
params = [(0, 1), (0, 2), (3, 1)]
d2l.plot(x, [normal(x, mu, sigma) for mu, sigma in params], xlabel='x',
ylabel='p(x)', figsize=(4.5, 2.5),
legend=[f'mean {mu}, std {sigma}' for mu, sigma in params])
均方误差损失函数可以用于线性回归的一个原因是:假设观测中包含噪声,其中噪声服从正态分布,噪声正态分布如下式:
y
=
w
T
x
+
b
+
ε
,
其中
ε
∼
N
(
0
,
σ
2
)
y=\bm w^T \bm x+b+\varepsilon ,其中\varepsilon \sim N(0,\sigma^2)
y=wTx+b+ε,其中ε∼N(0,σ2)
现在可以写出通过给定的x观测到特定的y的似然:
P
(
y
∣
x
)
=
1
2
π
σ
2
exp
(
−
1
2
σ
2
(
y
−
w
T
x
−
b
)
2
)
P(y \vert \bm x)=\frac 1 {\sqrt {2 \pi \sigma^2}} \exp \Bigl( - \frac 1 {2 \sigma^2}(y-\bm w^T \bm x-b)^2 \Bigr)
P(y∣x)=2πσ21exp(−2σ21(y−wTx−b)2)
根据极大似然估计法,参数
w
\bm w
w和
b
b
b的最优值是使整个数据集的似然最大的值:
P
(
y
∣
X
)
=
∏
i
=
1
n
p
(
y
(
i
)
∣
x
(
i
)
)
P(\bm y \vert \bm X)=\prod_{i=1}^n p(y^{(i)} \vert \bm x^{(i)})
P(y∣X)=i=1∏np(y(i)∣x(i))
根据极大似然估计法选择的估计量称为极大似然估计量。虽然使许多指数函数的乘积最大化看起来很困难,但是可以通过最大化似然对数来简化。由于一般情况下,优化通常指最小化而不是最大化,因此可以改为最小化负对数似然
−
log
P
(
y
∣
X
)
-\log P(\bm y \vert \bm X)
−logP(y∣X)。
−
log
P
(
y
∣
X
)
=
∑
i
=
1
n
1
2
log
(
2
π
σ
2
)
+
1
2
σ
2
(
y
(
i
)
−
w
T
x
(
i
)
−
b
)
2
-\log P(\bm y \vert \bm X) = \sum_{i=1}^n \frac 1 2 \log(2 \pi \sigma^2)+\frac 1 {2 \sigma^2} (y^{(i)}-\bm w^T \bm x^{(i)}-b)^2
−logP(y∣X)=i=1∑n21log(2πσ2)+2σ21(y(i)−wTx(i)−b)2
因此,在高斯噪声的假设下,最小化均方误差等价于对线性模型的极大似然估计。