1. 程式人生 > >(吳恩達筆記 1-3)——損失函式及梯度下降

(吳恩達筆記 1-3)——損失函式及梯度下降

本節將直觀的說明一下損失函式是用來幹嘛的,為什麼會用損失函式。其中內容參考自吳恩達講學視訊字幕及截圖。

1、損失函式(loss function)

損失函式(loss function)或代價函式(cost function)來度量預測錯誤程度

也就是說,對於一個機器學習演算法,如何評價一個演算法是否是比較好的演算法,需要提前定義一個損失函式,來判斷這個演算法是否是最優的,而後面不斷的優化求梯度下降,使得損失函式最小,應該也是為了讓一個演算法達到意義上的最優,

這裡寫圖片描述

接下來我們會引入一些術語我們現在要做的便是為我們的模型選擇合適的 引數(parameters)θ0 和 θ1, 在房價問題這個例子中便是直線的斜率和在 y 軸上的截距。

我們選擇的引數決定了我們得到的直線相對於我們的訓練集的準確程度, 模型所預測的
值與訓練集中實際值之間的差距(下圖中藍線所指)就是 建模誤差(modeling error)。
這裡寫圖片描述
我們的目標便是選擇出可以使得建模誤差的平方和能夠最小的模型引數

這裡寫圖片描述

代價函式也被稱作平方誤差函式,有時也被稱為平方誤差代價函式。我們之所以要求出
誤差的平方和,是因為誤差平方代價函式,對於大多數問題,特別是迴歸問題,都是一個合
理的選擇。還有其他的代價函式也能很好地發揮作用,但是平方誤差代價函式可能是解決迴歸問題最常用的手段了。

下面是我們的假設目標函式的公式,我們需要通過costfunction求得引數theta0和theta1

這裡寫圖片描述

我們這裡先把theta0假設做0,改變theta1,這裡就會得到左邊的圖所示三條不同的直線,這是我們的目標直線,將這三條直線上的預測的點,與實際的資料點y進行比較,也就是每個點(將1,2,3帶入直線函式中求得的y與實際y相減),這裡就會得到J為損失值。

我們將theta1作為變數,取不同的值所得的不同曲線,再求得不同的損失值J作為因變數,畫成右圖所示的曲線。

這便是我們要求的損失函數了,這裡我們可以看到在theta1取1事損失值為0,也就是左邊圖實際點畫線,y=1*x+0相重合,這時的損失值為0

這裡寫圖片描述

那麼如果把theta0也變動的話,就成了上面的三維所示的圖行,在圖中也可以找到一個使得損失函式最小的點,這個點對應的引數θ0 和 θ1,便是我們所要計算的引數。

那麼如何計算這兩個引數呢?

2、梯度下降計算函式引數

這裡便要用到數學上的梯度下降演算法了

梯度下降是一個用來求函式最小值的演算法,我們將使用梯度下降演算法來求出代價函式J(θ 0 ,θ 1 ) 的最小值。

梯度下降背後的思想是:

開始時我們隨機選擇一個引數的組合(θ 0 ,θ 1 ,...,θ n ),計算代價函式,然後我們尋找下一個能讓代價函式值下降最多的引數組合。我們持續這麼做直到到到一個區域性最小值(local minimum),因為我們並沒有嘗試完所有的引數組合,所以不能確定我們得到的區域性最小值是否便是全域性最小值(global minimum),選擇不同的初始引數組合,可能會找到不同的區域性最小值

吳恩達教授提出了一個比喻:

想象一下你正站立在山的這一點上,站立在你想象的公園這座紅色山上,在梯度下降演算法中,我們要做的就是旋轉 360 度,看看我們的周圍,並問自己要在某個方向上,用小碎步儘快下山。這些小碎步需要朝什麼方向?如果我們站在山坡上的這一點,你看一下週圍,你會發現最佳的下山方向,你再看看周圍,然後再一次想想,我應該從什麼方向邁著小碎步下山?然後你按照自己的判斷又邁出一步,重複上面的步驟,從這個新的點,你環顧四周,並決定從什麼方向將會最快下山,然後又邁進了一小步,並依此類推,直到你接近區域性最低點的位置。

