以前咱們已經講了代價函數了,這節咱們講代價函數J最小化的梯度降低法。web
梯度降低是很經常使用的算法。它不只被用在線性迴歸上,還被普遍應用於機器學習的衆多領域。算法
下面是問題概述。咱們有一個函數J(θ0,θ1),這也許是個線性迴歸的代價函數,也許是個須要最小化的其餘函數。咱們須要用一個算法,來最小化函數J(θ0,θ1)。機器學習
實際上,梯度降低算法能夠應用於更通常的函數,如J(θ0,θ1,θ2,......θn),你但願能夠在θ0到θn之上最小化此函數。可是爲了簡化,咱們這裏只用θ0,θ1兩個參數。函數
梯度降低算法的基本思想是:首先給定θ0和θ1初始值(其實給定多少都不重要),但一般都設θ0=0,θ1=0。而後,咱們不停地一點點地改變θ0和θ1,來使J(θ0,θ1)變小。直到咱們找到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的值是不同的。