下面就讓我們跟著吳恩達(dá)老師來學(xué)習(xí)單變量線性回歸這個基礎(chǔ)算法啦!停忿!有問題的盡管提出來就好啦!J裾恰瞎嬉!
在很多朋友們學(xué)習(xí)統(tǒng)計學(xué)或者機(jī)器學(xué)習(xí)時,一般第一個算法都是線性回歸算法厚柳,在下面的學(xué)習(xí)中氧枣,你將會了解到監(jiān)督學(xué)習(xí)過程完整的流程。關(guān)于監(jiān)督學(xué)習(xí)的簡述可以看我之前的文章哦1鹂濉便监!
一、模型表示
先從一個例子入手碳想。
這個例子是預(yù)測住房價格的烧董,我們要使用一個數(shù)據(jù)集,數(shù)據(jù)集包含俄勒岡州波特蘭市的住房價格胧奔。在這里逊移,我要根據(jù)不同房屋尺寸所售出的價格,畫出數(shù)據(jù)集龙填。假如胳泉,你的房子是1250平方尺大小,你要是賣了你能收到多少錢岩遗?我們現(xiàn)在可以做的就是根據(jù)數(shù)據(jù)構(gòu)建一個模型扇商,也許是條直線。
根據(jù)以往的數(shù)據(jù)可以擬合一條直線宿礁,然后就可以大概在直線上找到1250平方尺大小對應(yīng)的房子價格案铺,就在220000$左右(看到上圖綠色虛線與數(shù)字)。
這也是一個很典型的監(jiān)督學(xué)習(xí)算法的例子梆靖,因為對于每個數(shù)據(jù)控汉,我們給出了“正確的答案”,即告訴我們:根據(jù)我們的數(shù)據(jù)來說返吻,房子實際的價格是多少暇番,更具體地來說,這是一個回歸問題思喊”诔辏回歸就是我們根據(jù)之前的數(shù)據(jù)預(yù)測出一個準(zhǔn)確的輸出值,對于以上例子就是要預(yù)測一個準(zhǔn)確的房價恨课,同時舆乔,還有另一種最常見的監(jiān)督學(xué)習(xí)方式,叫做分類問題(參考第一章)剂公。在監(jiān)督學(xué)習(xí)中希俩,我們可以把已給的數(shù)據(jù)集,稱為訓(xùn)練集(Training Set)纲辽。
已房屋問題為例颜武,現(xiàn)在已有的數(shù)據(jù)集如下圖:
首先定義一下這個房屋回歸問題中牽涉的標(biāo)記:
m——訓(xùn)練集中實例的數(shù)量璃搜,即樣本數(shù)
x——特征或者是輸入變量,在此問題中就是房間平方尺數(shù)
y——目標(biāo)變量或者是輸出變量鳞上,在此問題中就是價格
(x,y)——訓(xùn)練集中的實例这吻,即樣本
(x^i ,y^i)——第i個實例,即第i個樣本
h——學(xué)習(xí)算法的解決方案或者函數(shù)也稱為假設(shè)
上圖是監(jiān)督學(xué)習(xí)的工作方式篙议,首先把訓(xùn)練集放進(jìn)算法唾糯,然后就會輸出一個算法的解決方案h,然后把輸入變量x輸入鬼贱,在房屋例子中就是房屋的平方尺數(shù)移怯,然后通過h可以計算出輸出變量y,在房屋例子中就是房屋的價格这难。因此h是一個從x到y(tǒng)的函數(shù)映射舟误。
步驟和數(shù)據(jù)集都有了,接下來的問題就是如何定義和表達(dá)h呢姻乓?
h可被表達(dá)為:
脐帝,因為只含有一個特征(輸入變量),因此這樣的問題叫作單變量線性回歸問題糖权。
二堵腹、代價函數(shù)
在線性回歸中我們有一個像上圖的訓(xùn)練集,m=47(樣本量為47)星澳。假設(shè)函數(shù)疚顷,此假設(shè)函數(shù)就是用來預(yù)測的函數(shù)。
接下來我們要做的就是為模型選擇合適的參數(shù)腿堤。在房屋問題中,
是直線的斜率如暖,
是在y軸上的截距笆檀。
我們選擇的參數(shù)決定了我們得到的直線相對于我們的訓(xùn)練集的準(zhǔn)確程度,模型所預(yù)測的值與訓(xùn)練集中實際值之間的差距(上圖中藍(lán)線所指)就是建模誤差盒至。我們的目標(biāo)便是選擇出可以使得模型誤差的平方和最小的模型參數(shù)酗洒。
這里可以引出代價函數(shù):
枷遂,目標(biāo)就是使代價函數(shù)最小樱衷。
我們繪制了一個等高線圖,三個坐標(biāo)分別是和
,可以從圖中看出痪伦,在三維空間中存在一個使
最小的點雹锣。
代價函數(shù)也被稱作平方誤差函數(shù),有時也被稱作為平方誤差代價函數(shù)癞蚕。我們之所以要求出誤差貧寒方和蕊爵,使因為誤差平方代價含糊對于大多數(shù)問題都是一個合理的選擇,特別是回歸問題涣达。還有其他的代價函數(shù)也能很好地發(fā)揮作用,但是平方誤差代價函數(shù)可能是解決回歸問題最常用的手段了证薇。
下面我們就對代價函數(shù)做個簡單的可視化度苔。設(shè)假設(shè)函數(shù)(令
)。那么此時的代價函數(shù)為
浑度,我們的優(yōu)化目標(biāo)就是令
最小化寇窑。
通過對比假設(shè)函數(shù)和代價函數(shù),我們可以觀察到箩张,假設(shè)函數(shù)是關(guān)于x的函數(shù)甩骏,而代價函數(shù)
是關(guān)于
的函數(shù),它控制著直線的斜率先慷。
現(xiàn)在來繪制這兩個函數(shù)讓我們更深入地了解饮笛。我們暫時設(shè),可以繪制出
的圖像论熙。當(dāng)
時福青,
,所以
。如下圖
當(dāng)時脓诡,斜率是一條0.5的直線无午,只給了三個樣本,所以樣本量m=3祝谚,此時得到代價函數(shù)
宪迟,如下圖。
以此類推可以求出...對應(yīng)的
根據(jù)求出來的值可以繪制以下圖像。
對于每個不同的
都有對應(yīng)的
席爽,可以從圖中看出箕憾,當(dāng)
時,對應(yīng)的
是最小的拳昌。那么我們的目的就達(dá)成了袭异。線性回歸的目標(biāo)就是找到適合的
,使得代價函數(shù)
最小炬藤。
三御铃、梯度下降
梯度下降是一個用來求函數(shù)最小值的算法碴里,我們將使用梯度下降法來求出代價函數(shù)
的最小值上真。
梯度下降背后的思想:開始時我們隨機(jī)選擇一個參數(shù)的組合,計算代價函數(shù)咬腋,然后我們尋找下一個能讓代價函數(shù)值下降最多的參數(shù)組合。我們持續(xù)這么做直到找到一個局部最小值(local minimum)睡互,因為我們并沒有嘗試完所有的參數(shù)組合根竿,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum),選擇不同的初始參數(shù)組合就珠,可能會找到不同的局部最小值寇壳。
可能這樣說有點抽象,我們再說得簡單易懂些妻怎。
想象一下你正站立在山的這一點上壳炎,站立在你想象的公園這座紅色山上(如上圖),在梯度下降算法中逼侦,我們要做的就是旋轉(zhuǎn)360度匿辩,看看我們的周圍,并問自己要在某個方向上榛丢,用最快的路線小碎步下山铲球。這些小碎步需要朝什么方向?如果我們站在山坡上的這一點晰赞,你看一下周圍睬辐,你會發(fā)現(xiàn)最佳的下山方向,你再看看周圍宾肺,然后再一次想想溯饵,我應(yīng)該從什么方向邁著小碎步下山?然后你按照自己的判斷又邁出一步锨用,重復(fù)上面的步驟丰刊,從這個新的點,你環(huán)顧四周增拥,并決定從什么方向?qū)羁煜律阶那桑缓笥诌~進(jìn)了一小步,并依此類推掌栅,直到你接近局部最低點的位置秩仆。我們可以認(rèn)為梯度下降法就是最快下山,就是根據(jù)你認(rèn)為最快的路線和方向一點點小碎步下山猾封,到達(dá)最低點澄耍。
批量梯度下降(batch gradient descent)算法的公式為:
其中是學(xué)習(xí)率(learning rate),符號“
”代表賦值。學(xué)習(xí)率決定了我們沿著能讓代價函數(shù)下降程度最大的方向向下邁出的步子有多大齐莲,如果
?值很大痢站,我們將會邁著很大的步子下山,梯度下降就很迅速选酗,相反則步子很小梯度下降緩慢阵难。在批量梯度下降中,我們每一次都同時讓所有的參數(shù)減去學(xué)習(xí)速率乘以代價函數(shù)的導(dǎo)數(shù)芒填。求導(dǎo)的目的就是求出與函數(shù)相切的直線的斜率呜叫。
我們將會反復(fù)做梯度下降,直到達(dá)到最低點殿衰。
實現(xiàn)梯度下降算法的微妙之處是對于梯度下降法的公式朱庆,你需要同時更新和
,那就是說你要計算出公式的右邊部分播玖,然后賦值到公式左邊的部分椎工。下面會給出公式來闡述這個更新的過程饭于。
先把公式右邊計算出來的結(jié)果賦值給temp0蜀踏,然后再把temp0賦值給,
也是同樣的方法掰吕。
在梯度下降算法中果覆,這是正確實現(xiàn)同時更新的方法。當(dāng)人們談到梯度下降時殖熟,他們的意思就是同步更新局待。
學(xué)習(xí)率
太大或太小
如果
太小了,即我的學(xué)習(xí)速率太小菱属,結(jié)果就是只能這樣像小寶寶一樣一點點地挪動钳榨,去努力接近最低點,這樣就需要很多步才能到達(dá)最低點纽门,所以如果
太小的話薛耻,可能會很慢,因為它會一點點挪動赏陵,它會需要很多步才能到達(dá)全局最低點饼齿。
如果
太大,那么梯度下降法可能會越過最低點蝙搔,甚至可能無法收斂缕溉,下一次迭代又移動了一大步,越過一次吃型,又越過一次证鸥,一次次越過最低點,直到你發(fā)現(xiàn)實際上離最低點越來越遠(yuǎn),所以敌土,如果
太大镜硕,它會導(dǎo)致無法收斂,甚至發(fā)散返干。
現(xiàn)在有個問題兴枯,如果我們預(yù)先把放在一個局部的最低點,你認(rèn)為下一步梯度下降法會怎樣工作矩欠?
假設(shè)你將初始化在局部最低點财剖,在這兒,它已經(jīng)在一個局部的最優(yōu)處或局部最低點癌淮。結(jié)果是局部最優(yōu)點的導(dǎo)數(shù)將等于零躺坟,因為它是那條切線的斜率。這意味著你已經(jīng)在局部最優(yōu)點乳蓄,它使得
不再改變咪橙。因此,如果你的參數(shù)已經(jīng)處于局部最低點虚倒,那么梯度下降法更新其實什么都沒做美侦,它不會改變參數(shù)的值。這也解釋了為什么即使學(xué)習(xí)速率
保持不變時魂奥,梯度下降也可以收斂到局部最低點菠剩。
下面來看一個例子。
我想找到它的最小值耻煤,首先初始化我的梯度下降算法具壮,在那個紫色的點初始化,如果我更新一步梯度下降哈蝇,也許它會帶我到這個點棺妓,因為這個點的導(dǎo)數(shù)是相當(dāng)陡的。現(xiàn)在炮赦,在這個綠色的點怜跑,如果我再更新一步,你會發(fā)現(xiàn)我的導(dǎo)數(shù)眼五,也即斜率妆艘,是沒那么陡的。隨著我接近最低點看幼,我的導(dǎo)數(shù)越來越接近零批旺,所以,梯度下降一步后诵姜,新的導(dǎo)數(shù)會變小一點點汽煮。然后我想再梯度下降一步,在這個綠點,我自然會用一個稍微跟剛才在那個紫色點時比暇赤,再小一點的一步心例,到了新的紅色點,更接近全局最低點了鞋囊,因此這點的導(dǎo)數(shù)會比在綠點時更小止后。所以,我再進(jìn)行一步梯度下降時溜腐,我的導(dǎo)數(shù)項是更小的译株,更新的幅度就會更小。所以隨著梯度下降法的運(yùn)行挺益,你移動的幅度會自動變得越來越小歉糜,直到最終移動幅度非常小,你會發(fā)現(xiàn)望众,已經(jīng)收斂到局部極小值匪补。
回顧一下,在梯度下降法中烂翰,當(dāng)我們接近局部最低點時夯缺,梯度下降法會自動采取更小的幅度,這是因為當(dāng)我們接近局部最低點時刽酱,很顯然在局部最低時導(dǎo)數(shù)等于零喳逛,所以當(dāng)我們接近局部最低時瞧捌,導(dǎo)數(shù)值會自動變得越來越小棵里,所以梯度下降將自動采取較小的幅度,這就是梯度下降的做法姐呐。所以實際上沒有必要再另外減小學(xué)習(xí)率殿怜。
這就是梯度下降算法,你可以用它來最小化任何代價函數(shù)曙砂,不只是現(xiàn)行回歸中的代價函數(shù)头谜。
我們剛剛使用的算法,有時也稱為批量梯度下降鸠澈。實際上柱告,在機(jī)器學(xué)習(xí)中,通常不太會給算法起名字笑陈,但這個名字”批量梯度下降”际度,指的是在梯度下降的每一步中,我們都用到了所有的訓(xùn)練樣本涵妥,在梯度下降中乖菱,在計算微分求導(dǎo)項時,我們需要進(jìn)行求和運(yùn)算,所以窒所,在每一個單獨(dú)的梯度下降中鹉勒,我們最終都要計算這樣一個東西,這個項需要對所有m個訓(xùn)練樣本求和吵取。因此禽额,批量梯度下降法這個名字說明了我們需要考慮所有這一"批"訓(xùn)練樣本,而事實上皮官,有時也有其他類型的梯度下降法绵疲,不是這種"批量"型的,不考慮整個的訓(xùn)練集臣疑,而是每次只關(guān)注訓(xùn)練集中的一些小的子集盔憨。