【动手学深度学习】3.1. 线性回归
目录
- 3. 线性神经网络
- 3.1. 线性回归
- 1)线性回归基本元素
- (1)线性模型
- (2)损失函数(loss function)
- (3)解析解(analytical solution)
- (4)随机梯度下降
- (5)用模型进行预测
- 2)矢量化加速
- 3)正态分布与平方损失
- 4)从线性回归到深度网络
- (1)神经网络图
- (2)生物学
- 5)小结
3. 线性神经网络
在介绍深度神经网络之前,我们需要了解神经网络训练的基础知识。
本章我们将介绍神经网络的整个训练过程, 包括:定义简单的神经网络架构、数据处理、指定损失函数和如何训练模型。
为了更容易学习,我们将从经典算法————线性神经网络开始,介绍神经网络的基础知识。 经典统计学习技术中的线性回归和softmax回归可以视为线性神经网络。
.
3.1. 线性回归
回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。
在机器学习领域中的大多数任务通常都与预测(prediction)有关。 当我们想预测一个数值时,就会涉及到回归问题。
.
1)线性回归基本元素
线性回归(linear regression)定义:
- 假设自变量 x 与因变量 y 呈线性关系,y 可表示为 x 的加权和 + 噪声(通常假设噪声服从正态分布)。
实际例子:预测房屋价格。使用房屋面积和房龄作为特征(自变量),房屋价格作为标签(因变量),基于训练数据集建立预测模型。
-
训练集(training set):包含样本数据的数据集(包含历史房价、面积、房龄)。
-
样本/数据点(sample/data point):单次交易数据(包含特征和标签)。
-
特征/协变量(feature/covariate):用于预测的自变量(面积 x1、房龄 x2)。
-
标签/目标(label/target):待预测的目标变量(房价 y)。
.
(1)线性模型
线性假设是指目标(房屋价格)可以表示为特征(面积和房龄)的加权和,如下:
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
-
w a r e a 和 w a g e w_{\mathrm{area}} \ 和 \ w_{\mathrm{age}} warea 和 wage :称为权重(weight);
-
b :称为偏置(bias)、偏移量(offset)或截距(intercept);
以上公式,是输入特征的一个 仿射变换(affine transformation)。 即通过加权和对特征进行线性变换(linear transformation), 并通过偏置项来进行平移(translation)。
(a)高维数据的线性代数表示:
对于包含 d 个特征的数据,预测结果 y ^ \hat{y} y^ 表示为:
y ^ = w 1 x 1 + w 2 x 2 + ⋯ + w d x d + b \hat{y} = w_1 x_1 + w_2 x_2 + \cdots + w_d x_d + b y^=w1x1+w2x2+⋯+wdxd+b
将所有特征放入向量 x,权重放入向量 w,模型可简洁表示为点积形式:
y ^ = w ⊤ x + b \hat{y} = \mathbf{w}^\top \mathbf{x} + b y^=w⊤x+b
对于整个数据集(包含 n 个样本),特征矩阵 X 的每一行表示一个样本,每列表示一种特征。预测值向量 y ^ \hat{\mathbf{y}} y^ 可通过矩阵 - 向量乘法得到:
y ^ = X w + b \hat{\mathbf{y}} = \mathbf{X} \mathbf{w} + b y^=Xw+b
(b)线性回归的目标:
给定训练数据特征 X 和对应的真实标签 y,线性回归的目标是找到一组权重向量 w 和偏置 b,使得模型在新样本上的预测误差尽可能小。
实际中,观测数据会存在误差,因此模型中加入噪声项,允许预测值与真实值间存在一定偏差。
在寻找最佳模型参数 w 和 b 之前,需要:
-
一种度量模型质量的方法;
-
一种更新模型以提高预测质量的方法。
.
(2)损失函数(loss function)
损失函数(loss function):用于衡量目标实际值与预测值之间的差距,通常为非负数,且数值越小表示损失越小,完美预测时损失为 0。回归问题中常用平方误差函数作为损失函数。
(a)平方误差函数:
对于样本 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)} (\mathbf{w},b)= \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2 l(i)(w,b)=21(y^(i)−y(i))2
其中常数 1/2 不影响损失函数的本质,但在求导后会使系数为 1,简化形式。
(b)数据集损失:
由于平方误差函数中的二次方项, 实际值与预测值之间较大的差异将导致更大的损失。
为衡量模型在整个数据集上的质量,计算训练集 n 个样本上的损失均值(也等价于求和):
L ( w , b ) = 1 n ∑ i = 1 n l ( i ) ( w , b ) = 1 n ∑ i = 1 n 1 2 ( w ⊤ x ( i ) + b − y ( i ) ) 2 L(\mathbf{w}, b) = \frac{1}{n} \sum_{i=1}^{n} l^{(i)}(\mathbf{w}, b) = \frac{1}{n} \sum_{i=1}^{n} \frac{1}{2} (\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)})^2 L(w,b)=n1i=1∑nl(i)(w,b)=n1i=1∑n21(w⊤x(i)+b−y(i))2
(c)优化目标:
在训练模型时,我们希望寻找最优参数 ( w ∗ , b ∗ ) (\mathbf{w}^*, b^*) (w∗,b∗) 最小化总损失。如下式:
w ∗ , b ∗ = argmin w , b L ( w , b ) \mathbf{w}^*, b^* = \underset{\mathbf{w}, b}{\operatorname{argmin}}\ L(\mathbf{w}, b) w∗,b∗=w,bargmin L(w,b)
即通过调整权重 w 和偏置 b,使模型在整个训练集上的预测误差最小化。
.
(3)解析解(analytical solution)
线性回归的解可以用一个公式简单地表达出来, 这类解叫作解析解(analytical solution)。
首先,我们将偏置b合并到参数w中,合并方法是在包含所有参数的矩阵中附加一列。
我们的预测问题是最小化 ∣ ∣ y − X w ∣ ∣ 2 ||\mathbf{y} - \mathbf{X}\mathbf{w}||^2 ∣∣y−Xw∣∣2。 这在损失平面上只有一个临界点,这个临界点对应于整个区域的损失极小点。 将损失关于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
像线性回归这样的简单问题存在解析解,但并不是所有的问题都存在解析解。
解析解可以进行很好的数学分析,但解析解对问题的限制很严格,导致它无法广泛应用在深度学习里。
(a)公式推导过程:
线性回归的目标是最小化损失函数:
L ( w ) = ∥ y − X w ∥ 2 = y ⊤ y − 2 w ⊤ X ⊤ y + w ⊤ X ⊤ X w L(w) = \|y - Xw\|^2 = y^\top y - 2w^\top X^\top y + w^\top X^\top Xw L(w)=∥y−Xw∥2=y⊤y−2w⊤X⊤y+w⊤X⊤Xw
对 w 求导,并令导数为零,得到:
∂ L ∂ w = − 2 X ⊤ y + 2 X ⊤ X w = 0 \frac{\partial L}{\partial w} = -2X^\top y + 2X^\top Xw = 0 ∂w∂L=−2X⊤y+2X⊤Xw=0
整理得:
X ⊤ X w = X ⊤ y X^\top Xw = X^\top y X⊤Xw=X⊤y
当 X ⊤ X X^\top X X⊤X 可逆(即矩阵满秩且非奇异)时,解为:
w ∗ = ( X ⊤ X ) − 1 X ⊤ y w^* = (X^\top X)^{-1}X^\top y w∗=(X⊤X)−1X⊤y
这是线性回归的解析解。它要求特征矩阵 X 列满秩,否则需用梯度下降等数值方法求解。
.
(4)随机梯度下降
梯度下降(gradient descent)是一种通用的优化方法,通过计算损失函数关于模型参数的导数(梯度),沿着梯度递减方向更新参数以降低误差。
(a)小批量随机梯度下降:
传统梯度下降需要遍历整个数据集计算梯度,执行效率低。小批量随机梯度下降(minibatch stochastic gradient descent)通过随机抽取小批量样本计算梯度,提高训练效率。
算法步骤
-
初始化参数 :随机初始化模型参数。
-
迭代更新 :在每次迭代中:
-
随机抽取小批量样本 B \mathcal{B} B。
-
计算小批量样本的平均损失关于模型参数的梯度。
-
按以下公式更新参数:其中, η \eta η 是学习率(learning rate)。
( 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).
-
-
循环迭代:直到 ( w , b ) (\mathbf{w},b) (w,b)收敛满足要求。
(b)超参数:
-
批量大小(Batch Size) :小批量样本的数量,通常手动指定。
-
学习率(Learning Rate) :控制参数更新的步长,是重要的超参数。
超参数不在训练过程中自动更新,需通过调参(超参数调整)在独立的验证数据集上评估并选择合适的值。
(c)收敛性与泛化:
-
即使模型为线性且无噪声,有限步数内估计值也难以使损失函数精确达到最小值,但会缓慢收敛。
-
对于复杂模型(如深度神经网络),损失平面上存在多个最小值,实践中更关注找到在未见数据上低损失的参数组合,即实现良好的泛化(generalization)能力,而非在训练集上损失最小。
.
(5)用模型进行预测
给定“已学习”的线性回归模型 w ^ ⊤ x + b ^ \hat{\mathbf{w}}^\top \mathbf{x} + \hat{b} w^⊤x+b^, 现在我们可以通过房屋面积x_1和房龄x_2来估计一个(未包含在训练数据中的)新房屋价格。 给定特征估计目标的过程通常称为预测(prediction)或推断(inference)。
.
2)矢量化加速
训练模型时,我们常希望能同时处理整个小批量样本。 为实现这一点,需要我们对计算进行矢量化, 从而利用线性代数库,而不是用开销高昂的for循环。
为说明矢量化的重要性,我们考虑对向量相加的两种方法。
-
一种方法,是使用Python的for循环遍历向量;
-
另一种方法中,我们将依赖对
+
的调用。
n = 10000
a = torch.ones([n])
b = torch.ones([n])# 1.for循环方式:用时'0.16749 sec'
c = torch.zeros(n)
timer = Timer()
for i in range(n):c[i] = a[i] + b[i]
f'{timer.stop():.5f} sec'# 2.使用重载的+运算符:用时'0.00042 sec'
timer.start()
d = a + b
f'{timer.stop():.5f} sec'
结果很明显,第二种方法比第一种方法快得多。 矢量化代码通常会带来数量级的加速。 另外,我们将更多的数学运算放到库中,而无须自己编写那么多的计算,从而减少了出错的可能性。
.
3)正态分布与平方损失
(1)正态分布:
接下来,我们通过对噪声分布的假设来解读平方损失目标函数。
正态分布和线性回归之间的关系很密切。 正态分布(normal distribution),也称为高斯分布(Gaussian distribution)。
若随机变量具有均值 μ \mu μ和方差 σ 2 \sigma^2 σ2(标准差 σ \sigma σ),其正态分布概率密度函数如下:
p ( x ) = 1 2 π σ 2 exp ( − 1 2 σ 2 ( x − μ ) 2 ) p(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (x - \mu)^2\right) p(x)=2πσ21exp(−2σ21(x−μ)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)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])
就像我们所看到的,改变均值会产生沿x轴的偏移,增加方差将会分散分布、降低其峰值。
.
(2)均方损失:
均方误差损失函数(简称均方损失)可以用于线性回归的一个原因是: 我们假设了观测中包含噪声,其中噪声服从正态分布。 噪声正态分布如下式:
y = w ⊤ x + b + ϵ , ϵ ∼ N ( 0 , σ 2 ) y = \mathbf{w}^\top \mathbf{x} + b + \epsilon, \ \ \epsilon \sim \mathcal{N}(0, \sigma^2) y=w⊤x+b+ϵ, ϵ∼N(0,σ2)
因此,我们现在可以写出通过给定的观测x到特定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}} \exp\left(-\frac{1}{2 \sigma^2} (y - \mathbf{w}^\top \mathbf{x} - b)^2\right) P(y∣x)=2πσ21exp(−2σ21(y−w⊤x−b)2)
现在,根据极大似然估计法,参数w和b的最优值是使整个数据集的似然最大的值:
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 ) -\log P(\mathbf y \mid \mathbf X) −logP(y∣X)。 由此可以得到的数学公式是:
− 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)} - b\right)^2 −logP(y∣X)=i=1∑n21log(2πσ2)+2σ21(y(i)−w⊤x(i)−b)2
现在我们只需要假设 σ \sigma σ是某个固定常数就可以忽略第一项, 因为第一项不依赖于w和b。 现在第二项除了常数 1 σ 2 \frac{1}{\sigma^2} σ21外,其余部分和前面介绍的均方误差是一样的。 幸运的是,上面式子的解并不依赖于 σ \sigma σ。 因此,在高斯噪声的假设下,最小化均方误差等价于对线性模型的极大似然估计。
.
4)从线性回归到深度网络
虽然神经网络比线性模型复杂得多,但我们可以用神经网络“层”的概念来重新描述线性模型,从而将线性模型视为一种简单的神经网络。
(1)神经网络图
线性回归模型可视为一个单层神经网络,如图所示:
-
输入层 :输入为特征向量 x ,输入层的输入数为特征维度 d。
-
输出层 :输出为预测值 y ^ \hat{y} y^,输出层的输出数为 1。
-
全连接层(稠密层) :线性回归的输出层是全连接层,每个输入与输出相连,通过线性变换(加权和)计算输出。
图3.1.2 线性回归是一个单层神经网络。
.
(2)生物学
生物神经元结构,如图所示:
-
树突(输入)→ 细胞核(加权求和 y = ∑ i x i w i + b y = \sum_i x_i w_i + b y=∑ixiwi+b)→ 轴突(输出,常经非线性处理)。
-
突触权重决定输入影响(激活/抑制)。
图3.1.3 真实的神经元。
与深度学习的关联:
-
人工神经元模型受此启发,但现代深度学习主要驱动力并非神经科学。
-
类比:飞机受鸟类启发,但航空发展不依赖鸟类学;深度学习更多源于数学、统计学和计算机科学。
.
5)小结
-
机器学习模型中的关键要素是训练数据、损失函数、优化算法,还有模型本身。
-
矢量化使数学表达上更简洁,同时运行的更快。
-
最小化目标函数和执行极大似然估计等价。
-
线性回归模型也是一个简单的神经网络。
.
声明:资源可能存在第三方来源,若有侵权请联系删除!