这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战
title: date: 2020-12-16 16:47:46 tags: [Machine_Learning] categories: [Machine_Learning] mathjax: true
本文介绍优化二次型的常用迭代方法——最速下降法。
问题描述
重述我们需要优化的问题:
f(x)=21xTAx−bTx+c\label1(1)
- 矩阵
A正定对称
- 目标为优化
x,使得
f(x)取得最小值
最速下降法
当有一天大神们厌倦了代数法解决优化问题时,提出了迭代计算,逐步接近最优解的优化方法,方法的思想也是朴素直观的。
核心思想
- 我们的目标是找到函数的最小值,而且我已经知道了这个函数就那么一个极小值点,相当于找到一个曲面的最低点,最速下降法的流程图:
graph LR
A[寻找函数最小值]-->B[计算当前梯度方向]
B --> C[计算前进距离]
C --> D{精度是否满足要求}
D -- 否 --> B
D -- 是 --> E[输出当前位置]
计算流程
初始位置:
x0
计算梯度
g
g=f′(x)=Ax−b(2)
- 那么关于
x0为了寻找最小值,需要向梯度的反方向前进,但为了保证推导过程顺遂,前进距离系数不管符号,设第
i步需要前进的距离为
αi,那么对于第
i个
xi,有:
xi+1=xi+αigi\label3(3)
系数
αi求解
方法1:
行动前后两个位置的梯度方向需要正交,不然当前行动的位置还可以取到更低的值:
即:
{% raw %}
giTgi+1=0(4)
其中:
gi=Axi−b(5)
xi+1=xi+αigi=xi+αi(Axi−b)(6)
gi+1=Axi+1−b=A(xi+αigi)−b(7)
那么有:
giTgi+1=giTA(xi+αigi)−giTb=0
giTAxi+αigiTAgi−giTb=0
αigiTAgi+giTgi=0
αi=−giTAgigiTgi(8)
{% endraw %}
方法2
确定梯度方向
g后求解
α,由于最速下降法确定的是每一步方向上的局部最优解,也就是沿着这个方向运动得到最小值的位置,那么可以对
α求导,使得导数为0:
- 由
\eqref1和
\eqref3,有:
f(x)=21(x+αg)TA(x+αg)−bT(x+αg)+c(9)
- 对于已经确定的当前位置
xi,当前可以看成是关于
xi,
αi的函数:
f(xi+1)=f(xi,αi)=21(xi+αigi)TA(xi+αigi)−bT(xi+αigi)+c(10)
{% raw %}
∂αi∂f(xi+1)=∂xi+1∂f(xi+1)∂αi∂xi+1=(Axi+1−b)Tgi=(A(xi+αigi)−b)Tgi=(Axi−b+αiAgi)Tgi=(giT+αigiTA)gi=giTgi+αigiTAgi=0(11)
{% endraw %}
αi=−giTAgigiTgi(12)
下一个位置
- 按照公式
\eqref3,获取下一个获取的位置
xi+1
- 检测当前梯度大小,如果梯度小于一定阈值
ε即认为已经达到了极小值:
ε≥∥gi+1∥(13)
分析
-
最速下降法是一种简单拟合当前问题的贪心优化方法,通过一步步计算局部最优解来逼近全局最优解,其本质为:
- 将当前的二次型拟合成高维球形
- 运动到拟合球形的中心
- 计算误差,测量精度
- 若精度不够则,根据误差拟合下一个高维球
-
首先,要声明的是,该方法是收敛的,也就是在我们定义的问题下,是可以逐步收敛到最优解的,证明比较复杂,参考番外篇(2)——无聊的最速下降法推导
-
该方法也存在一定问题,由于建模过于简单,导致其计算出的最优值结果与真实最小值不断遗漏下偏差,带来的结果就是需要往复迭代才能接近最优值
共轭梯度法的由来
- 最速下降法拟合的方案过于简单,导致了该方法注定无法轻易得到全局最优解
- 如果可以有正确拟合真实二次型的迭代优化方法,那么如果找到了这个模型下的最优值,岂不就迭代得到了全局最优解
- 带着这个初衷,大神们提出了共轭梯度法