一、 实验目的与要求
1.熟练最小二乘法优化模型的意义和求解手段;
2.掌握最小二乘法的正规方程,能实现代码对其求解;
3.掌握最速梯度下降法求解无约束最小二乘法问题。
二、 问题
三、模型建立及求解
解决问题思路,模型建立、性能分析,存在问题等方面进行阐述;梯度下降法迭代求解,可以设置迭代次数或相邻迭代解之间“相对接近程度”,如,作为迭代停止条件;代码不要放在报告里面,可以作为附件提交!
1、定理、定义引入
Gram矩阵的定义:
若矩阵,则B为Gram矩阵。每个Gram矩阵都是半正定的,即
若要使Gram矩阵为正定的,则要满足:
即A是列向量无关的。正定矩阵都是非奇异的。
矩阵QR分解的定义(具体参考文章矩阵QR分解):
QR分解是将一个列向量无关的矩阵分解成具有标准正交列向量的矩阵Q和上三角矩阵R(对角线元素不为0)的矩阵分解方法,即A=QR:
为A的列且线性独立,
为Q的列且两两正交,所以有:
Q矩阵可逆且与Q互为逆矩阵,
定理1:设函数f(x)在处可微,则
是
的必要条件
证明:将函数f(x)在处一阶泰勒展开,有:
令,
,可得:
当,则
,
,当t足够小,存在
,即:
若,则:
,与
矛盾,所以
得证。
是最优解问题
的必要条件但不是充分条件,因为
时,
有可能是最大值,故引入定理2:
定理2:若可微函数f(x)是凸函数,则是
的充要条件
定理1已证必要条件,现证充分条件,即:由于f(x)是可微且凸的,则
,有:
。
得证。
2、最小二乘法
2.1最小二乘问题
给定,
,若线性方程组
无解,寻找该方程组近似解,并尽可能逼近方程组的目标。设残差向量
,求解方程组的近似解,即使残差向量
某种度量下最小。当用二范数度量残差大小:
,称其为最小二乘法问题,二乘即指残差二范的平方。
2.2模型建立和求解
设函数。要使残差向量
的二范数平方最小,则最小二乘问题的最优解
,根据定理2,f(x)是可微且凸的,则有:
,即:
令,则有:
函数f(x)对的偏导为:
而,所以:
根据矩阵乘法即矩阵A第i行乘以向量x,而
即为向量Ax的第i个元素乘以
,再求向量元素之和,如图1所示。
设为矩阵A的第i列,则有:
而则为向量b第i个元素乘以向量
的第i个元素之和,即向量内积,等于
。所以原式等于:
则等于:
令,则
,称该等式为正规方程。
根据Gram矩阵的定义,当A列向量无关时,是正定的,即非奇异的,所以:
该模型的几何解释为,如图2所示,range(A)为A的向量张成空间,为该空间的一个向量。b为空间中任一向量。若要使
和b两个向量的差的二范数平方最小,可知
即为b在range(A)上的投影:
。
2.3根据求解的模型解决最小二乘问题
由上述分析可得,最小二乘问题的最优解为:
,根据该等式,可以根据构造Gram矩阵或QR分解A矩阵来求解
。
①构造Gram矩阵方法
根据正规方程,首先构造Gram矩阵
,然后计算
,再通过高斯消元求解线性方程组的方法求解
。
计算Gram矩阵的时间复杂度约为
flops,计算
的复杂度为2mnflops,高斯消元求解的复杂度为约为
。总的时间复杂度约为
flops。
读取附件“MatrixA_b.mat”文件中的矩阵A和向量b,按上述方法求解,循环20次,计算每次的残差向量大小:,画出折线图如图3所示,可以看到平均残差约1.1738。
②QR分解方法
当A列向量无关时,首先对A进行QR分解,根据QR分解的定义,,所以根据等式
有:
得到线性方程组:。然后计算
,由于R是一个上三角矩阵,所以可以直接回代求解线性方程组。
矩阵A的QR分解时间复杂度约为flops,计算
的复杂度约为2mnflops,回代求解
的复杂度约为
flops。总的时间复杂度约为
flops。
读取附件“MatrixA_b.mat”文件中的矩阵A和向量b,按上述方法求解,循环20次,计算每次的残差向量大小:,画出折线图如图3所示,可以看到平均残差约1.1738。
由图3和图4可以看到,两种方法求解的,计算出的残差数值相等,但是通过Gram矩阵求解的方法构造的Gram矩阵在经过四舍五入后,由于精度问题有可能是奇异矩阵,所以QR分解求解更稳定,且时间复杂度更低。
3、梯度下降法
3.1沿梯度方向下降
当列向量相关或n非常大时,通过构造Gram矩阵或QR分解的方法无法求解或需要消耗较多时间。故引入梯度下降法求解。
梯度下降法的思想为:通过迭代求解目标的最优解过程:,如图5所示。
是第k步迭代,期望更新
,满足
。
迭代退出条件,可以设置最大迭代次数,或设置相邻迭代之间的相对接近程度,如当小于设置的阈值时,可以认为目标函数值收敛到一个稳定值,算法已经达到最优解。
在图3所示函数图像中,导数代表切线斜率,还可以代表梯度方向。函数从局部最小值处沿着梯度逐渐增大。所以要最小化函数f(x),可以从处沿着梯度的负方向减小函数值,且沿着梯度方向函数值下降得最快,则需要求出
处的导数取其负值,然后再乘以一个系数
,
,,通常叫做步长或学习率。
为第k次迭代的步长。令
。
可以证明当时满足
:函数f(x)可微,根据泰勒公式,在
的一阶公式为:
当足够小,则有:
同理,在第k步迭代时,令,可证
。f(x)在
的一阶泰勒展开公式为:
3.2最优步长
步长的取值影响求最优解的速度。如果步长过小,可能导致算法收敛缓慢,还可能使得算法无法跳出局部最优点,从而无法找到全局最优解;如果步长过大,可能导致算法无法收敛,还可能使得算法在搜索空间中跳过最优解,无法稳定地接近最优解。
可以通过线性搜索估计步长:
,即
为最优步长。令
,
是关于
的可微凸函数,根据定理2有:当
时,
。由于
与
有相同解,不妨设:
则和
为:
令,求得:
。
3.3算法步骤
总结用梯度下降法求解的步骤如下:
3.4测试结果
读取附件“MatrixA_b.mat”文件中的矩阵A和向量b,使用梯度下降法求解,设置最大迭代次数为500,计算每一次迭代中的残差向量的大小:
,画出折线图如图6所示。
可以看到随着迭代残差向量逐渐变小,当迭代次数达到100次的时候残差向量的大小趋于平缓,退出迭代时其大小与使用正规方程求解的残差1.1738稍微有一点差异,增加迭代次数至800次,残差大小与1.1738几乎相等。
计算梯度下降法求解出的近似解与使用正规方程求解得到的每个元素之差的绝对值,结果如图7所示,可以看到差异较小,证明使用梯度下降法计算的近似解是可行的。
更改迭代退出条件为,p为阈值。当
时求得的近似解与准确解十分接近。计算每一次迭代中的残差向量的大小,画出折线图如图8所示,可以看到共迭代了761次。计算近似解与准确解的
每个元素之差的绝对值,结果如图9所示,可以看到差异较小。