未經允許,不得擅自改動和轉載
我們的第一個學習算法是線性回歸算法。在這段視頻中,你會看到這個算法的概況,更
重要的是你將會了解監督學習過程完整的流程。
模型表示(Model Representation)
讓我們通過一個例子來開始:這個例子是預測住房價格的,我們要使用一個數據集,數
據集包含俄勒岡州波特蘭市的住房價格。比方說,如果你朋友的房子是 1250 平方尺大小,你要告訴他們這房子能賣多少錢。
它被稱作監督學習是因為對于每個數據來說,我們給出了“正確的答案”,即告訴我們:
根據我們的數據來說,房子實際的價格是多少,而且,更具體來說,這是一個回歸問題。回
歸一詞指的是,我們根據之前的數據預測出一個準確的輸出值,對于這個例子就是價格,同
時,還有另一種最常見的監督學習方式,叫做分類問題,當我們想要預測離散的輸出值,例
如,我們正在尋找癌癥腫瘤,并想要確定腫瘤是良性的還是惡性的,這就是 0/1 離散輸出的
問題。更進一步來說,在監督學習中我們有一個數據集,這個數據集被稱訓練集。
我將在整個課程中用小寫的 m 來表示訓練樣本的數目。
以之前的房屋交易問題為例,假使我們回歸問題的訓練集(Training Set)如下表所示:
- m 代表訓練集中實例的數量
- x 代表特征/輸入變量
- y 代表目標變量/輸出變量
- (x,y) 代表訓練集中的實例
- ( x(i),y(i) ) 代表第 i 個觀察實例
- h 代表學習算法的解決方案或函數也稱為假設(hypothesis)
我將選擇最初的使用規則 h 代表 hypothesis,因而,要解決房價預測問題,我們實際上
是要將訓練集“喂”給我們的學習算法,進而學習得到一個假設 h,然后將我們要預測的房屋
的尺寸作為輸入變量輸入給 h,預測出該房屋的交易價格作為輸出變量輸出為結果。那么,
對于我們的房價預測問題,我們該如何表達 h?
一種可能的表達方式為:
因為只含有一個特征/輸入變量,因此這樣的問題叫作單變量線性回歸問題。
代價函數
在這段視頻中我們將定義代價函數的概念,這有助于我們弄清楚如何把最有可能的直線
與我們的數據相擬合。如圖
在線性回歸中我們有一個像這樣的訓練集,m 代表了訓練樣本的數量,比如 m = 47。
而我們的假設函數,也就是用來進行預測的函數,是這樣的線性函數形式:
接下來我們會引入一些術語我們現在要做的便是為我們的模型選擇合適的參數
(parameters)θ0 和 θ1,在房價問題這個例子中便是直線的斜率和在 y 軸上的截距。
我們選擇的參數決定了我們得到的直線相對于我們的訓練集的準確程度,模型所預測的
值與訓練集中實際值之間的差距(下圖中藍線所指)就是建模誤差(modeling error)。
我們的目標便是選擇出可以使得建模誤差的平方和能夠最小的模型參數。 即使得代價函數
最小。
我們繪制一個等高線圖,三個坐標分別為 θ0 和 θ1 和 J(θ0,θ1):
則可以看出在三維空間中存在一個使得 J(θ0,θ1)最小的點。
代價函數也被稱作平方誤差函數,有時也被稱為平方誤差代價函數。我們之所以要求出
誤差的平方和,是因為誤差平方代價函數,對于大多數問題,特別是回歸問題,都是一個合
理的選擇。還有其他的代價函數也能很好地發揮作用,但是平方誤差代價函數可能是解決回
歸問題最常用的手段了。
也許這個函數J(θ0,θ1)有點抽象,可能你仍然不知道它的內涵,在接下來的幾個視頻里,
我們要更進一步解釋代價函數J 的工作原理 ,并嘗試更直觀地解釋它在計算什么,以及我
們使用它的目的。
代價函數的直觀理解
在上一個視頻中,我們給了代價函數一個數學上的定義。在這個視頻里,讓我們通過一
些例子來獲取一些直觀的感受,看看代價函數到底是在干什么。
當然,我們真正需要的是一種有效的算法,能夠自動地找出這些使代價函數 J 取最小值
的參數 θ0 和 θ1 來。
我們也不希望編個程序把這些點畫出來,然后人工的方法來讀出這些點的數值,這很明
顯不是一個好辦法。我們會遇到更復雜、更高維度、更多參數的情況,而這些情況是很難畫
出圖的,因此更無法將其可視化,因此我們真正需要的是編寫程序來找出這些最小化代價函
數的 θ0 和 θ1 的值,在下一節視頻中,我們將介紹一種算法,能夠自動地找出能使代價函數
J 最小化的參數 θ0 和 θ1 的值。
梯度下降Gradient Descent(自動地找出能使代價函數J 最小化的參數 θ0 和 θ1 的值)
梯度下降是一個用來求函數最小值的算法,我們將使用梯度下降算法來求出代價函數
J(θ0,θ1) 的最小值。
梯度下降背后的思想是:開始時我們隨機選擇一個參數的組合(θ0,θ1,...,θn),計算代價
函數,然后我們尋找下一個能讓代價函數值下降最多的參數組合。我們持續這么做直到到到
一個局部最小值(local minimum),因為我們并沒有嘗試完所有的參數組合,所以不能確定
我們得到的局部最小值是否便是全局最小值(global minimum),選擇不同的初始參數組合,可能會找到不同的局部最小值。
想象一下你正站立在山的這一點上,站立在你想象的公園這座紅色山上,在梯度下降算
法中,我們要做的就是旋轉 360 度,看看我們的周圍,并問自己要在某個方向上,用小碎步
盡快下山。這些小碎步需要朝什么方向?如果我們站在山坡上的這一點,你看一下周圍,你
會發現最佳的下山方向,你再看看周圍,然后再一次想想,我應該從什么方向邁著小碎步下
山?然后你按照自己的判斷又邁出一步,重復上面的步驟,從這個新的點,你環顧四周,并
決定從什么方向將會最快下山,然后又邁進了一小步,并依此類推,直到你接近局部最低點
的位置。
批量梯度下降(batch gradient descent)算法的公式為:
其中 α 是學習率(learning rate),它決定了我們沿著能讓代價函數下降程度最大的方
向向下邁出的步子有多大,在批量梯度下降中,我們每一次都同時讓所有的參數減去學習速
率乘以代價函數的導數。
在梯度下降算法中,還有一個更微妙的問題,梯度下降中,我們要更新 θ0 和 θ1 ,當 j=0
和 j=1 時,會產生更新,所以你將更新 Jθ0 和 Jθ1。實現梯度下降算法的微妙之處是,在這
個表達式中,如果你要更新這個等式,你需要同時更新 θ0 和 θ1,我的意思是在這個等式中,
我們要這樣更新:
θ0:= θ0 ,并更新 θ1:= θ1。
實現方法是:你應該計算公式右邊的部分,通過那一部分計算出 θ0 和 θ1 的值,然后同
時更新 θ0 和 θ1。
讓我進一步闡述這個過程:
在梯度下降算法中,這是正確實現同時更新的方法。我不打算解釋為什么你需要同時更
新,同時更新是梯度下降中的一種常用方法。我們之后會講到,同步更新是更自然的實現方
法。當人們談到梯度下降時,他們的意思就是同步更新。
在接下來的視頻中,我們要進入這個微分項的細節之中。我已經寫了出來但沒有真正定
義,如果你已經修過微積分課程,如果你熟悉偏導數和導數,這其實就是這個微分項:
如果你不熟悉微積分,不用擔心,即使你之前沒有看過微積分,或者沒有接觸過偏導數
在接下來的視頻中,你會得到一切你需要知道,如何計算這個微分項的知識。
下一個視頻中,希望我們能夠給出實現梯度下降算法的所有知識 。
梯度下降的直觀理解
在之前的視頻中,我們給出了一個數學上關于梯度下降的定義,本次視頻我們更深入研
究一下,更直觀地感受一下這個算法是做什么的,以及梯度下降算法的更新過程有什么意義。
梯度下降算法如下圖:
描述:對 θ 賦值,使得 J(θ)按梯度下降最快方向進行,一直迭代下去,最終得到局部最
小值。其中 α 是學習率(learning rate),它決定了我們沿著能讓代價函數下降程度最大的方
向向下邁出的步子有多大。
對于這個問題,求導的目的,基本上可以說取這個紅點的切線,就是這樣一條紅色的直
線,剛好與函數相切于這一點,讓我們看看這條紅色直線的斜率,就是這條剛好與函數曲線
相切的這條直線,這條直線的斜率正好是這個三角形的高度除以這個水平長度,現在,這條
線有一個正斜率,也就是說它有正導數,因此,我得到的新的 θ1,θ1 更新后等于 θ1 減去一
個正數乘以 α。
這就是我梯度下降法的更新規則:
讓我們來看看如果 α 太小或 α 太大會出現什么情況:
如果 α 太小了,即我的學習速率太小,結果就是只能這樣像小寶寶一樣一點點地挪動,
去努力接近最低點,這樣就需要很多步才能到達最低點,所以如果 α 太小的話,可能會很慢
因為它會一點點挪動,它會需要很多步才能到達全局最低點。
如果 α 太大,那么梯度下降法可能會越過最低點,甚至可能無法收斂,下一次迭代又移
動了一大步,越過一次,又越過一次,一次次越過最低點,直到你發現實際上離最低點越來
越遠,所以,如果 α 太大,它會導致無法收斂,甚至發散。
現在,我還有一個問題,當我第一次學習這個地方時,我花了很長一段時間才理解這個
問題,如果我們預先把 θ1放在一個局部的最低點,你認為下一步梯度下降法會怎樣工作?
假設你將 θ1初始化在局部最低點,在這兒,它已經在一個局部的最優處或局部最低點。
結果是局部最優點的導數將等于零,因為它是那條切線的斜率。這意味著你已經在局部最優
點,它使得 θ1不再改變,也就是新的 θ1等于原來的 θ1,因此,如果你的參數已經處于局部
最低點,那么梯度下降法更新其實什么都沒做,它不會改變參數的值。這也解釋了為什么即
使學習速率 α 保持不變時,梯度下降也可以收斂到局部最低點。
在接下來的視頻中,我們要用代價函數 J,回到它的本質,線性回歸中的代價函數。也
就是我們前面得出的平方誤差函數,結合梯度下降法,以及平方代價函數,我們會得出第一
個機器學習算法,即線性回歸算法。
梯度下降的線性回歸
在以前的視頻中我們談到關于梯度下降算法,梯度下降是很常用的算法,它不僅被用在
線性回歸上和線性回歸模型、平方誤差代價函數。在這段視頻中,我們要將梯度下降和代價
函數結合。我們將用到此算法,并將其應用于具體的擬合直線的線性回歸算法里。
梯度下降算法和線性回歸算法比較如圖:
對我們之前的線性回歸問題運用梯度下降法,關鍵在于求出代價函數的導數,即:
則算法改寫成:
我們剛剛使用的算法,有時也稱為批量梯度下降。實際上,在機器學習中,通常不太會
給算法起名字,但這個名字”批量梯度下降”,指的是在梯度下降的每一步中,我們都用到了
所有的訓練樣本,在梯度下降中,在計算微分求導項時,我們需要進行求和運算,所以,在
每一個單獨的梯度下降中,我們最終都要計算這樣一個東西,這個項需要對所有 m 個訓練
樣本求和。因此,批量梯度下降法這個名字說明了我們需要考慮所有這一"批"訓練樣本,而
事實上,有時也有其他類型的梯度下降法,不是這種"批量"型的,不考慮整個的訓練集,而
是每次只關注訓練集中的一些小的子集。在后面的課程中,我們也將介紹這些方法。
但就目前而言,應用剛剛學到的算法,你應該已經掌握了批量梯度算法,并且能把它應
用到線性回歸中了,這就是用于線性回歸的梯度下降法。
課程代碼:https://github.com/HuangCongQing/MachineLearning_Ng
本文參考自-黃海廣博士 斯坦福大學 2014機器學習教程中文 筆記
鏈接:http://pan.baidu.com/s/1dF2asvf 密碼:1ewf
分享吳恩達機器學習視頻 下載 鏈接:
鏈接: http://pan.baidu.com/s/1pKLATJl 密碼: xn4w
好看的人兒,點個喜歡? 你會更好看哦~~