要探究神经网络优化的过程,要先了解简单线性回归求解,线性回归方程式如下:
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 / n , n 为常数,不影响求解,可忽略。
(3)分别对 w 及 b 偏微分,并且令一阶导数=0,可以得到两个联立方程式,进而求得 w 及 b 。
(4)先对 b 偏微分,又因
f ′( x )= g ( x ) g ( x )= g ′( x ) g ( x )+ g ( x ) g ′( x )=2 g ( x ) g ′( x )
→ 两边同除以2
→ 分解
→ 除以 n , 为 x 、 y 的平均数
→ 移项
(5)对 w 偏微分:
→ 两边同除以-2
→ 分解
→ 代入步骤(4)的计算结果
→ 化简
结论:
范例1.现有一个世界人口统计数据集,以年度(year)为 x ,人口数为 y ,按上述公式计算回归系数 w 、 b 。
下列程序代码请参考【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 ′) −1 xy
(4)使用NumPy相关函数计算,程序如下:
执行结果与上一段相同。
范例2.再以Scikit-Learn的房价数据集为例,求解线性回归,该数据集有多个特征( x )。
(1)以矩阵计算的方式,完全不变。
执行结果如下:
(2)以Scikit-Learn的线性回归类别验证答案。
执行结果与采用矩阵计算的结果完全相同。
(3)PyTorch自v1.9起提供线性代数函数库 [1] ,可直接调用,程序改写如下:
执行结果与NumPy计算完全相同。