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