【機器學習】(2):梯度下降算法

    上一章中我們簡單介紹了機器學習的大概情況,今天我們開始循序漸進地學習機器學習中相關的算法。在接觸經典算法之前,我們先來了解下“梯度下降”算法。
一、算法背景
    作爲一個算法演示的背景,我們還是採用上一章中提到的房屋價格和房屋大小的關係問題,不同大小的房屋對應不同的房價,我們要通過分析已有的數據樣本,來預 測一個新樣本的房價。這裏其實是監督式學習中迴歸問題的簡單應用,如果所有的特性因變量都是一次的關係,那麼就稱之爲一個線性迴歸問題。下面就是我們解決 問題的基本思路:

    首先從訓練集中使用學習算法,得到一個關於問題的假設(實質是H(X)=Y的映射),然後選取一個新的房屋,由其大小預測其價格。解決這個問題還需要規定一些符號便於後面的說明,如:
1. M:樣本集,表示所有的訓練集;
2. X:輸入變量,也叫做feature,這個例子裏就是房屋大小;
3. Y:輸出變量,也叫做targeted variable,這個例子裏就是房屋價格;
4. (X,Y):表示一個訓練樣本實例;
5. 第i個樣本實例:

二、梯度下降
    對於上面房屋價格和房屋大小的這個例子,如果我們僅僅考慮線性關係,那麼Y應當都是X的線性關係。作爲演示的例子,我們不妨設房屋大小、房間數量是房屋價 格的兩個線性因變量,那麼我們的假設H(X)其實可以寫作關於X的函數,爲了方便,我們將後面所用到的公式和結果一併寫在下面:

(1)式中表示的是當考慮房屋大小和房間數量兩個因變量時的線性函數,其中X0的值爲1,X1表示房屋大小,X2表示房間數量;
(2)式中的J函數,就是我們的目標函數,即如果存在一個函數可以最好的擬合現有的訓練數據集M,那麼所有樣本在該函數上的方差一定最小,前面乘以1/2是爲了後面運算化簡的方便,不必細究;
(3)式就是我們所說的梯度下降算法的更新公式,將現有訓練集的所有樣本考慮在內,那麼變量成爲了兩個係數,因此我們不斷變化係數以尋求使得H函數達到最小值的值,這裏的是一個常變量,表示的是每次下降的步長,如果該值過小,導致算法收斂時間太長,如果該值過大,則有可能會越過最小值點;
(4)式是僅僅考慮只有一個樣本的時候得到的關於梯度下降的公式;
(5)式是考慮有m個樣本的時候的梯度下降公式;
(6)式是隨機梯度下降公式;
    注意!梯度下降的思想其實很簡單,如果將所有的樣本值繪成等高線圖,那麼好比一個人站在其中一點,每當要邁步的時候都要考慮哪個方向邁一步可以最快下山。這裏其選擇的最快下山方向其實是該點的偏導數。具體如圖:


    同理,我們也可以看等高線圖:

    從上面的(5)式中我們可以看出,每次更新一次係數的時候,都需要遍歷所有的樣本集合進行運算,因此稱爲“批梯度算法”,但是如果遇到非常大的樣本集合, 這樣無疑是十分低效的。因此我們又有了“隨機梯度算法”,其思想就是每次只使用一個樣本來更新所有的參數值,但是需要更新m*n次(m是樣本大小,n是因 變量個數),僞代碼就是:
Repeat {
    For j = 1 to m {
        (6)式  (for all i)
    }
}
    隨機梯度算法的收斂速度要比批梯度要快,但是最後收斂的未必有批梯度那麼準確,也許會圍繞最小值點來回擺動。由於梯度算法的核心是減去了偏導數,因此梯度算法一定會有收斂值,而且對於線性問題來說,所得的局部最小值往往就是全局最小值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章