一、线性回归

首先,在介绍线性回归之前,先用一个简化的模型作为引入。

假设某地的房价影响因素有地理位置、人流量以及面积大小,分别记为x1、x2、x3。而房屋的最终成交价 y = w1x1  + w2x2 + w3x3 + b。

此即为线性模型,给定了n维输入 X = [x1, x2, ... , xn]T,以及模型的n维权重 w = [w1, w2, ..., wn]T和标量偏差b,模型的输出即为输入的加权和:y = w1x1 + w2x2 + ... + wnxn + b 。

由此可见,线性模型可以看做是一个单层的神经网络。

当然,在有了模型以后,我们可以对其定义损失,用于衡量预估质量,比较真实值与预估值,例如房屋售价和预估价进行比较。假设真实值为y,而预估值为

cnn回归预测 python pytorch回归预测_深度学习

,比较常用的即为平方损失

cnn回归预测 python pytorch回归预测_线性模型_02

。前面加1/2是为了方便在求导时消去。

在定义了模型和损失之后,我们便可进行训练数据。假定我们有n个样本,X = [x1, x2, ..., xn],y = [y1, y2, ..., yn],我们便可以将这些数据丢到所定义的线性模型中进行训练来得到我们的权重和偏差。

那是如何进行参数学习的呢?

首先训练损失, 

cnn回归预测 python pytorch回归预测_线性模型_03

,接着再最小化损失函数进行学习参数即可得到所需的权重w*和b*:

cnn回归预测 python pytorch回归预测_pytorch_04


当然,线性模型由于模型简单,可以直接求出显式解,也就意味着其复杂度有限,很难符合较为复杂的数据或复杂的应用。像后续所学的网络均无法求出显式解。

二、基础优化方法

对于优化方法,在之后的过程中会有比较集中的学习,此处仅先对较为常用的一种优化方法——梯度下降法进行简单总结。

首先,梯度下降法的具体实现。先挑选一个参数的随机初始值 w0,然后重复迭代参数 t = 1,2,3 用以更新参数w,具体更新规则为:

cnn回归预测 python pytorch回归预测_线性模型_05


我们来分析一下这个参数更新规则。

①首先需要了解,沿着梯度方向为此损失函数增加最快的方向,我们在前面加了负号即为负梯度方向,是此损失函数下降最快的方向。

 ②

cnn回归预测 python pytorch回归预测_cnn回归预测 python_06

为学习率,是步长的超参数,用于确定每一次迭代下降多长。

cnn回归预测 python pytorch回归预测_cnn回归预测 python_07

 对于学习率,我们不能选太小,这会导致我们要到达最优解要走很多步,浪费计算资源。

同时也不能选太大,极易导致最终结果发散。

cnn回归预测 python pytorch回归预测_cnn回归预测 python_08

 小批量随机梯度下降

由于在整个训练集上算梯度太贵,一个深度神经网络模型可能需要数分钟至数小时。所以我们可以采用小批量随机梯度下降,我们可以随机采样b个样本i1, i2, ..., ib来近似损失。

cnn回归预测 python pytorch回归预测_pytorch_09

b即为批量大小,是另一个超参数。当然b也不能设置太小,这样不适合并行来最大利用计算资源;同时也不能设置过大,这会使得内存消耗增加,浪费计算。