1. 程式人生 > >機器學習——優化演算法:牛頓法-初探

機器學習——優化演算法:牛頓法-初探

前言

1、看了關於牛頓法相關的文章,下面是總結記錄。

2、感受的話:數學公式最為重要的是數學符號語言的理解,如果第一次看不懂很正常,保持住心態最為重要,然後將每個符號帶入公式和公式描述語言裡就能理解,還有一篇看不懂就看第二篇,第三篇....(ps:我是捏著鼻子看完又臭又長的公式再見)

必備知識點:

1、泰勒級數展開式


(ps:這個要記下來,不要問為什麼)

2、極值點

對任意的函式f(x)的一階導為0時,該點一定是極值點。


這裡假設我們要求的值是Xt,其估計值為Xk,這裡一定要注意,有了估計值,要通過牛頓法來逼近Xt.

3、雅克比矩陣(Jacobian):

在向量分析中,雅可比矩陣是函式的一階偏導數以一定方式排列成的矩陣,其行列式稱為雅可比行列式。

翻譯如下:

就是由多元函式的一階偏導函式構成的一維向量

4、海森矩陣Hessian matrix 或 Hessian

是一個多變數實值函式的二階偏導陣列成的方塊矩陣

翻譯如下:

由多元函式的各個變數的二階偏導構成的,是對雅克比向量再求導的結果。

(就是對一坨一維向量再求導後就是這麼個一坨矩陣)

關係歸納:


公式推導:

(這裡我直接借用了第三篇文章中的截圖)


這裡我在關鍵處做了筆記。

由1式到2式沒什麼可說的,捨棄泰勒級數後的最小項,對2式求導得到3式是關鍵。

1、f(x)求導,這裡的求導一定是指對x求導,所以2式中x最高次項就是x的平方項。
2、對於已知f(x),一階導f'(x)可以寫出來表示式。
3、f(x)=ax+b 如果a,b為常數,則f'(x)=a.
4、對於已知X=Xk,帶入一階導和二階導中,值可以計算出來的,是個常數項,不會參與泰勒級數展開式的等號左右兩項的求導中

這樣再來看由2式到3式,原文的作者已經寫得很清晰了。一開始最為頭疼就是怎麼會出來個f''(Xk)這個玩意兒,其實就是f(Xk)的二階導而已,是個常數項,照抄就行。

到上面為止,我們只能說到了一維能理解了。也就是第3篇作者所說n=1,就是一維空間。也是在高數中的常見知識點。

N維空間

(這裡我依然用截圖)


雅克比矩陣說明

一階導明確求導變數,其餘看成常量,所以一階導的向量化表示無壓力看明白(ps:看官若有不明白之處請自行問度娘)。到二階導我是一度暈厥過去。大哭

Hession矩陣的說明

二元函式的Hession矩陣:


多元函式的Hession矩陣:


我又參考了第2篇文章中的說明,和R程式碼的計算結果,理解二元的了,然後進而推廣理解了多元的情況。


(ps:我自己下載了R和RStudio驗證了程式碼)

程式碼說明:

(關於程式碼說明此處只能給出簡單的雅克比和海森矩陣的說明,也就是第2篇中的程式碼說明,第一篇有部分程式碼我沒看明白尷尬)

1、雅克比矩陣計算:


2、海森矩陣計算:


最後部分:

公式推導的最後,在理解了雅克比和海森矩陣後,剩餘部分都是符號計算和一維的情況一樣,所以沒什麼難理解的,難以計算,這也恰是其一個缺點。(ps:看官可自己看第3篇剩餘部分)

結束語:

演算法公式看的著重點是對每個符號的含義把握住,帶入到公式中看,其實沒有你想的那麼難,數學家為了好表達(就是少碼字!!!!),就借用一大推的表示符號。

(ps:這裡沒有對第一篇參考文章做說明,解釋,寫不動了,臥槽,快凌晨兩點了睡覺,明天還上班)

參考文章說明

第1/2兩篇說明

第1、2兩篇是關於R實現的,並舉例說明的,我簡單把程式碼拷貝到R studio中運行了,很直觀,特別是第二篇,臥槽,茅塞頓開。

第3篇說明

第3篇是又臭又長的數學公式文章,MD我第一邊看的時候就想罵娘,能不能說人話,不過自己翻譯之後,還是很感謝作者的大笑

參考文章:

3、牛頓法