1. 程式人生 > >最優化演算法(二):牛頓法

最優化演算法(二):牛頓法

1.推導

       牛頓法和擬牛頓法是求解無約束最優化問題的常用方法,它們比梯度下降收斂更快。考慮同樣的一個無約束最優化問題:

                                                                                min_{x\in R^{n}}f(x)

       其中f(x)具有二階連續偏導數的性質,如果k次迭代值為x^{(k)},則可進行二階泰勒展開:

                                                    f(x)=f(x^{(k)})+g_{k}^{T}(x-x^{(k)})+1/2H(x^{(k)})(x-x^{(k)})^{2}

      上述公式裡面的值不解釋了,就是一階導和二階導(也稱海塞矩陣H(X)在此點的值),函式有極值的必要條件就是在極值點      處一階導數為0。牛頓法的每次迭代就是讓一階導為零,即滿足:

                                                                                 f^{'}(x^{(k+1)})=0

       而上式根據泰勒一階導等於:

                                                                  f^{'}(x^{(k+1)})=g_{k}+H(x-x^{(k)})=0

       根據這一步就能得到迭代公式:

                                                                           x^{(k+1)}=x^{(k)}-H^{-1}_{k}g_{k}

2.對比

     為什麼牛頓法更快呢?我和網上其他的想的不太一樣,我認為是因為每次迭代,牛頓法都能找到當前的極小值,而不是單純找到當前下降最快的部分,直接走到當前能走的最低點,在下一次迭代中,換一個點繼續求解。

3.擬牛頓法

    擬牛頓法就是對牛頓法的計算上加以簡化,因為牛頓法每次會求海塞矩陣的逆矩陣,比較麻煩,所以它會用一個近似矩陣       G(x)替代H(x)的逆矩陣,所以擬牛頓法不需要二階導數的資訊,有時比牛頓法更為有效。 常用的擬牛頓實現方法有DFP和BFGS.。具體的推導有興趣可以見統計學習方法P220,這個演算法我用得不多,所以沒有細究。