目录
- 一、线性回归
- 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
因此,在高斯噪声的假设下,最小化均方误差等价于对线性模型的极大似然估计。