[斯坦福大學2014機器學習教程筆記]第二章-梯度降低

    以前咱們已經講了代價函數了,這節咱們講代價函數J最小化的梯度降低法。web

    梯度降低是很經常使用的算法。它不只被用在線性迴歸上,還被普遍應用於機器學習的衆多領域。算法

    下面是問題概述。咱們有一個函數J(θ01),這也許是個線性迴歸的代價函數,也許是個須要最小化的其餘函數。咱們須要用一個算法,來最小化函數J(θ01)。機器學習

    實際上,梯度降低算法能夠應用於更通常的函數,如J(θ012,......θn),你但願能夠在θ0到θn之上最小化此函數。可是爲了簡化,咱們這裏只用θ01兩個參數。函數

    梯度降低算法的基本思想是:首先給定θ0和θ1初始值(其實給定多少都不重要),但一般都設θ0=0,θ1=0。而後,咱們不停地一點點地改變θ0和θ1,來使J(θ01)變小。直到咱們找到J的最小值或者局部最小值。學習

    下面咱們經過圖片來直觀地看一下它是怎麼工做的。spa

    首先咱們先從θ0和θ1的某個值出發。想象一下你正站立在山的這一點上,站立在你想象的公園這座紅色山上,在梯度降低算法中,咱們要作的就是旋轉360度,看看咱們的周圍,並問本身要在某個方向上,用小碎步儘快下山。這些小碎步須要朝什麼方向?若是咱們站在山坡上的這一點,你看一下週圍,你會發現最佳的下山方向,你再看看周圍,而後再一次想一想,我應該從什麼方向邁着小碎步下山?而後你按照本身的判斷又邁出一步,重複上面的步驟,從這個新的點,你環顧四周,並決定從什麼方向將會最快下山,而後又邁進了一小步,並依此類推,直到你接近局部最低點的位置。咱們在剛剛出發點右邊再出發一次,這時咱們獲得另一個局部最低點的位置。orm

    

    咱們就會發現,若是你的起始點偏移了一些,你會獲得一個徹底不一樣的局部最優解。這就是梯度降低算法的一個特色。blog

    這是梯度降低算法的定義。圖片

    咱們要更新參數θj爲θj減去α乘之後面的那一部分。咱們將會反覆作這一步,直至收斂。ci

    注意:1.咱們使用符號:=表示賦值。

            2.α是一個被稱爲學習率的數字。α決定了當梯度降低時,咱們邁出的步子有多大。若是α很大的話,那麼梯度降低就很迅速。若是α很小的話,那麼梯度降低就很緩慢。

            3.公式的最後一項是一個導數項。如今暫時先不講這個。

    在梯度降低算法中,還有一個更微妙的問題,梯度降低中,咱們要更新θ0和θ1 ,當j=0 和j=1時,會產生更新,因此你將更新J(θ0)和J(θ1)。實現梯度降低算法的微妙之處是,在這個表達式中,若是你要更新這個等式,你須要同時更新θ0和θ1,個人意思是在這個等式中,咱們要這樣更新:

                          θ0更新爲θ0減去某項,並將θ1更新爲θ1減去某項 。

    實現方法是:你應該計算公式右邊的部分,經過那一部分計算出θ0和θ1的值,而後同時更新θ0和θ1

    進一步地說,咱們讓temp0和temp1分別等於這兩個式子。首先先計算公式右邊的這一個部分,而後將值存入temp0和temp1中。這樣,咱們就能夠同時更新θ0和θ1了。以下圖左側。

   

    而右側的計算是錯的,由於它並無作到同步更新。左右兩邊的區別就是,當咱們計算temp1的值的時候,左邊是用的更新以前θ0的值,右邊用的是更新以後θ0的值,從而致使最後的temp1的值是不同的。

相關文章
相關標籤/搜索