线性回归

《动手学深度学习pytorch》部分学习笔记,仅用作自己复习。

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

与回归问题不不同,分类问题中模型的最终输出是⼀个离散值。我们所说的图像分类、垃圾邮件识别、疾病检测等输出为离散值的问题都属于分类问题的范畴。softmax回归则适⽤用于分类问题。
由于线性回归和softmax回归都是单层神经网络,它们涉及的概念和技术同样适⽤于⼤多数的深度学习模型。

线性回归的基本要素

线性回归模型定义

线性回归模型训练 

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

(1) 训练数据

我们通常收集⼀系列的真实数据,例如多栋房屋的真实售出价格和它们对应的⾯积和房龄。我们希望在这个数据上面寻找模型参数来使模型的预测价格与真实价格的误差最小。在机器学习术语⾥里里,该数据集被称为训练数据集(training data set)或训练集(training set),⼀栋房屋被称为⼀个样本(sample),其真实售出价格叫作标签(label),⽤来预测标签的两个因素叫作特征(feature)。特征⽤来表征样本的特点。

 

(2) 损失函数

在模型训练中,我们需要衡量量价格预测值与真实值之间的误差。通常我们会选取一个⾮负数作为误差,且数值越小表示误差越小。一个常⽤的选择是平方函数。它在评估索引为 的样本误差的表达式为

其中常数 使对平方项求导后的常数系数为1,这样在形式上稍微简单一些。显然,误差越小表示预测价格与真实价格越相近,且当二者相等时误差为0。给定训练数据集,这个误差只与模型参数相关,因此我们将它记为以模型参数为参数的函数。在机器学习⾥,将衡量误差的函数称为损失函数(loss function)。这⾥使⽤的平⽅误差函数也称为平⽅损失(square loss)。

通常,我们⽤训练数据集中所有样本误差的平均来衡量模型预测的质量,即

 

(3) 优化算法

当模型和损失函数形式较为简单时,上⾯的误差最小化问题的解可以直接⽤公式表达出来。这类解叫作解析解(analytical solution)。本节使⽤的线性回归和平⽅方误差刚好属于这个范畴。然⽽,⼤多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函数的值。这类解叫作数值解(numerical solution)。
在求数值解的优化算法中,⼩批量随机梯度下降(mini-batch stochastic gradient descent)在深度学习中被⼴泛使⽤。

它的算法很简单:先选取⼀组模型参数的初始值,如随机选取;接下来对参数进⾏多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代中,先随机均匀采样⼀个由固定数⽬训练数据样本所组成的⼩批量(mini-batch) ,然后求⼩批量中数据样本的平均损失有关模型参数的导数(梯度),最后用此结果与预先设定的⼀个正数的乘积作为模型参数在本次迭代的减⼩量。

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

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

线性回归模型预测

线性回归的表示⽅方法

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

神经网络图

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

在图所示的神经网络中,输入分别为想x1 和x2 ,因此输⼊层的输⼊个数为2。输⼊个数也叫特征数或特征向量维度

图中网络的输出为o ,输出层的输出个数为1。需要注意的是,我们直接将图中神经网络的输出o 作为线性回归的输出,即 。由于输⼊层并不涉及计算,按照惯例,图所示的神经⽹络的层数为1。所以,线性回归是⼀个单层神经网络。输出层中负责计算 的单元⼜叫神经元

在线性回归中,o的计算依赖于x1 和 x2。也就是说,输出层中的神经元和输入层中各个输⼊完全连接。因此,这⾥的输出层又叫全连接层(fully-connected layer)或稠密层(dense layer)

矢量计算表达式

在模型训练或预测时,我们常常会同时处理多个数据样本并用到⽮量计算。在介绍线性回归的⽮量计算表达式之前,让我们先考虑对两个向量相加的两种⽅方法。

先定义两个1000维的向量量。

import torch
from time import time
a = torch.ones(1000)
b = torch.ones(1000

向量相加的一种方法是,将这两个向量按元素逐⼀做标量加法。(循环)

start = time()
c = torch.zeros(1000)
for i in range(1000):
    c[i] = a[i] + b[i]
print(time() - start)

输出:0.02039504051208496

向量相加的另⼀种⽅方法是,将这两个向量直接做矢量加法。

start = time()
d = a + b
print(time() - start)

输出:0.0008330345153808594 

结果很明显,后者⽐前者更省时。因此,我们应该尽可能采用矢量计算,以提升计算效率。

让我们再次回到本节的房价预测问题。如果我们对训练数据集里的3个房屋样本(索引分别为1、2和3)逐一预测价格,将得到

对3个房屋样本预测价格的⽮量计算表达式为 其中的加法运算使⽤用了广播机制,例如:

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

输出:tensor([11., 11., 11.])

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值