PyTorch深度学习应用实战
上QQ阅读APP看书,第一时间看更新

2-2 万般皆自“回归”起

要探究神经网络优化的过程,要先了解简单线性回归求解,线性回归方程式如下:

y=wx+b

已知样本(x, y),要求解方程式中的参数权重(w)、偏差(b)。

图2.2 简单线性回归

一般求解方法有两种:

(1)最小平方法(Ordinary Least Square, OLS);

(2)最大似然估计法(Maximum Likelihood Estimation, MLE)。

以最小平方法为例,首先定义目标函数(Object Function)或称损失函数(Loss Function)为均方误差(MSE),即预测值与实际值差距的平方和,MSE当然越小越好,所以它是一个最小化的问题,我们可以利用偏微分推导出公式,过程如下。

(1)

其中ε:误差,即实际值(y)与预测值之差;

n:样本个数。

(2)MSE=SSE/nn为常数,不影响求解,可忽略。

(3)分别对wb偏微分,并且令一阶导数=0,可以得到两个联立方程式,进而求得wb

(4)先对b偏微分,又因

f′(x)=g(x)g(x)=g′(x)g(x)+g(x)g′(x)=2g(x)g′(x)

两边同除以2

分解

除以nxy的平均数

移项

(5)对w偏微分:

两边同除以-2

分解

代入步骤(4)的计算结果

化简

结论:

范例1.现有一个世界人口统计数据集,以年度(year)为x,人口数为y,按上述公式计算回归系数wb

下列程序代码请参考【02_01_线性回归.ipynb】。

(1)使用Pandas相关函数计算,程序如下:

执行结果:

w=0.061159358661557375,b=-116.35631056117687

(2)改用NumPy的现成函数polyfit验算:

执行结果:答案相差不大。

w=0.061159358661554586, b=-116.35631056117121

(3)上面公式,x只限一个,若以矩阵计算则更具通用性,多元回归亦可适用,即模型可以有多个特征(x),为简化模型,将b视为w的一环:

一样对SSE偏微分,一阶导数=0有最小值,公式推导如下:

移项、整理

(xx′)w=xy

移项

w=(xx′)−1xy

(4)使用NumPy相关函数计算,程序如下:

执行结果与上一段相同。

范例2.再以Scikit-Learn的房价数据集为例,求解线性回归,该数据集有多个特征(x)。

(1)以矩阵计算的方式,完全不变。

执行结果如下:

(2)以Scikit-Learn的线性回归类别验证答案。

执行结果与采用矩阵计算的结果完全相同。

(3)PyTorch自v1.9起提供线性代数函数库[1],可直接调用,程序改写如下:

执行结果与NumPy计算完全相同。