深度学习pytorch--线性回归(一)

线性回归

  • 线性回归案例
    • 提出问题
      • 模型定义
      • 模型训练
        • (1) 训练数据
        • (2) 损失函数
        • (3) 优化算法
      • 模型预测
    • 线性回归的表示方法
      • 神经网络图
      • 矢量计算
    • 小结

线性回归案例

线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。

提出问题

目标是预测一栋房子的售出价格,假设价格只取决于面积和房龄这两个因素。

模型定义

设房屋的面积为 x1x_1x1,房龄为 x2x_2x2,售出价格为 yyy。我们需要建立基于输入 x1x_1x1x2x_2x2 来计算输出 yyy 的表达式,也就是模型(model)。顾名思义,线性回归假设输出与各个输入之间是线性关系:
y^=x1w1+x2w2+b\hat{y} = x_1 w_1 + x_2 w_2 + b y^=x1w1+x2w2+b
其中 w1w_1w1w2w_2w2 是权重(weight),bbb 是偏差(bias),且均为标量。它们是线性回归模型的参数(parameter)。模型输出 y^\hat{y}y^ 是线性回归对真实价格 yyy 的预测或估计。我们通常允许它们之间有一定误差。

模型训练

接下来我们需要通过数据来寻找特定的模型参数值,使模型在数据上的误差尽可能小。这个过程叫作模型训练(model training)。下面我们介绍模型训练所涉及的3个要素。

(1) 训练数据

我们通常收集一系列的真实数据,例如多栋房屋的真实售出价格和它们对应的面积和房龄。我们希望在这个数据上面寻找模型参数来使模型的预测价格与真实价格的误差最小。
在机器学习术语里,

  • 该数据集被称为训练集(training set)
  • 一栋房屋被称为一个样本(sample)
  • 其真实售出价格叫作标签(label)
  • 用来预测标签的两个因素叫作特征(feature)。特征用来表征样本的特点。

假设我们采集的样本数为 nnn,索引为 iii 的样本的特征为 x1(i)x_1^{(i)}x1(i)x2(i)x_2^{(i)}x2(i),标签为 y(i)y^{(i)}y(i)。对于索引为 iii 的房屋,线性回归模型的房屋价格预测表达式为
y^(i)=x1(i)w1+x2(i)w2+b\hat{y}^{(i)} = x_1^{(i)} w_1 + x_2^{(i)} w_2 + b y^(i)=x1(i)w1+x2(i)w2+b

(2) 损失函数

在模型训练中,我们需要衡量价格预测值与真实值之间的误差。通常我们会选取一个非负数作为误差,且数值越小表示误差越小。使用均方误差(MSE)。它在评估索引为 iii 的样本误差的表达式为

ℓ(i)(w1,w2,b)=12(y^(i)−y(i))2\ell^{(i)}(w_1, w_2, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2(i)(w1,w2,b)=21(y^(i)y(i))2

其中常数 12\frac 1 221 使对平方项求导后的常数系数为1,这样在形式上稍微简单一些。显然,误差越小表示预测价格与真实价格越相近,且当二者相等时误差为0。
通常,我们用训集中所有样本误差的平均来衡量模型预测的质量,即

ℓ(w1,w2,b)=1n∑i=1nℓ(i)(w1,w2,b)=1n∑i=1n12(x1(i)w1+x2(i)w2+b−y(i))2\ell(w_1, w_2, b) =\frac{1}{n} \sum_{i=1}^n \ell^{(i)}(w_1, w_2, b) =\frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right)^2 (w1,w2,b)=n1i=1n(i)(w1,w2,b)=n1i=1n21(x1(i)w1+x2(i)w2+by(i))2

在模型训练中,我们希望找出一组模型参数,记为 w1∗,w2∗,b∗w_1^*, w_2^*, b^*w1,w2,b,来使训练样本平均损失最小:

w1∗,w2∗,b∗=arg⁡min⁡w1,w2,bℓ(w1,w2,b)w_1^*, w_2^*, b^* = \underset{w_1, w_2, b}{\arg\min} \ell(w_1, w_2, b) w1,w2,b=w1,w2,bargmin(w1,w2,b)

(3) 优化算法

