2.2 模型优化基本方法
在优化目标较为复杂时,通常很难直接通过参数估计方法求得最优估计值。事实上,机器学习的模型训练除了使用前述参数估计法之外,还可通过数值优化计算方法确定模型参数。这类数值优化方法通常采用迭代逼近的方式确定最优解。在逼近最优解的过程中,模型性能会逐渐提升,故称此类方法为模型优化方法。由于模型优化方法采用迭代方式逼近最优解的策略,故在很多情况下能够有效应对优化目标较为复杂的情况。机器学习的模型优化方法有很多,本节主要介绍两种基本方法,即梯度下降方法和牛顿迭代法。
2.2.1 梯度下降法
梯度下降方法是机器学习最常用的模型优化方法之一,其基本思想是朝着函数梯度的反方向不断迭代更新参数。由于梯度方向为函数值上升最快的方向,故梯度反方向就是函数值下降最快的方向。一直朝着梯度反方向更新参数可以使函数值得到最快的下降,从而能够尽可能快速地逼近函数极小值点直至收敛。梯度下降方法的数学表达如下
其中,stepk为第k次迭代的步长;Pk为第k次寻优方向,即为梯度反方向。
式(2-11)的含义是在第k次迭代起始点Xk确定的情况下,向目标函数梯度反方向走一段距离并将此次所到新位置Xk+stepkPk作为下次迭代的起点赋值给Xk+1。通过对stepk适当取值就可由此得到目标函数的最优解。图2-1表示初始迭代点为X1的梯度下降迭代过程。
梯度下降方法的关键在于如何确定每次迭代的搜索方向和迭代步长。以图2-1所示的迭代过程为例,从起始点X1开始通过梯度下降法进行迭代优化,则有
X2=X1+step1P1
其中,。
令F(X)为优化的目标函数,则步长step1可通过下列优化方式确定
图2-1 梯度下降方法的迭代过程
现给出步长stepk的具体计算公式,根据二次泰勒展开式可将目标函数F(X)近似表示为正定二次函数
其中,A为正定的系数矩阵;X为参数向量;b为常数向量;c为常数。
在Xk处对F(X)求梯度可得。从Xk点出发沿着梯度的反方向进行搜索,则有
在选择最优步长时,每步搜索方向均与上步搜索方向正交,即有。将展开,则有[A(Xk-stepkPk)+bT]Pk=0,由此解出stepk并将其代入迭代公式(2-14),则可将梯度下降迭代公式进一步改写为
在机器学习的具体应用中,梯度下降方法的步长有时会根据需要人为设定,这需要一定的经验。如果步长设定过大,则会导致算法不收敛;如果步长设定过小,则会使算法收敛得较慢,提高计算的时间成本。
例如,对于函数问题min,显然有
假设起始点为X1=(1,1)T,则有F(X1)=5,。由迭代公式可得
若迭代次数允许,则可一直迭代下去,直到满足终止条件,得到近似最优解。
【例题2.5】试根据表2-4中的数据建立线性回归模型,并使用该模型预测出面积为137m2的房屋价格,要求其中对目标函数的优化采用梯度下降法。
表2-4 房屋价格与房屋面积数据
【解】表2-4中数据较大,不方便计算,因此这里先对其进行归一化处理再求解线性回归模型,具体方式为
X=(Si-Smin)/(Smax-Smin);y=(Pi-Pmin)/(Pmax-Pmin)
其中,Smin和Smax分别表示最小和最大的房屋面积取值;Si表示序号为i的房屋的面积取值;Pmin和Pmax分别表示最小和最大的房屋价格取值;Pi表示序号为i的房屋价格取值。
经过归一化后的数据如表2-5所示。
表2-5 归一化后的数据
假设模型的具体形式为y=w1X+w0。使用该模型构造目标函数,并采用误差平方和作为优化目标。为方便计算,将目标函数定义为1/2倍的误差平方和,即
其中,yi为序号为i的数据的真实值;为对应的预测值;w=(w0,w1)T为参数向量
使用梯度下降方法对上述目标函数进行优化,通过如下迭代公式更新参数向量
其中,η为步长,此处步长选定为η=0.01;wold表示当前更新的起点;wnew表示更新后的权重向量。目标函数E(w)的梯度为
由此可将梯度下降算法的迭代计算公式转化为
设置w0=(1,1)T,对上式进行1000次迭代,通过Python编程计算可得如表2-6所示的计算结果(表中仅给出部分迭代结果)。
表2-6 梯度下降方法迭代取值表
由表2-6中数据可知,经过1000次迭代后算法趋于收敛。因此可根据梯度下降方法求得线性回归模型为y=0.704037X+0.142370。对面积为137m2的房屋价格进行预测时,应先对该面积数据进行归一化计算,得到归一化后数据为X=0.2。将其代入回归模型计算对应的预测输出为y=0.2831774,即得房屋价格预测值为257.33万元。□
梯度下降法在靠近极小值时收敛速度通常会减慢,使得计算效率下降。人们为此提出了很多改进策略,共轭梯度下降法就是其中之一。共轭梯度下降法最初为求解非线性方程组而提出,后被推广到求解无约束优化问题,并逐渐成为最具代表性的最优化方法之一。该算法思想与梯度下降方法的相同之处在于都有着沿目标函数负梯度方向搜索的步骤;不同点在于梯度下降方法的搜索方向一直是负梯度方向,共轭梯度下降法的搜索方向从第二次确定搜索方向时,不再采用负梯度方向,而是经修正后的方向。因此,如何修正下次迭代的搜索方向是共轭梯度下降法的关键技术。下面具体介绍共轭梯度下降法。首先,给出共轭的概念。
设A为Rn×n上的对称正定矩阵,Q1,Q2为Rn上的两个非零向量,若有,则称Q1与Q2关于矩阵A共轭,向量Q1与Q2的方向为一组共轭方向。
共轭梯度下降法的基本思路如图2-2所示。首先,任意选取初始点X1,计算目标函数在该点的梯度值,并将负梯度方向作为初次搜索方向,即;然后,按图中箭头方向搜索下一点,即按公式Xk+1=Xk+αkPk计算下一点X2,其中αk表示第k次迭代步长,为的优化值。
图2-2 共轭梯度下降法
搜索到X2后,计算该点对应的梯度值,并按下式调整搜索方向
其中,stepk为调整搜索方向时的步长。将式(2-16)两侧同时乘以APk可得
将步长stepk调整为stepk+1,使得Pk+1和Pk关于A共轭,即有,可得
重复以上步骤,即可得到逼近最优解的序列{X1,X2,…,Xn,…}。
例如,对于优化问题,取X1=(2,2)T为迭代初始值,由此可得初次的搜索方向,并按下式计算X2
首先,通过优化问题arg min[2(2-8α1)2+(2-4α1)2]求出α1=5/18,然后由此算出X2=(-2/9,8/9)T和。再由式(2-18)算出α2=9/20,由此算出函数极值点X3=(0,0)T。
【例题2.6】UCI_IRIS数据集是一个常用训练数据集,共有121条数据,表2-7为其中的部分数据。试用UCI_IRIS数据集和共轭梯度下降法训练一个多层神经网络模型。
【解】由表2-7可知,UCI_IRIS数据集中每个示例包含4个特征,所有示例分属3个类别。故感知机模型输入层应包含4个特征输入结点及1个偏置输入结点,输出层应包含3个输出结点。由此可构造如图2-3所示具有10个隐含结点的神经网络模型。
表2-7 UCI_IRIS数据训练集中部分数据
图2-3 包含10个隐含结点的多层神经网络
令为第ι层第i个神经元与第ι+1层第k个神经元之间的连接权重,为第ι层第i个结点的偏置项,第ι层激活函数表示为φι,则对于样本输入X=(x1,x2,x3,x4)T,该模型的第j个隐含层结点的输出hj为
将上式表示为矩阵形式,则有
同理可得该模型的输出f(X)为
其中,φ2为Sigmoid激活函数;φ3为softmax激活函数,该激活函数可将模型输出映射为伪概率形式。
通过对目标函数的优化计算方式估计模型参数。可将目标函数定义为模型输出在训练集上的平均误差,通过该误差(目标函数)的最小化实现对模型的训练构造。具体地说,使用如下的式(2-19)作为目标函数,该目标函数依据模型对样本输出类别的概率来对错分样本施加一定惩罚,并将对所有错分样本所施加惩罚的均值作为模型输出在训练集上的平均误差。
其中,fj(Xi)表示模型第j个输出结点对样本Xi的输出;为样本Xi所对应的标签向量yi中第j个元素的取值。
代入数据并用共轭梯度算法优化上述目标函数,通过TersonFlow框架编程计算可得权重更新结果,表2-8为输入层到隐藏层的部分连接权重的部分计算数据,表2-9为隐藏层到输出层的部分连接权重的部分计算数据,取值保留小数点后两位。
表2-8 输入层到隐藏层的部分连接权重取值
表2-9 隐藏层到输出层的部分连接权重取值
取满足精度要求的第100000迭代得到的连接权重w*1,w*2和偏置b*1,b*2作为最终模型参数,由此得到所求的分类映射规则
使用所求模型对如表2-10所示的测试数据进行预测,得到表中最后一列的预测计算结果。与该表中实际种类值进行比较,可知预测结果均为正确。□
表2-10 测试数据与计算结果比较
共轭梯度下降法可以看成是梯度下降法的一种改进策略,仅需一阶导数信息,并克服了梯度法迭代后期收敛速度较慢的不足,是一种比较有效的优化算法。
2.2.2 牛顿迭代法
牛顿迭代法(以下简称牛顿法)是一种快速迭代搜索算法,主要用于求函数零点,即求方程的根。该算法要求目标函数具有二阶连续偏导数,这是因为下一个近似值需要通过在现有近似值附近进行一阶泰勒展开来确定。由微积分理论可知,任意n阶可导的函数都可在任意点Xk处展开为幂函数形式,故可将具有连续二阶导数的函数f(X)在点Xk处展开为
如果忽略上述二阶展开式的余项,则可将方程f(X)=0近似表示为
若f′(Xk)≠0,则可由上式得到方程f(X)=0的一个近似根,即X=Xk-f(Xk)/f′(Xk),将其作为新的近似根,记为Xk+1,则可得到如下迭代式
如果迭代初值X0选择适当,则可通过上述迭代公式获得以方程f(X)=0的根为极限的收敛序列{Xk}。当k值足够大时,就可获得满足精度要求的方程近似根Xk。
我们知道,对于函数优化问题,目标函数的极值点为函数驻点,即为目标函数导函数的根,故可使用上述牛顿迭代法求解目标函数导函数的根,由此获得目标函数的极值点。为此令函数f(X)为函数F(X)的导函数,则当f(X)=0时,F(X)在点X处取得极值。
假设目标函数F(X)具有连续的三阶导数且F″(Xk)≠0,则同理可得到如下迭代式
适当选择初值X0就可使上述迭代收敛到方程F′(x)=0的根,即目标函数F(x)的极值点,故可用这种推广的牛顿法进行模型优化。然而,机器学习的代价函数或目标函数通常比较复杂,一般会包含多个模型参数,此时通过牛顿法进行模型参数更新就相当于求解多元目标函数的极小值点。故将上述一元函数的牛顿法进一步推广到多元函数的向量情形。
设F(X)为三次可微的n元函数,则由多元函数泰勒展开式将其在Xk展开,得
其中,X=(x1,x2,…,xn)T;处的一阶导数,即
时的二阶导数,是一个Hesse矩阵,具体形式为
假定式(2-23)右边为n元正定二次凸函数且存在唯一的最优解,对上式求一阶微分,则可将近似地表示为
由上式可得的一个近似解,记为Xk+1,则得到如下迭代式
可将上式表示为迭代搜索通式Xk+1=Xk+stepkPk,其中搜索步长stepk恒为1,搜索方向为。由于方向Pk为从Xk到二次函数极小点的方向,故亦称为从Xk发出的牛顿方向。由此可知,牛顿迭代法其实就是从迭代初始点开始,沿着牛顿方向且步长恒为1的迭代搜索算法。根据以上讨论,可得牛顿迭代法的具体计算步骤归纳如下:
(1)设定初始点X0和终止准则,并置Xk=0;
(2)求解点Xk对应的目标函数值、梯度和Hesse矩阵;
(3)根据确定搜索方向Pk;
(4)依迭代公式(2-26)确定下一个点Xk+1;
(5)判断是否满足终止条件,若满足,则输出解Xk+1;否则k=k+1,转到步骤2。
【例题2.7】试根据表2-11中的数据建立一个预测广告投入和净利润之间关系的机器学习模型,并使用该模型预测广告投入为2.1万元时所对应的净利润,要求模型优化过程采用牛顿迭代法。
表2-11 广告投入和销售额数据表(单位:万元)
【解】画出表2-11中数据散点图如图2-4所示。由图2-4可知,可用二次函数拟合表中数据,故设机器学习模型为y=w0+w1X+w2X2。使用该模型构造目标函数并用误差平方和作为优化目标。为便于计算,将目标函数定义为误差平方和的1/2,即
其中,yi为第i个数据的真实值;为对应的预测值。
代入数据求得目标函数具体表达式为
设置初始点W0=(w0,w1,w2)T=(1,1,1)T,求出分别为
因为目标函数为二次函数,故Hesse矩阵为常数。根据牛顿迭代法公式
求得W1=(-0.5559,5.313,-0.1448)T,得到所求机器学习模型为
y=-0.5559X2+5.313X-0.1448
该模型的函数图像如图2-5所示。将X=2.1代入模型可得y=8.560981,即广告投入为2.1万元时预测可获得的净利润为8.560981万元。□
图2-4 广告投入和净利润数据散点图
图2-5 最终模型的函数图像
牛顿法的收敛速度很快,这是其他算法难以媲美的。究其原因是由于该算法每次迭代都会构造一个恰当的二次函数逼近目标函数,并使用从迭代点指向该二次函数极小点的方向来构造搜索方向。牛顿法的不足之处主要在于搜索方向构造困难,不仅需要计算梯度,还要计算Hesse矩阵及逆矩阵。为此介绍一种名为拟牛顿法的改进牛顿法。
拟牛顿法不仅收敛速度快,而且不用计算Hesse矩阵。首先,给出拟牛顿法的基本原理和实现步骤,然后介绍拟牛顿法中一种有效的具体实现算法,即DFP算法。
,,则可将牛顿法迭代式转化为如下形式
拟牛顿法的基本原理就是寻求一个近似矩阵来取代Hesse矩阵的逆矩阵。假设这个近似矩阵为Hk=H(Xk),则迭代公式可转化为如下形式
显然,当近似矩阵Hk为单位阵时,则上式就是梯度法的迭代公式。为使得Hk能够更好地近似,需要其满足如下条件:
(1)Hk应为对称正定矩阵,以确保算法朝着目标函数下降的方向搜索;
(2)Hk+1和Hk之间应有一定关系,例如Hk+1=Hk+Ψk,其中Ψk为修正矩阵。
(3)Hk应满足拟牛顿条件。
现在导出拟牛顿条件。假设目标函数F(X)具有连续三阶导数,将F(X)在X=Xk+1处进行二阶泰勒展开并略去余项,可得
则当Gk+1为正定矩阵时有。既然要用矩阵Hk+1来近似取代,那么Hk+1也应该满足
上式即为拟牛顿条件。
令ΔXk=Xk+1-Xk,Δgk=gk+1-gk,则亦可将拟牛顿条件写成
拟牛顿法在一定程度上保留了牛顿法计算速度较快的优势,其具体实现还取决于Ψk的选取,不同的Ψk构成不同的具体算法。下面介绍一种名为DFP的常用拟牛顿法。DFP算法对拟牛顿法中修正公式的修正项进行如下优化,即设
其中,δk和τk都是待定常数;Qk和Mk是n维向量。
由于上式应满足式(2-23),故有ΨkΔgk=ΔXk-HkΔgk,即有
令,则有
代回式(2-30),得到
此时,可将修正公式转化为
下面结合实例介绍DFP算法的具体实现过程。例如,对于优化问题取初始点X0=(1,1)T,则有g0=(2,8)T。根据公式进行计算,可得
由式(2-34),可得
从而算得搜索方向P1=-H1g1=(-1.49416,0.09340)T。通过对下列目标函数的优化计算argF(X1+step1P1)获得搜索步长,得到step1=0.49423,由此算出X2=(0,0)T。由于在点X2处梯度为0,故X2即为最优解。
【例题2.8】求解下面的无约束优化问题
【解】取初始点X0=(0,0,0)T,H0=I,设置精度e=1×10-12,当满足精度或在某点梯度为0时迭代终止。当X0=(0,0,0)T时,求得g0=(-4,-12,0)T。确定搜索方向,得到:
P0=-H0g0=(4,12,0)T
通过优化计算获得搜索步长,可得到步长step0和X1
step0=0.131579; X1=(0.526316,1.57895,0)T
由此算得X1处的梯度为
g1=(-1.89474,0.631579,-3.15789)T
从而算得Δg0,H1分别为
确定搜索方向
P1=-H1g1=(2.06369,0.382166,2.90446)T
同理计算步长以及新的点:step1=0.419146,X2=(1.3913,1.73913,1.21739)T。计算在X2处的梯度g2、梯度差Δg1和H2分别为
g2=(1.56522,-0.521739,-1.04348)T, Δg1=(3.45995,-1.15332,2.11442)T
确定搜索方向
P2=-H2g2=(-0.734694,0.489796,1.46939)T
计算步长以及新的点step3=0.532609,X3=(1.0,2.0,2.0)T。计算在X3处的梯度g3=(0,0,0)T,停止迭代。取该无约束优化问题的最优解为X*=X3=(1.0,2.0,2.0)T。□