這裡寫圖片描述

其中 α 是學習率(learning rate),它決定了我們沿著能讓代價函式下降程度最大的方向向下邁出的步子有多大,在批量梯度下降中,我們每一次都同時讓所有的引數減去學習速率乘以代價函式的導數

對於這個問題,求導的目的,基本上可以說取這個紅點的切線,就是這樣一條紅色的直線,剛好與函式相切於這一點,讓我們看看這條紅色直線的斜率,就是這條剛好與函式曲線相切的這條直線,這條直線的斜率正好是這個三角形的高度除以這個水平長度,現在,這條線有一個正斜率,也就是說它有正導數,因此,我得到的新的 θ 1 ,θ 1 更新後等於 θ 1 減去一個正數乘以 α。
這裡寫圖片描述

這就是我梯度下降法的更新規則

讓我們來看看如果 α 太小或 α 太大會出現什麼情況:

如果 α 太小了,即我的學習速率太小,結果就是隻能這樣像小寶寶一樣一點點地挪動,去努力接近最低點,這樣就需要很多步才能到達最低點,所以如果 α 太小的話,可能會很慢因為它會一點點挪動,它會需要很多步才能到達全域性最低點。

如果 α 太大,那麼梯度下降法可能會越過最低點,甚至可能無法收斂,下一次迭代又移動了一大步,越過一次,又越過一次,一次次越過最低點,直到你發現實際上離最低點越來越遠,所以,如果 α 太大,它會導致無法收斂,甚至發散。
這裡寫圖片描述

我想找到它的最小值,首先初始化我的梯度下降演算法,在那個品紅色的點初始化,如果我更新一步梯度下降,也許它會帶我到這個點,因為這個點的導數是相當陡的。現在,在這個綠色的點,如果我再更新一步,你會發現我的導數,也即斜率,是沒那麼陡的。

隨著我接近最低點,我的導數越來越接近零,所以,梯度下降一步後,新的導數會變小一點點。然後我想再梯度下降一步,在這個綠點,我自然會用一個稍微跟剛才在那個品紅點時比,再小一點的一步,到了新的紅色點,更接近全域性最低點了,因此這點的導數會比在綠點時更小。

所以,我再進行一步梯度下降時,我的導數項是更小的,θ1 更新的幅度就會更小。所以隨著梯度下降法的執行,你移動的幅度會自動變得越來越小,直到最終移動幅度非常小,你會發現,已經收斂到區域性極小值。

這就是梯度下降演算法,你可以用它來最小化任何代價函式 J,不只是線性迴歸中的代價函式 J。

3、梯度下降演算法

梯度下降演算法和線性迴歸演算法比較如圖

這裡寫圖片描述

梯度下降演算法:

這裡寫圖片描述

迭代求解引數值:

這裡寫圖片描述

我們剛剛使用的演算法,有時也稱為批量梯度下降。實際上,在機器學習中,通常不太會給演算法起名字,但這個名字”批量梯度下降”,指的是在梯度下降的每一步中,我們都用到了所有的訓練樣本,在梯度下降中,在計算微分求導項時,我們需要進行求和運算,所以,在每一個單獨的梯度下降中,我們最終都要計算這樣一個東西,這個項需要對所有 m 個訓練樣本求和。因此,批量梯度下降法這個名字說明了我們需要考慮所有這一”批”訓練樣本。
而事實上,有時也有其他型別的梯度下降法,不是這種”批量”型的,不考慮整個的訓練集,而是每次只關注訓練集中的一些小的子集。在後面的課程中,我們也將介紹這些方法。

但就目前而言,應用剛剛學到的演算法,你應該已經掌握了批量梯度演算法,並且能把它應用到線性迴歸中了,這就是用於線性迴歸的梯度下降法。

4、總結

以上便解答了我們對於一些入門機器學習演算法上的一些難以理解的公式,通過一些圖形更能直觀的感受和了解,畢竟知道怎麼來的更方便我們理解和接受。