在优化算法中,小批量随机梯度下降(mini-batch stochastic gradient descent)在深度学习中被广泛使用。它的算法很简单:先选取一组模型参数的初始值,如随机选取;接下来对参数进行多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代中,先随机均匀采样一个由固定数目训练数据样本所组成的小批量(mini-batch)B\mathcal{B}B,然后求小批量中数据样本的平均损失有关模型参数的导数(梯度),最后用此结果与预先设定的一个正数的乘积作为模型参数在本次迭代的减小量。

在训练本节讨论的线性回归模型的过程中,模型的每个参数将作如下迭代:

w1←w1−η∣B∣∑i∈B∂ℓ(i)(w1,w2,b)∂w1=w1−η∣B∣∑i∈Bx1(i)(x1(i)w1+x2(i)w2+b−y(i)),w2←w2−η∣B∣∑i∈B∂ℓ(i)(w1,w2,b)∂w2=w2−η∣B∣∑i∈Bx2(i)(x1(i)w1+x2(i)w2+b−y(i)),b←b−η∣B∣∑i∈B∂ℓ(i)(w1,w2,b)∂b=b−η∣B∣∑i∈B(x1(i)w1+x2(i)w2+b−y(i)).\begin{aligned} w_1 &\leftarrow w_1 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_1} = w_1 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}x_1^{(i)} \left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right),\\ w_2 &\leftarrow w_2 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_2} = w_2 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}x_2^{(i)} \left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right),\\ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial b} = b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}\left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right). \end{aligned} w1w2bw1BηiBw1(i)(w1,w2,b)=w1BηiBx1(i)(x1(i)w1+x2(i)w2+by(i)),w2BηiBw2(i)(w1,w2,b)=w2BηiBx2(i)(x1(i)w1+x2(i)w2+by(i)),bBηiBb(i)(w1,w2,b)=bBηiB(x1(i)w1+x2(i)w2+by(i)).

在上式中,∣B∣|\mathcal{B}|B 代表每个小批量中的样本个数(批量大小,batch size),η\etaη 称作学习率(learning rate)并取正数。需要强调的是,这里的批量大小和学习率的值是人为设定的,并不是通过模型训练学出的,因此叫作超参数(hyperparameter)。我们通常所说的“调参”指的正是调节超参数,例如通过反复试错来找到超参数合适的值。在少数情况下,超参数也可以通过模型训练学出。本书对此类情况不做讨论。

模型预测

模型训练完成后,我们将模型参数 w1,w2,bw_1, w_2, bw1,w2,b 在优化算法停止时的值分别记作 w^1,w^2,b^\hat{w}_1, \hat{w}_2, \hat{b}w^1,w^2,b^。注意,这里我们得到的并不一定是最小化损失函数的最优解 w1∗,w2∗,b∗w_1^*, w_2^*, b^*w1,w2,b,而是对最优解的一个近似。然后,我们就可以使用学出的线性回归模型 x1w^1+x2w^2+b^x_1 \hat{w}_1 + x_2 \hat{w}_2 + \hat{b}x1w^1+x2w^2+b^ 来估算训练数据集以外任意一栋面积(平方米)为x1x_1x1、房龄(年)为x2x_2x2的房屋的价格了。这里的估算也叫作模型预测、模型推断或模型测试。

线性回归的表示方法

我们已经阐述了线性回归的模型表达式、训练和预测。下面我们解释线性回归与神经网络的联系,以及线性回归的矢量计算表达式。

神经网络图

在深度学习中,我们可以使用神经网络图直观地表现模型结构。为了更清晰地展示线性回归作为神经网络的结构,下图使用神经网络图表示本节中介绍的线性回归模型。神经网络图隐去了模型参数权重和偏差。

在这里插入图片描述

在上图所示的神经网络中,输入分别为 x1x_1x1x2x_2x2,因此输入层的输入个数为2。输入个数也叫特征数或特征向量维度。图中网络的输出为 ooo,输出层的输出个数为1。需要注意的是,我们直接将图中神经网络的输出 ooo 作为线性回归的输出,即 y^=o\hat{y} = oy^=o。由于输入层并不涉及计算,按照惯例,上图所示的神经网络的层数为1。所以,线性回归是一个单层神经网络。输出层中负责计算 ooo 的单元又叫神经元。在线性回归中,ooo 的计算依赖于 x1x_1x1x2x_2x2。也就是说,输出层中的神经元和输入层中各个输入完全连接。因此,这里的输出层又叫全连接层(fully-connected layer)或稠密层(dense layer)。

