当前位置: 首页 > news >正文

【动手学深度学习】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=wareaarea+wageage+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^=wx+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=1nl(i)(w,b)=n1i=1n21(wx(i)+by(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 ∣∣yXw2。 这在损失平面上只有一个临界点,这个临界点对应于整个区域的损失极小点。 将损失关于w的导数设为0,得到解析解:

w ∗ = ( X ⊤ X ) − 1 X ⊤ y \mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y} w=(XX)1Xy

像线性回归这样的简单问题存在解析解,但并不是所有的问题都存在解析解。

解析解可以进行很好的数学分析,但解析解对问题的限制很严格,导致它无法广泛应用在深度学习里。

(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)=yXw2=yy2wXy+wXXw

对 w 求导,并令导数为零,得到:

∂ L ∂ w = − 2 X ⊤ y + 2 X ⊤ X w = 0 \frac{\partial L}{\partial w} = -2X^\top y + 2X^\top Xw = 0 wL=2Xy+2XXw=0

整理得:

X ⊤ X w = X ⊤ y X^\top Xw = X^\top y XXw=Xy

X ⊤ X X^\top X XX 可逆(即矩阵满秩且非奇异)时,解为:

w ∗ = ( X ⊤ X ) − 1 X ⊤ y w^* = (X^\top X)^{-1}X^\top y w=(XX)1Xy

这是线性回归的解析解。它要求特征矩阵 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ηiB(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πσ2 1exp(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=wx+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(yx)=2πσ2 1exp(2σ21(ywxb)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(yX)=i=1np(y(i)x(i))

根据极大似然估计法选择的估计量称为极大似然估计量

虽然使许多指数函数的乘积最大化看起来很困难, 但是我们可以在不改变目标的前提下,通过最大化似然对数来简化。

由于历史原因,优化通常是说最小化而不是最大化。 我们可以改为最小化负对数似然 − log ⁡ P ( y ∣ X ) -\log P(\mathbf y \mid \mathbf X) logP(yX)。 由此可以得到的数学公式是:

− 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(yX)=i=1n21log(2πσ2)+2σ21(y(i)wx(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)小结

  • 机器学习模型中的关键要素是训练数据、损失函数、优化算法,还有模型本身。

  • 矢量化使数学表达上更简洁,同时运行的更快。

  • 最小化目标函数和执行极大似然估计等价。

  • 线性回归模型也是一个简单的神经网络。

.


声明:资源可能存在第三方来源,若有侵权请联系删除!

http://www.xdnf.cn/news/904393.html

相关文章:

  • 集成电路设计:从概念到实现的完整解析优雅草卓伊凡
  • 【配置 YOLOX 用于按目录分类的图片数据集】
  • coze智能体后端接入问题:
  • 视觉分析在人员行为属性检测中的应用
  • 未来十年 Python 学习路线全解析
  • 为什么说数列是特殊的函数
  • NLP学习路线图(二十九):BERT及其变体
  • Python Pandas库超详细教程:从入门到精通实战指南
  • 使用MinIO搭建自己的分布式文件存储
  • 打造你的 Android 图像编辑器:深入解析 PhotoEditor 开源库
  • 【Linux】Linux基础指令3
  • django blank 与 null的区别
  • 【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
  • VTK|8.2.0升级到9.4.2遇到的问题及解决方法
  • 使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
  • 小白如何在cursor中使用mcp服务——以使用notion的api为例
  • [TIP] Ubuntu 22.04 配置多个版本的 GCC 环境
  • 《深度学习入门:基于python的理论与实现》观后感
  • Emacs定制:编译
  • 深入了解linux系统—— 进程池
  • 使用docker 安装Redis 带配置文件(x86和arm)版本
  • 从边界防护到内生安全:企业网络安全进化路线图
  • docker数据管理
  • vue-print-nb 打印相关问题
  • 电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
  • 【推荐算法】DeepFM:特征交叉建模的革命性架构
  • 前端实现视频/直播预览
  • 【Kubernetes】K8s 之 ETCD - 恢复备份
  • 职业生涯思考
  • Tomcat全方位监控实施方案指南