《动手学深度学习》线性回归(PyTorch版)
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《动手学深度学习》线性回归(PyTorch版)相关的知识,希望对你有一定的参考价值。
线性回归(PyTorch版)
1. 线性回归
线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。与回归问题不同,分类问题中模型的最终输出是一个离散值。我们所说的图像分类、垃圾邮件识别、疾病检测等输出为离散值的问题都属于分类问题的范畴。softmax回归则适用于分类问题。
由于线性回归和softmax回归都是单层神经网络,它们涉及的概念和技术同样适用于大多数的深度学习模型。我们首先以线性回归为例,介绍大多数深度学习模型的基本要素和表示方法。
1.1 线性回归的基本要素
我们以一个简单的房屋价格预测作为例子来解释线性回归的基本要素。这个应用的目标是预测一栋房子的售出价格(元)。我们知道这个价格取决于很多因素,如房屋状况、地段、市场行情等。
为了简单起见,这里我们假设价格只取决于房屋状况的两个因素,即面积(平方米)和房龄(年)。接下来我们希望探索价格与这两个因素的具体关系。
1.1.1 模型定义
设房屋的面积为
x
1
x_1
x1,房龄为
x
2
x_2
x2,售出价格为
y
y
y。我们需要建立基于输入
x
1
x_1
x1 和
x
2
x_2
x2 来计算输出
y
y
y 的表达式,也就是模型(model)。顾名思义,线性回归假设输出与各个输入之间是线性关系:
y
^
=
x
1
w
1
+
x
2
w
2
+
b
\\hat{y} = x_1 w_1 + x_2 w_2 + b
y^=x1w1+x2w2+b
其中
w
1
w_1
w1 和
w
2
w_2
w2 是权重(weight),
b
b
b 是偏差(bias),且均为标量。它们是线性回归模型的参数(parameter)。模型输出
y
^
\\hat{y}
y^ 是线性回归对真实价格
y
y
y 的预测或估计。我们通常允许它们之间有一定误差。
1.1.2 模型训练
接下来我们需要通过数据来寻找特定的模型参数值,使模型在数据上的误差尽可能小。这个过程叫作模型训练(model training)。
下面我们介绍模型训练所涉及的3个要素。
(1) 训练数据
我们通常收集一系列的真实数据,例如多栋房屋的真实售出价格和它们对应的面积和房龄。我们希望在这个数据上面寻找模型参数来使模型的预测价格与真实价格的误差最小。
在机器学习术语里,该数据集被称为训练数据集(training data set)或训练集(training set),一栋房屋被称为一个样本(sample),其真实售出价格叫作标签(label),用来预测标签的两个因素叫作特征(feature)。特征用来表征样本的特点。
假设我们采集的样本数为
n
n
n,索引为
i
i
i 的样本的特征为
x
1
(
i
)
x_1^{(i)}
x1(i) 和
x
2
(
i
)
x_2^{(i)}
x2(i),标签为
y
(
i
)
y^{(i)}
y(i)。对于索引为
i
i
i 的房屋,线性回归模型的房屋价格预测表达式为
y
^
(
i
)
=
x
1
(
i
)
w
1
+
x
2
(
i
)
w
2
+
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) 损失函数
在模型训练中,我们需要衡量价格预测值与真实值之间的误差。通常我们会选取一个非负数作为误差,且数值越小表示误差越小。一个常用的选择是平方函数。它在评估索引为 i i i 的样本误差的表达式为
ℓ ( i ) ( w 1 , w 2 , b ) = 1 2 ( 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
其中常数 1 2 \\frac 1 2 21 使对平方项求导后的常数系数为1,这样在形式上稍微简单一些。显然,误差越小表示预测价格与真实价格越相近,且当二者相等时误差为0。给定训练数据集,这个误差只与模型参数相关,因此我们将它记为以模型参数为参数的函数。
在机器学习里,将衡量误差的函数称为损失函数(loss function)。这里使用的平方误差函数也称为平方损失(square loss)。
通常,我们用训练数据集中所有样本误差的平均来衡量模型预测的质量,即
ℓ ( w 1 , w 2 , b ) = 1 n ∑ i = 1 n ℓ ( i ) ( w 1 , w 2 , b ) = 1 n ∑ i = 1 n 1 2 ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + 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=1∑nℓ(i)(w1,w2,b)=n1i=1∑n21(x1(i)w1+x2(i)w2+b−y(i))2
在模型训练中,我们希望找出一组模型参数,记为 w 1 ∗ , w 2 ∗ , b ∗ w_1^*, w_2^*, b^* w1∗,w2∗,b∗,来使训练样本平均损失最小:
w
1
∗
,
w
2
∗
,
b
∗
=
arg
min
w
1
,
w
2
,
b
ℓ
(
w
1
,
w
2
,
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,以上是关于《动手学深度学习》线性回归(PyTorch版)的主要内容,如果未能解决你的问题,请参考以下文章
线性回归 + 基础优化算法 动手学深度学习v2 pytorch
《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)