Liner Regression
1.线性回归的基本要素2.线性模型3.损失函数
解析解 4.随机梯度下降(SGD)
用模型进行预测 5.矢量化加速 正态分布与平方损失小结
Liner Regression回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。
当我们想预测一个数值时,就会涉及到回归问题。 常见的例子包括:预测价格(房屋、股票等)、预测住院时间(针对住院病人等)、 预测需求(零售销量等)。 但不是所有的预测都是回归问题。 在后面的章节中,我们将介绍分类问题。分类问题的目标是预测数据属于一组类别中的哪一个。
线性回归基于几个简单的假设:
假设自变量 x 和因变量 y 之间的关系是线性的这里通常允许包含观测值的一些噪声我们假设任何噪声都比较正常,如噪声遵循正态分布。
举例说明:我们希望根据房屋的面积(平方英尺)和房龄(年)来估算房屋价格(美元)。
我们需要收集一个真实的数据集。
这个数据集包括了房屋的销售价格、面积和房龄。
该数据集称为训练数据集(training data set) 或训练集(training set)。一次房屋交易相对应的数据,称为样本(sample), 也可以称为数据点(data point)或数据样本(data instance)。房屋价格称为labeling or target(标签或目标)预测所依据的自变量(面积和房龄)称为特征(feature)或协变量(covariate)。 2.线性模型
p r i c e = w a r e a ⋅ a r e a + w a g e ⋅ a g e + b . mathrm{price} = w_{mathrm{area}} cdot mathrm{area} + w_{mathrm{age}} cdot mathrm{age} + b. price=warea⋅area+wage⋅age+b.
warea 和wage 称为权重(weight)b 称为偏置(bias)、偏移量(offset)或截距(intercept)可以增强模型表达能力。仿射变换的特点是通过加权和对特征进行线性变换(linear transformation), 并通过偏置项来进行平移(translation)
由于在机器学习中,我们经常使用高维数据集,所以通常我们用线性代数的方法进行表示:
y
^
=
w
1
x
1
+
.
.
.
+
w
d
x
d
+
b
.
hat{y} = w_1 x_1 + ... + w_d x_d + b.
y^=w1x1+...+wdxd+b.
y
^
=
w
⊤
x
+
b
.
hat{y} = mathbf{w}^top mathbf{x} + b.
y^=w⊤x+b.
y
^
=
X
w
+
b
{hat{mathbf{y}}} = mathbf{X} mathbf{w} + b
y^=Xw+b
损失函数(loss function)能够量化目标的实际值与预测值之间的差距。
线性回归中,我们通常使用均方差作为我们的loss function。
l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 . l^{(i)}(mathbf{w}, b) = frac{1}{2} left(hat{y}^{(i)} - y^{(i)}right)^2. l(i)(w,b)=21(y^(i)−y(i))2.
在训练模型时,我们希望寻找一组参数(
w
∗
,
b
∗
mathbf{w}^*, b^*
w∗,b∗),
这组参数能最小化在所有训练样本上的总损失。如下式:
w ∗ , b ∗ = * a r g m i n w , b L ( w , b ) . mathbf{w}^*, b^* = operatorname*{argmin}_{mathbf{w}, b} L(mathbf{w}, b). w∗,b∗=*argminw,b L(w,b).
解析解首先,我们将偏置
b
b
b合并到参数
w
mathbf{w}
w中,合并方法是在包含所有参数的矩阵中附加一列。
我们的预测问题是最小化
∥
y
−
X
w
∥
2
|mathbf{y} - mathbf{X}mathbf{w}|^2
∥y−Xw∥2。
这在损失平面上只有一个临界点,这个临界点对应于整个区域的损失极小点。
将损失关于
w
mathbf{w}
w的导数设为0,得到解析解:
w ∗ = ( X ⊤ X ) − 1 X ⊤ y . mathbf{w}^* = (mathbf X^top mathbf X)^{-1}mathbf X^top mathbf{y}. w∗=(X⊤X)−1X⊤y.
4.随机梯度下降(SGD)在每一次更新参数之前,我们必须遍历整个数据集。 因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本, 这种变体叫做小批量随机梯度下降(minibatch stochastic gradient descent)。
首先随机抽样一个小批量 B , 它是由固定数量的训练样本组成我们计算小批量的平均损失关于模型参数的导数(也可以称为梯度)
我们用数学表达式表示该过程:
(
w
,
b
)
←
(
w
,
b
)
−
η
∣
B
∣
∑
i
∈
B
∂
(
w
,
b
)
l
(
i
)
(
w
,
b
)
.
(mathbf{w},b) leftarrow (mathbf{w},b) - frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} partial_{(mathbf{w},b)} l^{(i)}(mathbf{w},b).
(w,b)←(w,b)−∣B∣ηi∈B∑∂(w,b)l(i)(w,b).
n为学习率
算法步骤如下:
初始化模型参数的值,如随机初始化;从数据集中随机抽取小批量样本且在负梯度的方向上更新参数,并不断迭代这一步骤。
对于平方损失和仿射变换,我们可以明确地写成如下形式:
w
←
w
−
η
∣
B
∣
∑
i
∈
B
∂
w
l
(
i
)
(
w
,
b
)
=
w
−
η
∣
B
∣
∑
i
∈
B
x
(
i
)
(
w
⊤
x
(
i
)
+
b
−
y
(
i
)
)
,
b
←
b
−
η
∣
B
∣
∑
i
∈
B
∂
b
l
(
i
)
(
w
,
b
)
=
b
−
η
∣
B
∣
∑
i
∈
B
(
w
⊤
x
(
i
)
+
b
−
y
(
i
)
)
.
begin{aligned} mathbf{w} &leftarrow mathbf{w} - frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} partial_{mathbf{w}} l^{(i)}(mathbf{w}, b) = mathbf{w} - frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} mathbf{x}^{(i)} left(mathbf{w}^top mathbf{x}^{(i)} + b - y^{(i)}right),\ b &leftarrow b - frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} partial_b l^{(i)}(mathbf{w}, b) = b - frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} left(mathbf{w}^top mathbf{x}^{(i)} + b - y^{(i)}right). end{aligned}
wb←w−∣B∣ηi∈B∑∂wl(i)(w,b)=w−∣B∣ηi∈B∑x(i)(w⊤x(i)+b−y(i)),←b−∣B∣ηi∈B∑∂bl(i)(w,b)=b−∣B∣ηi∈B∑(w⊤x(i)+b−y(i)).
给定“已学习”的线性回归模型
w
^
⊤
x
+
b
^
hat{mathbf{w}}^top mathbf{x} + hat{b}
w^⊤x+b^,
现在我们可以通过房屋面积
x
1
x_1
x1和房龄
x
2
x_2
x2来估计一个(未包含在训练数据中的)新房屋价格。
给定特征估计目标的过程通常称为预测(prediction)
在训练我们的模型时,我们经常希望能够同时处理整个小批量的样本。
为了实现这一点,需要(我们对计算进行矢量化,
从而利用线性代数库,而不是在Python中编写开销高昂的for循环)。
%matplotlib inline import math import time import numpy as np import tensorflow as tf from d2l import tensorflow as d2l
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
⊤
x
+
b
+
ϵ
,
y = mathbf{w}^top mathbf{x} + b + epsilon,
y=w⊤x+b+ϵ,
其中,
ϵ
∼
N
(
0
,
σ
2
)
epsilon sim mathcal{N}(0, sigma^2)
ϵ∼N(0,σ2)。
因此,我们现在可以写出通过给定的
x
mathbf{x}
x观测到特定
y
y
y的似然(likelihood):
P
(
y
∣
x
)
=
1
2
π
σ
2
exp
(
−
1
2
σ
2
(
y
−
w
⊤
x
−
b
)
2
)
.
P(y mid mathbf{x}) = frac{1}{sqrt{2 pi sigma^2}} expleft(-frac{1}{2 sigma^2} (y - mathbf{w}^top mathbf{x} - b)^2right).
P(y∣x)=2πσ2
1exp(−2σ21(y−w⊤x−b)2).
P
(
y
∣
X
)
=
∏
i
=
1
n
p
(
y
(
i
)
∣
x
(
i
)
)
.
P(mathbf y mid mathbf X) = prod_{i=1}^{n} p(y^{(i)}|mathbf{x}^{(i)}).
P(y∣X)=i=1∏np(y(i)∣x(i)).
−
log
P
(
y
∣
X
)
=
∑
i
=
1
n
1
2
log
(
2
π
σ
2
)
+
1
2
σ
2
(
y
(
i
)
−
w
⊤
x
(
i
)
−
b
)
2
.
-log P(mathbf y mid mathbf X) = sum_{i=1}^n frac{1}{2} log(2 pi sigma^2) + frac{1}{2 sigma^2} left(y^{(i)} - mathbf{w}^top mathbf{x}^{(i)} - bright)^2.
−logP(y∣X)=i=1∑n21log(2πσ2)+2σ21(y(i)−w⊤x(i)−b)2.
现在我们只需要假设
σ
sigma
σ是某个固定常数就可以忽略第一项,
因为第一项不依赖于
w
mathbf{w}
w和
b
b
b。
现在第二项除了常数
1
σ
2
frac{1}{sigma^2}
σ21外,其余部分和前面介绍的均方误差是一样的。
幸运的是,上面式子的解并不依赖于
σ
sigma
σ。
因此,在高斯噪声的假设下,最小化均方误差等价于对线性模型的极大似然估计。
机器学习模型中的关键要素是训练数据、损失函数、优化算法,还有模型本身。矢量化使数学表达上更简洁,同时运行的更快。最小化目标函数和执行极大似然估计等价。线性回归模型也是一个简单的神经网络。