矢量计算

让我们再次回到本节的房价预测问题。如果我们对训练数据集里的3个房屋样本(索引分别为1、2和3)逐一预测价格,将得到
y^(1)=x1(1)w1+x2(1)w2+b,y^(2)=x1(2)w1+x2(2)w2+b,y^(3)=x1(3)w1+x2(3)w2+b.\begin{aligned} \hat{y}^{(1)} &= x_1^{(1)} w_1 + x_2^{(1)} w_2 + b,\\ \hat{y}^{(2)} &= x_1^{(2)} w_1 + x_2^{(2)} w_2 + b,\\ \hat{y}^{(3)} &= x_1^{(3)} w_1 + x_2^{(3)} w_2 + b. \end{aligned} y^(1)y^(2)y^(3)=x1(1)w1+x2(1)w2+b,=x1(2)w1+x2(2)w2+b,=x1(3)w1+x2(3)w2+b.

现在,我们将上面3个等式转化成矢量计算。设

y^=[y^(1)y^(2)y^(3)],X=[x1(1)x2(1)x1(2)x2(2)x1(3)x2(3)],w=[w1w2]\boldsymbol{\hat{y}} = \begin{bmatrix} \hat{y}^{(1)} \\ \hat{y}^{(2)} \\ \hat{y}^{(3)} \end{bmatrix},\quad \boldsymbol{X} = \begin{bmatrix} x_1^{(1)} & x_2^{(1)} \\ x_1^{(2)} & x_2^{(2)} \\ x_1^{(3)} & x_2^{(3)} \end{bmatrix},\quad \boldsymbol{w} = \begin{bmatrix} w_1 \\ w_2 \end{bmatrix} y^=y^(1)y^(2)y^(3),X=x1(1)x1(2)x1(3)x2(1)x2(2)x2(3),w=[w1w2]

对3个房屋样本预测价格的矢量计算表达式为y^=Xw+b,\boldsymbol{\hat{y}} = \boldsymbol{X} \boldsymbol{w} + b,y^=Xw+b, 其中的加法运算使用了广播机制(参见2.2节)。例如:

a = torch.ones(3)
b = 10
print(a + b)

输出:

tensor([11., 11., 11.])

广义上讲,当数据样本数为 nnn,特征数为 ddd 时,线性回归的矢量计算表达式为
y^=Xw+b\boldsymbol{\hat{y}} = \boldsymbol{X} \boldsymbol{w} + b y^=Xw+b
其中模型输出 y^∈Rn×1\boldsymbol{\hat{y}} \in \mathbb{R}^{n \times 1}y^Rn×1 批量数据样本特征 X∈Rn×d\boldsymbol{X} \in \mathbb{R}^{n \times d}XRn×d,权重 w∈Rd×1\boldsymbol{w} \in \mathbb{R}^{d \times 1}wRd×1, 偏差 b∈Rb \in \mathbb{R}bR。相应地,批量数据样本标签 y∈Rn×1\boldsymbol{y} \in \mathbb{R}^{n \times 1}yRn×1。设模型参数 θ=[w1,w2,b]⊤\boldsymbol{\theta} = [w_1, w_2, b]^\topθ=[w1,w2,b],我们可以重写损失函数为
ℓ(θ)=12n(y^−y)⊤(y^−y)\ell(\boldsymbol{\theta})=\frac{1}{2n}(\boldsymbol{\hat{y}}-\boldsymbol{y})^\top(\boldsymbol{\hat{y}}-\boldsymbol{y}) (θ)=2n1(y^y)(y^y)

小批量随机梯度下降的迭代步骤将相应地改写为
θ←θ−η∣B∣∑i∈B∇θℓ(i)(θ),\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \nabla_{\boldsymbol{\theta}} \ell^{(i)}(\boldsymbol{\theta}), θθBηiBθ(i)(θ),

