1. 线性模型

给定一个样本数值表:

样本对 数值
(x1, y1) (1.4, 14.4)
(x2, y2) (5, 29.6)
(x3, y3) (11, 62)
(x4, y4) (16, 85.5)
(x5, y5) (21, 113.4)
先绘制一下上述数据,查看一下这些数据的特征:
1
pip3 install matplotlib

这里利用 scatter() 方法绘制散点图。在使用 matplotlib 库绘制图形时,传入的 Tensor 必须先转换成 NumPy 数据:

1
2
3
4
5
6
7
8
import torch
import matplotlib.pyplot as plt

x = torch.Tensor([1.4, 5, 11, 16, 21])
y = torch.Tensor([14.4, 29.6, 62, 85.5, 113.4])

plt.scatter(x.numpy(), y.numpy())
plt.show()

绘制结果如下:
样本分布情况
可以十分清晰的看到,这五个样本符合线性规律,可以使用一条直线去拟合。

2. 目标函数(损失函数)

根据我们以前的经验,很自然的我们会假设拟合的直线公式为:

y=ax+by = ax + b

在机器学习或深度学习领域呢,我们一般会统一参数,方便表示,这里的 aabb,我们统一称其为参数,用 w1w_{1}w0w_{0} 表示,这样我们便可以使用一个统一的向量 w=[ w1, w0 ]w = [\ w_{1},\ w_{0}\ ] 表示,不过这里就是后话了。这里新的拟合曲线公式为:

y=w1x+w0y = w_{1}x + w_{0}

当我们对其进行拟合时,就难以避免误差的存在,很自然的想法,我们肯定希望我们拟合的函数和真实值之间的误差越小越好,这个时候,我们会用一个函数去表示这个误差,这个函数就是损失函数或目标函数等,用 LL 表示。
这里,我们采用均方根误差(Mean-Square Error, MSE):

L(w1, w0)=i=15(y^iyi)L(w_{1},\ w_{0})=\sum_{i=1}^5{(\hat{y}^i-y^i)}

3. 优化

使用梯度下降方法可以较为快速且准确的找到损失函数的最小值,梯度下降的公式为:

wt+1=wtL(wt)×δ\vec{w}^{t+1}=\vec{w}^t-\triangledown{L}(\vec{w}^t)×\delta

在 PyTorch 中,L(wt)\triangledown{L}(\vec{w}^t) 可以由自动微分技术得到。

4. 批量输入

如果我们把公式写成向量形式,即 x=(x1, x0)T\vec{x}=(x_{1},\ x_{0})^Tw=(w1, w0)T\vec{w}=(w_{1},\ w_{0})^T,可以得到以下公式:

y^=xw\hat{y}=\vec{x}\cdot{\vec{w}}