梯度下降
将f(x)f(x)一阶泰勒展开:
f(x)=f(x0)+(x−x0)f′(x0)f(x)=f(x0)+(x−x0)f′(x0)
f(x)=f(x0)+Δxf′(x0)f(x)=f(x0)+Δxf′(x0)
如果当前处于x0x0节点,要使得前进同样的距离使得f(x)f(x)变的最小,则Δx=−δf′(x)Δx=−δf′(x)时
f(x)=f(x0)−δf′2(x0)f(x)=f(x0)−δf′2(x0)
新的f(x)f(x)能够取得下一步的最小值
这也是梯度下降算法为什么沿着梯度进行下降能够取得最小值的证明。
用梯度下降法,每次 xn=xn−1−δf′(x)xn=xn−1−δf′(x)
在多元函数中:
xn=xn−1−δ∇f(x)xn=xn−1−δ∇f(x)
牛顿法
将f(x)f(x)二阶泰勒展开:
f(x)=f(x0)+Δxf′(x0)+12Δx2f′′(x0)f(x)=f(x0)+Δxf′(x0)+12Δx2f″(x0)
因为要使得f(x)f(x)取得最小值,则f′(x)f′(x)在最小值点必为0,将上式两边同时求导得到【其实直接对f′(x)f′(x)进行一阶泰勒展开也可以】
f′(x)=f′(x0)+Δxf′′(x0)f′(x)=f′(x0)+Δxf″(x0)
取f′(x)=0f′(x)=0得到
f′(x0)+Δxf′′(x0)=0f′(x0)+Δxf″(x0)=0
Δx=−f′(x0)f′′(x0)Δx=−f′(x0)f″(x0)
所以用牛顿法,每次取得xn=xn−1−f′(x0)f′′(x0)xn=xn−1−f′(x0)f″(x0)
在多元函数中
xn=xn−1−(∇2f(x0))−1∇f(x0)xn=xn−1−(∇2f(x0))−1∇f(x0)
其中∇2f(x0)∇2f(x0)就是f(x0)f(x0)的海森矩阵【二阶梯度矩阵】
其实,牛顿法在数值分析里面,是用来求解f(x)=0f(x)=0 的解的问题的,相较于二分法求值的一阶收敛速度,牛顿法是一个二阶收敛速度。
用牛顿法求解f(x)=0f(x)=0 的问题的时候,只用一阶导数就好
不过在最优化问题中,需要求解的是最值点,所以找的是其f′(x)=0f′(x)=0的点,所以就用到了二阶导数。
拟牛顿法
拟牛顿法直接看下面参考文献吧
大体思路上来说用牛顿法需要计算Hessian矩阵的逆矩阵,运算复杂度太高(O(n3)O(n3)级别的)。因此,很多牛顿算法的变形出现了,这类变形统称拟牛顿算法。
BFGS是用迭代法去近似计算海森矩阵。
而BFGS需要额外储存近似的那个海森矩阵,这时L-BFGS就出现了,它每次是计算出要计算近似海森矩阵就好。详细的看下面的参考文献吧。