其中梯度是损失有关3个为标量的模型参数的偏导数组成的向量:
∇θℓ(i)(θ)=[∂ℓ(i)(w1,w2,b)∂w1∂ℓ(i)(w1,w2,b)∂w2∂ℓ(i)(w1,w2,b)∂b]=[x1(i)(x1(i)w1+x2(i)w2+b−y(i))x2(i)(x1(i)w1+x2(i)w2+b−y(i))x1(i)w1+x2(i)w2+b−y(i)]=[x1(i)x2(i)1](y^(i)−y(i))\nabla_{\boldsymbol{\theta}} \ell^{(i)}(\boldsymbol{\theta})= \begin{bmatrix} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_1} \\ \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_2} \\ \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial b} \end{bmatrix} = \begin{bmatrix} x_1^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \\ x_2^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \\ x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)} \end{bmatrix}= \begin{bmatrix} x_1^{(i)} \\ x_2^{(i)} \\ 1 \end{bmatrix} (\hat{y}^{(i)} - y^{(i)}) θ(i)(θ)=w1(i)(w1,w2,b)w2(i)(w1,w2,b)b(i)(w1,w2,b)=x1(i)(x1(i)w1+x2(i)w2+by(i))x2(i)(x1(i)w1+x2(i)w2+by(i))x1(i)w1+x2(i)w2+by(i)=x1(i)x2(i)1(y^(i)y(i))

小结

  • 和大多数深度学习模型一样,对于线性回归这样一种单层神经网络,它的基本要素包括模型、训练数据、损失函数和优化算法。
  • 既可以用神经网络图表示线性回归,又可以用矢量计算表示该模型。
  • 应该尽可能采用矢量计算,以提升计算效率。

注:本节除了代码之外与原书基本相同,原书传送门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 vim 的 magic 设置

