天天看點

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

一、引入

        在前幾節課我們講到,我們希望能夠找到曲線拟合效果最好的線條,這樣的線條的誤差最小,是以就轉化成了下面這幅圖所表達的内容。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

        我們有一些函數,這些函數會有n個參數,我們希望能得到這個函數的最小值,為了友善計算,我們從最簡單的入手,讓參數的個數僅有兩個。對于這個函數,我們會給定初始的參數θ0和θ1,不斷改變他們的值,進而改變函數值,直到我們找到我們希望的函數的最小值。是以,我們引入梯度下降算法。

二、什麼是梯度?

        在微積分裡面,對多元函數的參數求∂偏導數,把求得的各個參數的偏導數以向量的形式寫出來,就是梯度。比如函數f(x,y), 分别對x,y求偏導數,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,簡稱grad f(x,y)或者▽f(x,y)。對于在點(x0,y0)的具體梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),如果是3個參數的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此類推。

        那麼這個梯度向量求出來有什麼意義呢?他的意義從幾何意義上講,就是函數變化增加最快的地方。具體來說,對于函數f(x,y),在點(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者說,沿着梯度向量的方向,更加容易找到函數的最大值。反過來說,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度減少最快,也就是更加容易找到函數的最小值。

三、梯度上升與梯度下降

        在機器學習算法中,在最小化損失函數時,可以通過梯度下降法來一步步的疊代求解,得到最小化的損失函數,和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來疊代了。

        梯度下降法和梯度上升法是可以互相轉化的。比如我們需要求解損失函數f(θ)的最小值,這時我們需要用梯度下降法來疊代求解。但是實際上,我們可以反過來求解損失函數 -f(θ)的最大值,這時梯度上升法就派上用場了。

四、梯度下降算法了解

        下面這幅圖,可以看做兩座高山,我們希望能以最快的速度下山,那我們每一步需要朝向什麼方向呢?假設我們從圖上“+”位置開始下山,我們假定第二幅圖中的方向就是下山最快的方向,那達到第二個位置的時候,相當于處在一個新起點,我們會照着第一步的方法,再選擇一個新的我們認為最好的方向走第二步,如下面第三幅圖所示。我們照着這種方式,一步一步走下去,直到山腳。也就是在圖中,不管從哪個位置開始,每走到一個位置,就需要判斷,找到最好的位置走第二步。而這種找最好位置的方法就是梯度下降算法。即每到一個位置,求解目前位置的梯度,沿着梯度的負方向(圖像上目前最陡峭的位置)向下走一步,然後繼續求解目前位置梯度,向這一步所在位置沿着最陡峭的位置走一步。這樣一步步的走下去,一直走到覺得我們已經到了圖像的局部最低點。(注:局部最低點不一定是整個資料集的最低點)。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)
【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)
【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)
【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

        因為走到的是局部最低點,不是整體最低點,是以梯度下降不一定能夠找到全局的最優解,有可能是一個局部最優解。而且,相近的起點,可能最終的結果也有很大差别。比如下圖,雖然起點與上面情況起點相差很少,但是通過下降梯度算法,最終的位置卻到了另外一個局部最低點。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)
【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

五、梯度下降算法定義

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

        上面這個公式就是梯度下降的算法,那這個算法表達的是什麼含義呢?

        首先,給出所有的符号的定義,便于大家了解:

            :=   :  這個符号是指派符号;

            =    : 這個符号是等于符号;

            α    : 這個符号是下降速率(learning rate),它控制我們用多大的幅度來更新θj。例如在下山的例子中,它控制下山的速率;

要注意的是,這裡的等于和指派與C++等程式設計語言是不同的,以C++為例,=表示指派,==表示等于。

        在橫線的下面,寫了一個Correct:Simultaneous update(正确的:同時更新),這個是什麼意思呢?大家對比一下下面兩組公式,一個是正确的,一個是不正确的。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

        我們能發現,差別在于,前面的θ0和θ1是同時更新的,然後在做疊代,而後面的是先求出θ0,然後求θ1,為什麼必須要同時更新呢?

        我自己的了解是: 疊代時, θ0和θ1是需要上一組的θ0和θ1,θ0和θ1是一組,即不可分的,同一組的θ0和θ1是由上一組的θ0和θ1生成的,相鄰兩組之間的θ0和θ1不能構成另一個θ0或θ1。

        是以我們要記住一句話:梯度下降,必須要同步更新;不同步更新,不是梯度下降算法。

        我們再簡化一下,假設隻有一個參數θ1,并且假設圖像如下圖所示。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

        那我們能從圖像看出最低點的位置,計算機怎麼更加精确地找到呢?假設θ1從最低點的右側開始對圖像進行初始化,函數的導數大于0,α是速率,大于0,這個時候,新的θ1小于上一個θ1。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

        同理,如果θ1從最低點的左側開始對圖像進行初始化,函數的導數小于0,α是速率,大于0,這個時候,新的θ1大于上一個θ1。 當然,如果恰好θ1就是最小值,那這個時候,導數等于0,θ1的值就不會變了。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

        那麼,會不會出現一種情況,當初始化的值不為最小值時,進行梯度下降處理後到了最小值的另一邊呢?答案是肯定的,因為α的值沒有限制,是以在取值時要注意。如果α的值過小,下降速率會很慢,就像下面左邊的圖一樣。當然,如果α的值太大,就會出現右圖的情況,最後無法收斂,離最小值越來越遠。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)
【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

六、舉例

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)

        假設上圖是我們經過試驗計算得到的代價函數。我們從圖上的θ1點(圖中最右上角的點)開始做梯度下降。當α的值比較恰當(不會過大或過小),會得到下圖,第一次做梯度下降時,函數圖像比較陡,導數值比較大,下降的比較快,第二次做梯度下降時,圖像較第一次更加平緩,導數值變小,下降速度變慢,繼續做梯度下降,直到收斂到最低點,最終得到最優解。

【吳恩達機器學習筆記】005 梯度下降(Gradient Descent)