1 梯度下降法
我們使用梯度下降法是為了求目標函數最小值f(X)對應的X,那么我們怎么求最小值點x呢?注意我們的X不一定是一維的,可以是多維的,是一個向量。我們先把f(x)進行泰勒展開:
這里的α是學習速率,是個標量,代表X變化的幅度;d表示的是單位步長,是一個矢量,有方向,單位長度為1,代表X變化的方向。什么意思呢?就是說我們這里求最值,不是一下子就找到最小值對應的X,而是一點點的迭代,逼近最小值對應的X,每一次迭代新的X即X’就是X+αd(下圖藍色點都可以是X’),(注意這里的αd是矢量,這里是矢量相加,有方向的問題。)如圖(以二維為例):
那么我們每一次迭代想要的X’要有什么要求呢?要求就是每次迭代新的X’使達到最小值,即在上面的所有的X’,那個紅框的X’使f(X’)最小,我們就是找到那個X’,然后不斷的迭代,(如果你覺得每次迭代的X幅度小,就調整那個學習速率α,幅度大,就調小)我們就找到趨近於f(X)最小的X。我們來看每次迭代中,怎么找到新的X’。
我們想找f(X+αd)的最小值,我們認為o(α)(即二次導數及以上的項)為無窮小,忽略不計。(這個決定也是梯度下降法與牛頓法的區別,下面說原因 )那么問題就變成了,我們要最小,
α是一個系數,是兩個向量的內積,也就是|g|*|d|*cosθ,如圖:
那么也就是梯度向量與d的向量夾角為180°的時候,取最小值:-|g|*|d|。梯度向量與d的向量夾角為180°.即如圖:
所以我們的αd可取值為-αg,因此X’=X-αg.
接下來繼續重復上述步驟迭代。直到收斂。
2 牛頓法
上面的最速下降法只用到了梯度信息,即目標函數的一階導數信息,而牛頓法則用到了二階導數信息。我們先把f(x)進行泰勒展開:
其中的g的每一維度是f(X)分別對X的每一維求一階偏導數(所以g是一個向量),G是f(X)的每一維度分別對變量X的每一維求二階導數(因此G是一個矩陣,叫hessian矩陣,如圖(右))。這次跟上面那個公式只是形式稍微變了一下,內容都是一樣的。這里的Xk表示原來的X點,X表示新的X點(就是上面的X’)。在這里我們令d=X-Xk,即每次迭代在單位向量d上進行X的變化(沒有α這個幅度了,d的模也不一定是1,這里不是人為制定的步長多少,而是計算中該是多少就多少)。即我們找到了d,我們就知道了新的X,如圖(左):
每一次迭代中,我們依然要通過最小化每一次的f(X)找到每一次想要的紅框的X。
這一次,我們通過對f(X)求導=0,那么得到的X就是每一次迭代想要的紅框的X。即:
因為我們已知X=Xk-d,所以
,那么新的X就得到了。然后繼續迭代,直到收斂。
。