pytorch学习2-线性模型


进行深度学习的准备过程

  1. 准备数据集
  2. 选择模型
  3. 训练模型
  4. 进行推理预测

问题引入

对于某产品花费 x 工时,即可收到 y 效益,有表如下

x(hours) y(points)
1 2
2 4
3 6
4 ?

求问花费4工时的条件下,可获得收益为多少?

问题分析

基本流程

数据集需要交付给算法模型进行训练,利用所训练的模型,在获得新的数据时可以获得相应的输出。(监督学习)

训练集与测试集

在上述问题中,前三行里对应的每个 x,有其对应的输出 y,因此前三行可以作为训练集(Training Set)来进行训练。

x(hours) y(points)
1 2
2 4
3 6

第四行所给出的x,其对应的y是需要进行求解的,因此需要作为测试集(Test Set)

x(hours) y(points)
4 ?

验证集

测试集的标准答案一般是不知道的,因此训练之后的模型对具体问题的适配程度并不可知。如果利用训练集来进行验证,会出现“自己考自己”这样的情况,容易过拟合。

正如上学时总有一些自作聪明的同学,平时不认真学习,考试前临阵抱佛脚,将习题死记硬背下来,但是成绩往往并不好。因为学校期望学生掌握的是知识,而不仅仅是习题本身。另出新的考题,才能鼓励学生努力去掌握习题背后的原理。同样我们期望模型学习的是任务的本质规律,而不是训练数据本身,模型验证未使用的数据,才能更真实的评估模型的效果。

为了提升泛化能力,将训练集分成训练集和验证集(Validation Set)

eg: 将原先的前两行作为训练集

x(hours) y(points)
1 2
2 4

第三行作为验证集

x(hours) y(points)
3 6

模型设计

线性模型的基本模型y = ωx + b,其中的 ω 和 b 是模型中的参数,训练模型的过程即为确定模型中参数的过程。

在本模型中设置成 y = ωx,对于不同的ω有不同的线性模型及图像与之对应。

线性模型

模型训练过程

在模型训练中会先随机取得一个值,继而计算其和标准量之间的偏移量,从而判断当前模型是否符合预期。

记实际值为 y(x),模型对应的预测值为 y^(x),则其中的偏移量为∣y^(x)−y(x)∣,以此来代表模型估计值对原值的误差。

通常,该公式定义为Training Loss (Error)

\[loss = (\widehat y - y)^2 = (\omega x - y)^2\]

原题目中的几种ω所对应的Loss如下:

w=4

w=3

w=2

其中的每行为 ω 不同时的单个样本的损失,最后一行为平均损失。

对于单个样本,有loss可用于指代样本误差。对于所有样本,可同理用==Mean Square Error (MSE)==来指代整体样本的平均平方误差(均方差cost)

\[cost = \frac{1}{N} \displaystyle\sum_{n=1}^{N}(\widehat y_n-y_n)^2\]

由cost的计算公式可知,当平均损失为0时,模型最佳,但由于仅当数据无噪声且模型完美贴合数据的情况下才会出现这种情况,因此模型训练的目的应当是尽可能小,而非找到误差为0的情况。

image-20210301145240283

image-20210301151326189

本文参考自B站《PyTorch深度学习实践》P2