![]() 吳恩達(dá)的來信 親愛的朋友們, 幾年前,我們計(jì)劃在有限的計(jì)算量預(yù)算內(nèi)將該算法應(yīng)用于一個(gè)龐大的用戶群,所以有必要選擇一個(gè)高效的算法。 在神經(jīng)網(wǎng)絡(luò)和決策樹學(xué)習(xí)算法之間,我選擇了神經(jīng)網(wǎng)絡(luò)。 因?yàn)槲乙呀?jīng)有一段時(shí)間沒有使用提升決策樹了,我直覺上認(rèn)為它們需要的計(jì)算量比實(shí)際要多,但選擇神經(jīng)網(wǎng)絡(luò)是一個(gè)錯(cuò)誤的決定。 幸運(yùn)的是,我的團(tuán)隊(duì)很快就指出了錯(cuò)誤,并修正了我的決定,而這個(gè)項(xiàng)目最后也獲得了成功。 這次經(jīng)歷給我上了一課,告訴我學(xué)習(xí)和不斷刷新基礎(chǔ)知識(shí)的重要性。如果我重新熟悉了提升樹,我就會(huì)做出更好的決定。 ![]() 機(jī)器學(xué)習(xí)和其他技術(shù)領(lǐng)域一樣,隨著研究人員社區(qū)在彼此工作的基礎(chǔ)上不斷發(fā)展,一些貢獻(xiàn)經(jīng)過時(shí)間的考驗(yàn)后,長盛不衰,并成為進(jìn)一步發(fā)展的基礎(chǔ)。 從住房價(jià)格預(yù)測(cè)器到文本、圖像生成器,一切新算法都建立在基礎(chǔ)算法上(例如線性和邏輯回歸、決策樹等)和基礎(chǔ)概念(如正則化、優(yōu)化損失函數(shù)、偏差/方差等)的核心思想上。 堅(jiān)實(shí)的、時(shí)刻更新的基礎(chǔ)知識(shí)是成為一名高效的機(jī)器學(xué)習(xí)工程師的一個(gè)關(guān)鍵。許多團(tuán)隊(duì)在日常工作中都會(huì)用到這些想法,而博客文章和研究論文也常常假定你對(duì)這些思想很熟悉,這些常識(shí)基礎(chǔ)對(duì)于我們近年來看到的機(jī)器學(xué)習(xí)的快速進(jìn)步至關(guān)重要。 這也是為什么我把原來的機(jī)器學(xué)習(xí)課程進(jìn)行了更新。 ![]() 我的團(tuán)隊(duì)花了很多時(shí)間來討論最核心的教學(xué)概念,為各種主題制定了廣泛的教學(xué)大綱,并在其中設(shè)計(jì)了課程單元的原型。 這個(gè)過程幫助我們認(rèn)識(shí)到,主題的多樣性比細(xì)節(jié)的知識(shí)更重要,所以我們又重新制作了一份大綱。 我希望最后的結(jié)果是一套易于理解的課程,能夠幫助任何人掌握當(dāng)今機(jī)器學(xué)習(xí)中最重要的算法和概念,包括深度學(xué)習(xí),但也包括很多其他東西,并能夠建立有效的學(xué)習(xí)系統(tǒng)。 本著這種精神,我們決定探討一些領(lǐng)域內(nèi)最重要的算法,解釋了它們是如何工作的,并介紹它們不為人知的起源。 如果你是一個(gè)初學(xué)者,我希望它能幫助你揭開機(jī)器學(xué)習(xí)核心的一些方法的神秘面紗。 對(duì)于那些老手來說,你會(huì)在熟悉的領(lǐng)域中發(fā)現(xiàn)一些鮮為人知的觀點(diǎn)。 學(xué)無止境,保持學(xué)習(xí)! 吳恩達(dá) 線性回歸 線性回歸(Linear regression)可能是機(jī)器學(xué)習(xí)中的最重要的統(tǒng)計(jì)方法,至于誰發(fā)明了這個(gè)算法,一直爭(zhēng)論了200年,仍未解決。 1805年,法國數(shù)學(xué)家勒讓德(Adrien-Marie Legendre)在預(yù)測(cè)一顆彗星的位置時(shí),發(fā)表了將一條線擬合到一組點(diǎn)上的方法。天體導(dǎo)航是當(dāng)時(shí)全球商業(yè)中最有價(jià)值的科學(xué),就像今天的人工智能一樣。 四年后,24歲的德國天才數(shù)學(xué)家高斯(Carl Friedrich Gauss)堅(jiān)持認(rèn)為,他自1795年以來一直在使用這種方法,但他認(rèn)為這種方法太過瑣碎,無法寫出來。高斯的說法促使Legendre發(fā)表了一份匿名的附錄,指出「一位非常有名的幾何學(xué)家毫不猶豫地采用了這種方法」。 這類長期存在發(fā)明爭(zhēng)議的算法都有兩個(gè)特點(diǎn):好用,且簡單! 線性回歸的本質(zhì)上就是斜率(slopes)和截距(biases,也稱偏置)。 當(dāng)一個(gè)結(jié)果和一個(gè)影響它的變量之間的關(guān)系是一條直線時(shí),線性回歸就很有用。 例如,一輛汽車的油耗與它的重量呈線性關(guān)系。 ![]() 一輛汽車的油耗y和它的重量x之間的關(guān)系取決于直線的斜率w(油耗隨重量上升的陡峭程度)和偏置項(xiàng)b(零重量時(shí)的油耗):y=w*x+b。 在訓(xùn)練期間,給定汽車的重量,算法預(yù)測(cè)預(yù)期的燃料消耗。它比較了預(yù)期和實(shí)際的燃料消耗。然后通過最小二乘法,使平方差最小化,從而修正w和b的值。 考慮到汽車的阻力,有可能產(chǎn)生更精確的預(yù)測(cè)。額外的變量將直線延伸到一個(gè)平面。通過這種方式,線性回歸可以接收任何數(shù)量的變量/維度作為輸入。 線性回歸算法在當(dāng)年可以幫助航海家追蹤星星,后來幫助生物學(xué)家(特別是查爾斯-達(dá)爾文的表弟弗朗西斯-高爾頓)識(shí)別植物和動(dòng)物的遺傳性狀,進(jìn)一步的發(fā)展釋放了線性回歸的潛力。 1922年,英國統(tǒng)計(jì)學(xué)家羅納德-費(fèi)舍爾和卡爾-皮爾遜展示了線性回歸如何融入相關(guān)和分布的一般統(tǒng)計(jì)框架,再次擴(kuò)大了其適用范圍。 近一個(gè)世紀(jì)后,計(jì)算機(jī)的出現(xiàn)為其提供了數(shù)據(jù)和處理能力,使其得到更大的利用。 當(dāng)然,數(shù)據(jù)從來沒有被完美地測(cè)量過,而且多個(gè)變量之間也存在不同的重要程度,這些事實(shí)也刺激了線性回歸產(chǎn)生了更復(fù)雜的變體。 例如,帶正則化的線性回歸(也稱為嶺回歸)鼓勵(lì)線性回歸模型不要過多地依賴任何一個(gè)變量,或者說要均勻地依賴最重要的變量。如果你要追求簡化,使用L1的正則化就是lasso回歸,最終的系數(shù)更稀疏。換句話說,它學(xué)會(huì)了選擇具有高預(yù)測(cè)能力的變量,而忽略了其他的變量。 Elastic net結(jié)合了兩種類型的正則化,當(dāng)數(shù)據(jù)稀少或特征出現(xiàn)關(guān)聯(lián)時(shí),它很有用。 神經(jīng)網(wǎng)絡(luò)中最常見的一種神經(jīng)元就是線性回歸模型,往往后面再跟著一個(gè)非線性激活函數(shù),所以線性回歸是深度學(xué)習(xí)的基本構(gòu)件。 Logistic回歸 Logistic函數(shù)可以追溯到19世紀(jì)30年代,當(dāng)時(shí)比利時(shí)統(tǒng)計(jì)學(xué)家P.F. Verhulst發(fā)明了該函數(shù)來描述人口動(dòng)態(tài)。 隨著時(shí)間的推移,最初的爆炸性指數(shù)增長在消耗可用資源時(shí)趨于平緩,從而形成了Logistic曲線。 ![]() 一個(gè)多世紀(jì)后,美國統(tǒng)計(jì)學(xué)家威爾遜(E. B. Wilson)和他的學(xué)生簡-伍斯特(Jane Worcester)設(shè)計(jì)了邏輯回歸算法,以計(jì)算出多少給定的危險(xiǎn)物質(zhì)會(huì)致命。 Logistic回歸將logistic函數(shù)擬合到數(shù)據(jù)集上,以預(yù)測(cè)在某一事件(例如,攝入馬錢子)發(fā)生特定結(jié)果(例如,過早死亡)的概率。 ![]() 1、訓(xùn)練時(shí)水平地調(diào)整曲線的中心位置,垂直地調(diào)整其中間位置,以使函數(shù)的輸出和數(shù)據(jù)之間的誤差最小。 2、將中心向右或向左調(diào)整意味著需要更多或更少的毒藥來殺死普通人。陡峭的坡度意味著確定性:在中間點(diǎn)之前,大多數(shù)人都能活下來;超過中間點(diǎn),那就說得再見了。一個(gè)平緩的斜率更寬容:低于曲線的中間點(diǎn),超過一半的人可以存活;更遠(yuǎn)的地方,不到一半。 3、設(shè)置一個(gè)閾值,比如說0.5,曲線就成了一個(gè)分類器。只要把劑量輸入模型,你就會(huì)知道你應(yīng)該計(jì)劃一個(gè)聚會(huì)還是一個(gè)葬禮。 Verhulst的工作發(fā)現(xiàn)了二元結(jié)果的概率,后來英國統(tǒng)計(jì)學(xué)家David Cox和荷蘭統(tǒng)計(jì)學(xué)家Henri Theil在20世紀(jì)60年代末獨(dú)立工作,將邏輯回歸法用于有兩個(gè)以上類別的情況。 Logistic函數(shù)可以描述多種多樣的現(xiàn)象,并具有相當(dāng)?shù)臏?zhǔn)確性,因此Logistic回歸在許多情況下提供了可用的基線預(yù)測(cè)。 在醫(yī)學(xué)上,它可以估計(jì)死亡率和疾病的風(fēng)險(xiǎn);在政治中,它可以預(yù)測(cè)選舉的贏家和輸家;在經(jīng)濟(jì)學(xué)中,它可以預(yù)測(cè)商業(yè)前景。 在神經(jīng)網(wǎng)絡(luò)中,有一部分神經(jīng)元為Logistic回歸,其中非線性函數(shù)為sigmoid。 梯度下降 想象一下,在黃昏過后的山區(qū)徒步旅行,你會(huì)發(fā)現(xiàn)除了你的腳以外看不到什么。而你的手機(jī)沒電了,所以你無法使用GPS應(yīng)用程序來尋找回家的路。 你可能會(huì)發(fā)現(xiàn)梯度下降的方向是最快路徑,只是要小心不要走下懸崖。 1847年,法國數(shù)學(xué)家Augustin-Louis Cauchy發(fā)明了近似恒星軌道的算法。60年后,他的同胞雅克-哈達(dá)瑪?shù)拢↗acques Hadamard)獨(dú)立開發(fā)了這一算法,用來描述薄而靈活的物體的變形。 不過,在機(jī)器學(xué)習(xí)中,它最常見的用途是找到學(xué)習(xí)算法損失函數(shù)的最低點(diǎn)。 神經(jīng)網(wǎng)絡(luò)通常是一個(gè)函數(shù),給定一個(gè)輸入,計(jì)算出一個(gè)期望的輸出。 訓(xùn)練網(wǎng)絡(luò)的一種方法是,通過反復(fù)計(jì)算實(shí)際輸出和期望輸出之間的差異,然后改變網(wǎng)絡(luò)的參數(shù)值來縮小該差異,從而使損失最小化,或其輸出中的誤差最小。 梯度下降縮小了誤差,使計(jì)算損失的函數(shù)最小化。 網(wǎng)絡(luò)的參數(shù)值相當(dāng)于景觀上的一個(gè)位置,而損失是當(dāng)前的高度。隨著你的下降,你提高了網(wǎng)絡(luò)的能力,以計(jì)算出接近所需的輸出。 不過可見性是有限的,因?yàn)樵诒O(jiān)督學(xué)習(xí)下,算法完全依賴于網(wǎng)絡(luò)的參數(shù)值和梯度,也就是當(dāng)前損失函數(shù)的斜率。 ![]() 使用梯度下降,你也有可能被困在一個(gè)由多個(gè)山谷(局部最小值)、山峰(局部最大值)、馬鞍(馬鞍點(diǎn))和高原組成的非凸形景觀中。事實(shí)上,像圖像識(shí)別、文本生成和語音識(shí)別這樣的任務(wù)都是非凸的,而且已經(jīng)出現(xiàn)了許多梯度下降的變體來處理這種情況。 K-means聚類 如果你在派對(duì)上與其他人站得很近,那么你們之間很可能有一些共同點(diǎn)。 K-means的聚類就是基于這種先驗(yàn)想法,將數(shù)據(jù)點(diǎn)分為多個(gè)group,無論這些group是通過人類機(jī)構(gòu)還是其他力量形成的,這種算法都會(huì)找到它們之間的關(guān)聯(lián)。 ![]() 美國物理學(xué)家斯圖爾特-勞埃德(Stuart Lloyd)是貝爾實(shí)驗(yàn)室標(biāo)志性創(chuàng)新工廠和發(fā)明原子彈的曼哈頓項(xiàng)目的校友,他在1957年首次提出了k-means聚類,以分配數(shù)字信號(hào)中的信息,不過他直到1982年才發(fā)表。 與此同時(shí),美國統(tǒng)計(jì)學(xué)家愛德華-福吉(Edward Forgy)在1965年描述了一種類似的方法——?jiǎng)诎5?福吉算法。 K-means聚類首先會(huì)尋找group的中心,然后將數(shù)據(jù)點(diǎn)分配到志同道合的group內(nèi)。考慮到數(shù)據(jù)量在空間里的位置和要組成的小組數(shù)量,k-means聚類可以將與會(huì)者分成規(guī)模大致相同的小組,每個(gè)小組都聚集在一個(gè)中心點(diǎn)或中心點(diǎn)周圍。 在訓(xùn)練過程中,算法最初需要隨機(jī)選擇k個(gè)人來指定k個(gè)中心點(diǎn),其中k必須手動(dòng)選擇,而且找到一個(gè)最佳的k值并不容易。 然后通過將每個(gè)人與最接近的中心點(diǎn)聯(lián)系起來形成k個(gè)聚類簇。 對(duì)于每個(gè)聚類簇,它計(jì)算所有被分配到該組的人的平均位置,并將平均位置指定為新的中心點(diǎn)。每個(gè)新的中心點(diǎn)可能都不是由一個(gè)具體的人占據(jù)的。 在計(jì)算出新的中心點(diǎn)后,算法將所有人重新分配到離他們最近的中心點(diǎn)。然后計(jì)算新的中心點(diǎn),調(diào)整集群,以此類推,直到中心點(diǎn)(以及它們周圍的群體)不再移動(dòng)。 將新人分配到正確的群組很容易,讓他們?cè)诜块g里找到自己的位置,然后尋找最近的中心點(diǎn)。 K-means算法的原始形式仍然在多個(gè)領(lǐng)域很有用,特別是因?yàn)樽鳛橐环N無監(jiān)督的算法,它不需要收集潛在的昂貴的標(biāo)記數(shù)據(jù),它的運(yùn)行速度也越來越快。 例如,包括scikit-learn在內(nèi)的機(jī)器學(xué)習(xí)庫都得益于2002年增加的kd-trees,它能極快地分割高維數(shù)據(jù)。 參考資料: https://read.deeplearning.ai/the-batch/issue-146/ |