最小二乘问题
最小二乘问题是应用最广泛的优化问题,它的一般形式如下:
minx∣∣r(x)∣∣2\min_x ||r(x)||^2xmin∣∣r(x)∣∣2
该问题的损失函数为S(x)=∣∣r(x)∣∣2S(x)=||r(x)||^2S(x)=∣∣r(x)∣∣2。其中r(x)为残差函数,一般表示预测值与实际值的差别。一个最简单的最小二乘问题就是线性回归问题,对于这个问题的求解可以用上一节所说的梯度下降法,这也是机器学习领域常用的一种做法。
线性最小二乘问题
线性最小二乘问题是最简单的最小二乘问题,它的一般形式如下:
minx∣∣Ax−b∣∣2\min_x ||Ax-b||^2xmin∣∣Ax−b∣∣2
线性最小二乘问题的求解很容易,
令h(x)=∣∣Ax−b∣∣2=(Ax−b)T(Ax−b)h(x) = ||Ax-b||^2 = (Ax-b)^T(Ax-b)h(x)=∣∣Ax−b∣∣2=(Ax−b)T(Ax−b)
对它求导并且令导数为零得到ATAx−ATb=0A^TAx-A^Tb=0ATAx−ATb=0,这称为最小二乘问题的标准方程(normal equation)。
解得x=(ATA)−1ATbx = (A^TA)^{-1}A^Tbx=(ATA)−1ATb
熟悉线性回归模型的话就可以发现,这就是线性回归模型参数的解析解。
非线性最小二乘问题
上面的问题中有r(x)=Ax−br(x) = Ax-br(x)=Ax−b。r(x)是一个线性函数。对它求导得到Jacobian矩阵Jr=AJ_r=AJr=A。于是有x=(JrTJr)−1JrTbx = (J_r^TJ_r)^{-1}J_r^Tbx=(JrTJr)−1JrTb。
而许多最小二乘问题的残差函数并不是线性的,此类问题称为非线性优化问题。
对于非线性优化的问题当然可以结合具体的残差函数进行分析,但是对于一般的函数,我们也可以通过将非线性函数进行线性化的方式进行迭代求解。具体来说,假设在x的某个领域可以对函数进行线性逼近,则由泰勒展开
r(x0+Δ)=r(x0)+JrΔr(x_0+\Delta) = r(x_0)+J_r\Deltar(x0+Δ)=r(x0)+JrΔ
求解minΔ∣∣r(x0+Δ)∣∣2=minΔ∣∣r(x0)+JrΔ∣∣2\min_\Delta||r(x_0+\Delta)||^2=\min_\Delta||r(x_0)+J_r\Delta||^2Δmin∣∣r(x0+Δ)∣∣2=Δmin∣∣r(x0)+JrΔ∣∣2
由上面线性最小二乘问题的推导可以得出此问题的解为Δ=−(JrTJr)−1JrTr(x0)\Delta = -(J_r^TJ_r)^{-1}J_r^Tr(x_0)Δ=−(JrTJr)−1JrTr(x0)。
于是通过不断迭代x(k+1)=x(k)+αΔx^{(k+1)}=x^{(k)}+\alpha\Deltax(k+1)=x(k)+αΔ,我们可以对非线性最小二乘问题的解进行逼近
高斯牛顿法
上述使用迭代求解非线性最小二乘问题的方法称为高斯牛顿法。它是牛顿法求解非线性最小二乘问题时的一个特例。
事实上,对损失函数:
S(β)=∣∣r(β)∣∣2S(\beta)=||r(\beta)||^2S(β)=∣∣r(β)∣∣2
使用牛顿法有
β(s+1)=β(s)−H−1g\beta^{(s+1)}=\beta^{(s)}-H^{-1}gβ(s+1)=β(s)−H−1g
H为S对β\betaβ的二次导,g为S对β\betaβ的梯度。
显然g=2JrTrg = 2J_r^Trg=2JrTr, H=2(JrTJr+HrTr)H=2(J_r^TJ_r+H_r^T r)H=2(JrTJr+HrTr),其中JrJ_rJr为r对β\betaβ的Jacobian矩阵,HrH_rHr为r对β\betaβ的Hessian矩阵。
在此我们假设在非线性最小二乘问题中残差函数的二次偏导的作用是不明显的,于是我们可以将这一项省略,于是得到
H≈2JrTJrH\approx 2J_r^TJ_rH≈2JrTJr
带入牛顿法的计算公式,我们有
β(s+1)=β(s)+αΔ,Δ=−(JrTJr)−1JrTr(β(s))\beta^{(s+1)}=\beta^{(s)}+\alpha\Delta,\Delta=-(J_r^TJ_r)^{-1}J_r^Tr(\beta^{(s)})β(s+1)=β(s)+αΔ,Δ=−(JrTJr)−1JrTr(β(s))
由此,我们就从另一个角度推导出了高斯牛顿法。