在寫線性回歸的筆記前,我覺得有必要介紹一下機(jī)器學(xué)習(xí)的概念和現(xiàn)在機(jī)器學(xué)習(xí)的大體的一些架構(gòu)和概念。
機(jī)器學(xué)習(xí)的定義
套用coursera上的說法。對于機(jī)器學(xué)習(xí),并沒有一個一致認(rèn)同的定義,一個比較古老的定義是由Arthur Samuel在1959
年給出的:
“機(jī)器學(xué)習(xí)研究的是如何賦予計算機(jī)在沒有被明確編程的情況下仍能夠?qū)W習(xí)的能力。
(Field of study that fives computers the ability to learn without being explicitly
programmed.)”
Samuel 編寫了一個跳棋游戲的程序,并且讓這個程序和程序自身玩了幾萬局跳棋游戲,并且
記錄下來棋盤上的什么位置可能會導(dǎo)致怎樣的結(jié)果,隨著時間的推移,計算機(jī)學(xué)會了棋盤上的
哪些位置可能會導(dǎo)致勝利,并且最終戰(zhàn)勝了設(shè)計程序的 Samuel.
另一個比較現(xiàn)代且形式化的定義是由 Tom Mitchell 在 1998 年給出的:
“對于某個任務(wù) T 和表現(xiàn)的衡量 P,當(dāng)計算機(jī)程序在該任務(wù) T 的表現(xiàn)上,經(jīng)過 P 的衡量,
隨著經(jīng)驗(yàn) E 而增長,我們便稱計算機(jī)程序能夠通過經(jīng)驗(yàn) E 來學(xué)習(xí)該任務(wù)。( computer program
is said to learn from experience E with respect to some task T and some performance
measure P, if its performance on T, as measured by P, improves with experience E.)”
在跳棋游戲的例子中,任務(wù) T 是玩跳棋游戲,P 是游戲的輸贏,E 則是一局又一局的游戲。
一些機(jī)器學(xué)習(xí)的應(yīng)用舉例:
- 數(shù)據(jù)庫挖掘
- 一些無法通過手動編程來編寫的應(yīng)用:如自然語言處理,計算機(jī)視覺
- 一些自助式的程序:如推薦系統(tǒng)
- 理解人類是如何學(xué)習(xí)的
機(jī)器學(xué)習(xí)的架構(gòu)
我覺得關(guān)于這方面李弘毅教授的機(jī)器學(xué)習(xí)的課中講的非常的好,這是課程的主頁感興趣的可以去看一下http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML16.html。我們時常聽到Supervise Learning,Unsupervised Learning.....等等之類的名詞,并且也理解其中的意思。但是在沒看到這張圖之前我對于這些概念其實(shí)還是不是特別的清楚。
1. 在這個圖中藍(lán)色的部分和其中的名詞代表的是我們已知的數(shù)據(jù)。舉個例子說,Supervised Learning代表我們擁有數(shù)據(jù)以及以及這些數(shù)據(jù)的標(biāo)簽,而Reinforcenment Learning是有部分有限的帶有標(biāo)簽的數(shù)據(jù),和一個判別模型,Reinforcement Learning一個出門的例子是alpha Go。工程師們先用人類以前下過的棋譜來訓(xùn)練它,這個寫棋譜就是帶標(biāo)簽的數(shù)據(jù),但是棋譜的數(shù)量是有限的所以為了更一步提高,就讓不同的alpha Go的副本自我博弈,然后根據(jù)勝負(fù)這個結(jié)果來判別,讓機(jī)器內(nèi)部自我調(diào)整。在這里難道工程師不想用Supervised Learning嗎?但是由于棋譜的數(shù)量限制所以根據(jù)實(shí)際的情況選擇了Reinforcement Learning。
2. 在這個圖中紅色的部分代表我們想要得到的輸出,Regression表示我們希望得到是一些數(shù)值,比如說是對于房產(chǎn)價格的預(yù)測,或者是找出RTT,初始緩沖峰值速率和初始緩沖時延之間的關(guān)系.... Classification表示我們想要對已知的信息進(jìn)行分類,例如我們想要區(qū)分一個郵件是不是一個垃圾郵件,或者是給海量的新聞打上類別的標(biāo)簽。而Structured Learning希望得到的則是更加復(fù)雜的輸出,比如說人臉識別中人臉的位置,這里希望得到的輸出顯然不是一個數(shù)字,也不是一個離散的類別。(對于Structured Learning我的理解還不是很清楚,就不多寫了。等到學(xué)習(xí)了實(shí)際的例子有了更加深入的了解之后再來更新)。
3.圖中綠色的部分是我們解決問題使用的方法,有線性模型,深度學(xué)習(xí).....之類的方法。我們根據(jù)需要去選擇不同的方法也就是模型來解決我們的問題。
特征縮放
在對較多的參數(shù)進(jìn)行梯度下降求最優(yōu)參數(shù)的時候,我們一般會對數(shù)據(jù)進(jìn)行特征縮放,將所有數(shù)據(jù)的范圍映射到一個相同的范圍內(nèi)。視頻和書告訴我們這樣做有利與梯度下降時尋找最有的參數(shù),但是這是為什么呢?假設(shè)我們現(xiàn)在有兩個參數(shù)x1,x2,他們可能的假設(shè)函數(shù)是這樣的$$y=b+w_1x_1+w_2x_2$$如果$x_1$和$x_2$的大小差距很大,$x_2$的取值遠(yuǎn)大于$x_1$,如圖所示因?yàn)?x_2$的取值特別大所以只需要$w_2$有很小的變化就會引起$y$有很大的變化,$w_1$正好相反。同理根據(jù)loss function的公式可以知道$w_2$很小的變化會引起loss function較大的變化。所以畫出來$w_1,w_2$和loss function的等高圖就如下圖所示,$w_2$這條軸上的變化比$w_1$這條軸上的變化劇烈的多,整個圖形呈現(xiàn)出橢圓形。而經(jīng)過特征縮放后的等高圖則更像一個個同心圓。那么為什么同心圓比橢圓要好一些呢?其實(shí)從梯度下降的路徑我們就可以看出一些東西。上面這個圖的路徑是彎曲的走向最優(yōu)解,而下面這個是直接走向最優(yōu)解。這是因?yàn)樘荻认陆档拿恳徊蕉际窍虍?dāng)前位置下降最快的地方進(jìn)行的,也就是沿著等高線的法線方向進(jìn)行。
誤差的來源
在我們進(jìn)行使用模型進(jìn)行預(yù)測的時候會有誤差的存在,那么誤差的來源是什么呢?誤差主要由兩個部分組成:bias+variance。關(guān)于bais和variance的解釋,感覺知乎上的一位答主寫的比較好。大家可以去看一下這里是原文的鏈接:https://www.zhihu.com/question/27068705。下面是原文中的一張圖,感覺比較形象的描述了這個問題。
總的來說感覺是這樣的:
- bias反映的是模型和樣本數(shù)據(jù)的擬合程度。bais越小說明模型和樣本數(shù)據(jù)的擬合程度越高。
- variance反映就是用樣本數(shù)據(jù)訓(xùn)練好的模型在測試數(shù)據(jù)中的表現(xiàn)。而variance越小說明模型的泛化能力越強(qiáng)更具有通用性,測試數(shù)據(jù)會和樣本數(shù)據(jù)得到類似的結(jié)果偏差不會太大。
這個理解的方式和李宏毅的視頻中的解釋有點(diǎn)點(diǎn)不一樣,在李宏毅的視頻中。
-
bias指的是訓(xùn)練得到的模型的期望值和理想的模型之間的差距。也就是圖中藍(lán)色的線條和黑色的線條之間的差距。一般而言復(fù)雜的模型bias易班比較小,如圖5次的黑線明顯和理想的藍(lán)線比較貼近。
圖片 -
variance是模型對數(shù)據(jù)的敏感程度,variance越低的模型對模型的敏感程度就越低。這樣模型的通用性就好一些。一般而言簡單的模型的variance要小一些,復(fù)雜的要大一些。如下圖所示5次的模型的variance明顯比1次的要大。
這里寫圖片描述
那么為什么復(fù)雜模型的bias要小一些而簡單模型的要大一些呢?因?yàn)槟P驮綇?fù)雜那么它所能夠表現(xiàn)的形式就越多就可以更貼近那個理想的模型,顯然5次的多項(xiàng)式是可以表示一條直線的。
為什么簡單模型的variance要小一些而復(fù)雜模型的要大一些呢?因?yàn)楹唵文P蛯?shù)據(jù)沒有復(fù)雜模型那么敏感,可以看到在上圖中的很多次實(shí)驗(yàn)中,1次的直線長的都差不多都是那個樣子,而5次的就各種各樣了。視頻中舉了一個極端的例子,就是常函數(shù),如果是一個常函數(shù)的話。那么模型就對數(shù)據(jù)完全不敏感,variance就是0了。
那么如何判斷自己模型出錯是受那種誤差的影響呢?其實(shí)這個應(yīng)該是比較簡單的,如果出現(xiàn)了unfitting那么就是bias太大了,也就是模型連訓(xùn)練數(shù)據(jù)都擬合不好。如果出現(xiàn)了overfitting那么就是variance太大了,也就是在訓(xùn)練數(shù)據(jù)中擬合的特別好,在測試數(shù)據(jù)中結(jié)果比較差。
那么如何降低bias呢?
- 正如上面提到的可以通過提高模型的復(fù)雜度可以有效的增加bias。比如在多項(xiàng)式擬合中選用更高的次數(shù)。
- 在視頻中還提到一個方法就是 Add more features as input,增加特征輸入的種類。因?yàn)檫@個結(jié)果可能不止和你選擇的特征有關(guān),增加輸入的特征的種類當(dāng)然可以減小bias。
那么如何如何降低variance呢? - 最好的方法應(yīng)該就是增加數(shù)據(jù)的輸入量了(這應(yīng)該也就是大數(shù)據(jù)的魅力所在吧)。通過增加數(shù)據(jù)量,那些大量的正確的數(shù)據(jù)就會降低錯誤的數(shù)據(jù)對復(fù)雜模型的影響,模型也就越接近理想的模型了。
- 但是現(xiàn)實(shí)生活中我們往往找不到那么多數(shù)據(jù),這個時候就需要正則化的幫助了。(這里我理解的還不是很好,以后再來補(bǔ)充吧)。