文章目录一、magic 介绍二、设置 magic(一)长效设置(二)临时设置(三)magic 示例1. 匹配由 3 个以字母 a 开头,以字母 c 结尾,中间是任意一个字符的子串组成的字符串(1&am…

语言逻辑运算符两侧运算对象_5.3 C语言逻辑运算符与表达式

01优先次序 1、有3种逻辑运算符:与(AND),或(OR),非(NOT)。在basic和Pascal等语言可以在程序中直接用and,or,not作为逻辑运算符。在C语言中不能再程…

rabbitmq 传递文件_使用RabbitMQ进行消息传递

rabbitmq 传递文件RabbitMQ是一个强大的消息代理,可用于实现不同的消息传递模式。 即使有出色的教程 (使用不同的语言和框架),也很难理解这些概念。 在这篇文章中,我想展示一些可以用RabbitMQ实现的不同范例&#xff0…

正则表达式的贪婪模式、非贪婪模式、占有模式

文章目录一、Greediness(贪婪型)(一)贪婪模式示例(二)贪婪模式的匹配过程(贪婪模式的回溯)二、Reluctant(勉强型)(一)非贪婪模式示例&…

深度学习pytorch--线性回归(二)

线性回归无框架实现线性回归的从零开始实现生成数据集(简单的人工构造)读取数据初始化模型参数定义模型定义损失函数定义优化算法训练模型小结完整代码(可直接运行)线性回归的从零开始实现 为了深入理解深度学习是如何工作的,本节不使用强大的深度学习框架&#xf…

乱码 设置界面_和平精英:压轴更新后BUG频出,设置界面崩盘,界面全白变乱码...

引言:陌瑾出品,争做精品!大家好,我是你们的老朋友,陌瑾。和平精英作为当下比较热门的一款PVP即时战斗手游,在6月17日,海岛2.0版本也重装上阵,此次地图更新是和平精英游戏上线以来第1…

spring mvc教程_Spring MVC教程

spring mvc教程1.简介 作为企业Java开发人员,这项工作的主要重点之一是开发Web应用程序。 对于Web应用程序,后果还包括许多挑战。 具体来说,其中一些是状态管理,工作流和验证。 HTTP协议的无状态性质只会使事情变得更加复杂。 Spr…

正则表达式实例解读

文章目录正则式 a?正则式 ^\w\d正则式 (\d){4}|\1{2}正则式 \d{4}|\d{2}正则式 a? 正则式&#xff1a;a? 被匹配的字符串&#xff1a;a<>aava</>ab 看下面的 Java 代码&#xff1a; String test "a<>aava</>abb"; String reg "a…

深度学习pytorch--线性回归(三)

线性回归pytorch框架实现线性回归的简洁实现生成数据集读取数据定义模型初始化模型参数定义损失函数定义优化算法训练模型小结完整代码:线性回归的简洁实现 随着深度学习框架的发展&#xff0c;开发深度学习应用变得越来越便利。实践中&#xff0c;我们通常可以用比上一节更简…

smpp客户端_SMPP Java示例(客户端)

smpp客户端这篇文章通过创建一个简单的SMPP客户端向移动用户发送短信来提供SMPP Java示例&#xff0c;使用该客户端我们可以简单地提交以将消息发送给单个移动用户&#xff0c;也可以一次将消息广播给多个移动用户。另外&#xff0c;我们将验证交货收据。 出于客户端的目的&…

正则表达式的环视深度剖析

文章目录一、环视基础二、顺序环视匹配过程&#xff08;一&#xff09;顺序肯定环视匹配过程&#xff08;二&#xff09;顺序否定环视匹配过程三、逆序环视匹配过程&#xff08;一&#xff09;逆序环视基础&#xff08;二&#xff09;逆序肯定环视匹配过程1. 逆序表达式的长度固…

深度学习pytorch--softmax回归(一)

softmax回归 前几节介绍的线性回归模型适用于输出为连续值的情景。在另一类情景中&#xff0c;模型输出可以是一个像图像类别这样的离散值。对于这样的离散值预测问题&#xff0c;我们可以使用诸如softmax回归在内的分类模型。和线性回归不同&#xff0c;softmax回归的输出单元…

python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...

接上篇文章《如何用python实现excel中的vlookup功能&#xff1f;》&#xff0c;上篇说到&#xff0c;最近我在做一个小项目&#xff0c;也是用python操作excel解决财务审计工作上的一些问题&#xff0c;以便提高工作效率及其准确性。最终目的&#xff0c;刀哥是想做应收账款账龄…

阿帕奇跨域_阿帕奇齿轮泵

阿帕奇跨域Apache Gearpump是一个实时大数据流引擎。 它于2014年中期在GitHub上作为一个开源项目在英特尔构想&#xff0c;并于2016年3月8日进入Apache孵化。Gearpump的名称是对工程术语“齿轮泵”的指称&#xff0c;它是一个超级简单的泵&#xff0c;由以下组成只有两个齿轮&a…

正则表达式之 NFA 引擎匹配原理详解

文章目录一、为什么要了解引擎匹配原理二、正则表达式引擎三、预备知识&#xff08;一&#xff09;字符串组成&#xff08;二&#xff09;占有字符和零宽度&#xff08;三&#xff09;控制权和传动四、正则表达式简单匹本过程&#xff08;一&#xff09;基础匹配过程&#xff0…

阿帕奇跨域_阿帕奇光束

阿帕奇跨域Apache Beam是一个开放源代码统一模型&#xff0c;用于定义批处理和流数据并行处理管道。 使用一种开源的Beam SDK&#xff0c;您可以构建一个定义管道的程序。 然后&#xff0c;该管道由Beam支持的分布式处理后端之一执行&#xff0c;这些后端包括Apache Apex &…

unity 启动相机_Unity3D研究院之打开照相机与本地相册进行裁剪显示(三十三)...

最近做项目需要用到这个功能&#xff0c;就是在Unity中调用Android本地相册或直接打开摄像机拍照并且裁剪一部分用于用户头像&#xff0c;今天研究了一下&#xff0c;那么研究出成果了MOMO一定要分享给大家。Unity与Android的交互还有谁不会&#xff1f;&#xff1f; 如果有不会…

深度学习pytorch--MNIST数据集

图像分类数据集&#xff08;Fashion-MNIST&#xff09; 在介绍softmax回归的实现前我们先引入一个多类图像分类数据集。它将在后面的章节中被多次使用&#xff0c;以方便我们观察比较算法之间在模型精度和计算效率上的区别。图像分类数据集中最常用的是手写数字识别数据集MNIS…

html 元素的属性

全局属性 全局属性是可与所有 HTML 元素一起使用的属性。 事件属性 用来定义某个事件的操作的属性叫事件属性&#xff0c;例如&#xff0c;οnclick“script”&#xff0c;元素上发生鼠标点击时触发 click 事件&#xff0c;click 事件被触发就会执行对应的脚本代码。事件属性…

nosql和rdnms_用于SaaS和NoSQL的Jdbi

nosql和rdnms一个自然的接口&#xff0c;用于与CRM&#xff0c;ERP&#xff0c;会计&#xff0c;营销自动化&#xff0c;NoSQL&#xff0c;平面文件等基于Java的数据集成 Jdbi是用于JavaSQL便利库&#xff0c;它为JDBC提供更自然的Java数据库接口&#xff0c;该接口易于绑定到…