吳恩達:機器學習的六個核心演算法

語言: CN / TW / HK

編譯 | 黃楠

編輯 | 陳彩嫻

最近,吳恩達在其創辦的人工智慧周訊《The Batch》上更新了一篇博文,總結了機器學習領域多個基礎演算法的歷史溯源。

文章開頭,吳恩達回憶他的研究歷程中曾有一次抉擇:

多年前,在一次專案中,選擇演算法時,他不得不在神經網路與決策樹學習演算法之間做選擇。考慮到計算預算,他最終選擇了神經網路,在很長的一段時間內棄用增強決策樹。

這是一個錯誤的決定,「幸好我的團隊很快修改了我的選擇,專案才成功。」吳恩達談道。

他由此感嘆,不斷學習與更新基礎知識是十分重要的。與其他技術領域一樣,隨著研究人員的增加、研究成果數量的增長,機器學習領域也在不斷髮展。但有些基礎演算法與核心思想的貢獻是經得起時間考驗的:

  • 演算法:線性和邏輯迴歸、決策樹等

  • 概念:正則化、優化損失函式、偏差/方差等

在吳恩達看來,這些演算法與概念是許多機器學習模型的核心思想,包括房價預測器、文字-影象生成器(如DALL·E)等。

在最新的這篇文章中,吳恩達與團隊調研了六種基礎演算法的來源、用途、演變等,並提供了較為詳細的講解。

這六種演算法分別是:線性迴歸、邏輯迴歸、梯度下降、神經網路、決策樹與k均值聚類演算法。

1

線性迴歸:直的&窄的

線性迴歸是機器學習中的一個關鍵的統計方法,但它並非不戰而勝。它由兩位傑出的數學家提出,但200 年過去了,這個問題仍未解決。長期存在的爭議不僅證明了該演算法具有出色的實用性,還證明了它的本質十分簡單。

那麼線性迴歸到底是誰的演算法呢?

1805 年,法國數學家 Adrien-Marie Legendre 發表了將一條線擬合到一組點的方法,同時試圖預測彗星的位置(天體導航是當時全球商業中最有價值的科學方向,就像今天的人工智慧一樣)。

圖注:Adrien-Marie Legendre 的素描畫像

四年後,24 歲的德國神童 Carl Friedrich Gauss (高斯)堅稱他自 1795 年以來一直在使用它,但認為它太瑣碎了,無法寫。高斯的主張促使Legendre匿名發表了一份文章,稱“一位非常著名的幾何學家毫不猶豫地採用了這種方法。”

圖注:Carl Friedrich Gauss

斜率和偏差 :當結果與影響它的變數之間的關係遵循直線時,線性迴歸很有用。例如,汽車的油耗與其重量成線性關係。

  • 汽車的油耗 y 與其重量 x 之間的關係取決於直線的斜率 w(油耗隨重量上升的幅度)和偏置項 b(零重量時的油耗):y=w*x+b。

  • 在訓練期間,給定汽車的重量,演算法會預測預期的油耗。它比較了預期和實際的油耗。然後,它將平方差最小化,通常通過普通最小二乘技術,磨練 w 和 b 的值。

  • 考慮汽車的阻力可以生成更精確的預測。附加變數將線延伸到平面。通過這種方式,線性迴歸可以容納任意數量的變數/維度。

普及的兩個步驟 :該演算法立即幫助航海者追蹤星星,以及幫助後來的生物學家(尤其是查爾斯·達爾文的堂兄Francis Galton)識別植物和動物的可遺傳特徵。這兩項深入發展釋放了線性迴歸的廣泛潛力。1922 年,英國統計學家 Ronald Fisher 和 Karl Pearson 展示了線性迴歸如何適應相關性和分佈的一般統計框架,使其在所有科學中都有用。而且,近一個世紀後,計算機的出現提供了資料和處理能力,可以更大程度地利用它。

應對歧義 :當然,資料永遠不會被完美地衡量,有些變數比其他變數更重要。這些生活事實激發了更復雜的變體。例如,帶有正則化的線性迴歸(也稱為「嶺迴歸」,ridge regression)鼓勵線性迴歸模型不要過多地依賴於任何一個變數,或者更確切地說,均勻地依賴於最重要的變數。如果為了簡單起見,另一種形式的正則化(L1 而不是 L2)會產生 lasso(壓縮估計),鼓勵儘可能多的係數為零。換句話說,它學會選擇具有高預測能力的變數並忽略其餘的。彈性網路結合了這兩種型別的正則化。當資料稀疏或特徵看起來相關時,它很有用。

在每個神經元中 :現在,簡單的版本仍然非常有用。神經網路中最常見的神經元型別是線性迴歸模型,隨後是非線性啟用函式,使線性迴歸成為深度學習的基本組成部分。

2

邏輯迴歸:跟隨曲線

曾經有一段時間,邏輯迴歸只用於對一件事進行分類:如果你喝了一瓶毒藥,你可能會被貼上的標籤是“活著”還是“死去”呢?時代變了,今天,不僅呼叫緊急服務為這個問題提供了更好的答案,而且邏輯迴歸也成為了深度學習的核心。

毒物控制

邏輯函式可以追溯到 1830 年代,當時比利時統計學家 P.F. Verhulst 發明它來描述人口動態:隨著時間的推移,指數增長的初始爆炸隨著它消耗可用資源而趨於平緩,從而產生特徵邏輯曲線。一個多世紀過去後,美國統計學家 E. B. Wilson 和他的學生 Jane Worcester 又設計了邏輯迴歸來計算給定有害物質有多少是致命的。

圖注:P.F. Verhulst

擬合函式 :邏輯迴歸將邏輯函式擬合到資料集,以便預測給定事件(例如,攝入士的寧)發生特定結果(例如,過早死亡)的概率。

  • 訓練水平調整曲線的中心位置,垂直調整曲線的中間位置,以最大限度地減少函式輸出與資料之間的誤差。

  • 將中心調整到右側或左側意味著殺死普通人需要或多或少的毒藥。陡峭的坡度意味著確定性:在中途點之前,大多數人倖存下來;超過一半,「就只能說再見了」(死亡的意思)。緩坡更寬容:低於曲線中部,一半以上倖存;再往上,只有不到一半的人會倖存。

  • 在一個結果和另一個結果之間設定一個閾值,比如 0.5,曲線就變成了一個分類器。只需在模型中輸入劑量,您就會知道您應該計劃聚會還是葬禮。

更多結果 :Verhulst 的工作發現了二元結果的概率,忽略了進一步的可能性,例如中毒受害者可能會進入來世的哪一邊。他的繼任者擴充套件了演算法:

  • 在 1960 年代後期,英國統計學家 David Cox 和荷蘭統計學家 Henri Theil 獨立工作,對具有兩種以上可能結果的情況進行了邏輯迴歸。

  • 進一步的工作產生了有序邏輯迴歸,其中結果是有序值。

  • 為了處理稀疏或高維資料,邏輯迴歸可以利用與線性迴歸相同的正則化技術。

圖注:David Cox

多功能曲線 :邏輯函式以相當準確的方式描述了廣泛的現象,因此邏輯迴歸在許多情況下提供了有用的基線預測。在醫學上,它可以估計死亡率和疾病風險。在政治學中,它預測選舉的贏家和輸家。在經濟學中,它預測商業前景。更重要的是,它在各種各樣的神經網路中驅動一部分神經元(其中非線性是 Sigmoid 函式)。

3

梯度下降:一切都在下坡

想象一下黃昏後在山上徒步旅行,發現腳下什麼都看不到。而且您的手機電池沒電了,因此您無法使用 GPS 應用程式找到回家的路。您可能會通過梯度下降找到最快的路徑。小心不要從懸崖上走。

太陽和地毯: 梯度下降比通過陡峭的地形下降更有利。1847年,法國數學家Augustin-Louis Cauchy發明了近似恆星軌道的演算法。60 年後,他的同胞 Jacques Hadamard 獨立開發了它來描述薄而靈活的物體(如地毯)的變形,這可能會使膝蓋向下徒步更容易。然而,在機器學習中,它最常見的用途是找到學習演算法損失函式的最低點。

圖注:Augustin-Louis Cauchy

向下爬 :經過訓練的神經網路提供了一個函式,該函式在給定輸入的情況下計算所需的輸出。訓練網路的一種方法是通過迭代計算實際輸出與期望輸出之間的差異,然後更改網路的引數值以縮小差異,從而將輸出中的損失或誤差最小化。梯度下降縮小了差異,將計算損失的函式最小化。網路的引數值相當於地形上的一個位置,損失的是當前高度。隨著你的下降,你可以提高網路計算接近所需輸出的能力。可見性是有限的,因為在典型的監督學習情況下,該演算法僅依賴於網路的引數值和損失函式的梯度或斜率——即你在山上的位置和你腳下的斜率。

  • 基本方法是向地形下降最陡的方向移動。訣竅是校準你的步幅。步幅太小,就需要很長時間才能取得進展;步幅太大,你就會跳入未知的領域,可能是上坡而不是下坡。

  • 給定當前位置,演算法通過計算損失函式的梯度來估計最快下降的方向。梯度指向上坡,那麼該演算法就是通過減去梯度的一小部分來以相反的方向前進。稱為學習率的分數 α 決定了再次測量梯度之前的步長。

  • 反覆做這幾個步驟,希望你能到達一個山谷。恭喜!

卡在山谷裡 :太糟糕了,你的手機沒電了,因為演算法可能沒有把你推到凸山的底部。你可能會陷入由多個山谷(區域性最小值)、山峰(區域性最大值)、鞍點(鞍點)和高原組成的非凸面景觀中。事實上,影象識別、文字生成和語音識別等任務都是非凸的,並且已經出現了梯度下降的許多變體來處理這種情況。例如,該演算法可能具有幫助它放大小幅上漲和下跌的動量,從而使其更有可能到達底部。研究人員設計瞭如此多的變體,以至於看起來優化器的數量與區域性最小值一樣多。幸運的是,區域性最小值和全域性最小值往往大致相等。

最優優化器 :梯度下降是尋找任一函式的最小值的明確選擇。在可以直接計算精確解的情況下——例如,具有大量變數的線性迴歸任務中——它可以逼近一個值,而且通常速度更快、成本更低。但它確實在複雜的非線性任務中發揮了作用。憑藉梯度下降和冒險精神,你可能可以及時趕出山區吃晚飯。

4

神經網路:尋找函式

讓我們先把這個問題弄清楚: 大腦不是一個圖形處理單元集, 如果它是的話,那它執行的軟體要比典型的人工神經網路複雜得多。而神經網路的靈感來自大腦的結構:一層層相互連線的神經元,每個神經元根據其相鄰狀態來計算自己的輸出,由此產生的一連串活動形成了一個想法——或識別出一張貓的照片。

從生物到人工 :大腦通過神經元之間相互作用來學習的想法可以追溯到 1873 年,但直到 1943 年,美國神經科學家 Warren McCulloch 和 Walter Pitts 才利用簡單的數學規則建立了生物神經網路模型。1958 年,美國心理學家Frank Rosenblatt開發出感測器——這是一種在打卡機上實現的單層視覺網路,旨在為美國海軍建立一個硬體版本。

圖注:Frank Rosenblatt

越大越好 :Rosenblatt 的發明只能識別單線分類。之後,烏克蘭數學家 Alexey Ivakhnenko 和 Valentin Lapa 通過在任意層數中堆疊神經元網路,克服了這一限制。1985 年,獨立工作的法國電腦科學家 Yann LeCun、David Parker 和美國心理學家 David Rumelhart 及其同事,描述了使用反向傳播來有效訓練此類網路。在新千年的第一個十年中,包括 Kumar Chellapilla、Dave Steinkraus 和 Rajat Raina(與吳恩達合作)在內的研究人員通過使用圖形處理單元進一步推動了神經網路的發展,這使得越來越大的神經網路能從網際網路生成的海量資料中得到學習。

適合每項任務 :神經網路背後的原理很簡單:對於任何任務,都有一個可執行它的函式。一個神經網路通過組合多個簡單函式構成可訓練函式,每個函式由單個神經元執行。一個神經元的功能由稱為「權重」的可調引數決定。給定這些權重和輸入示例及其所需輸出的隨機值,就可以反覆更改權重,直到可訓練的函式能完成手頭的任務。

  • 一個神經元可接受各種輸入(例如,代表畫素或單詞的數字,或前一層的輸出),將它們與權重相乘,乘積相加,並得出由開發人員選擇的非線性函式或啟用函式的總和。期間要考慮到它是線性迴歸、加上一個啟用函式。

  • 訓練修改權重。對於每個示例輸入,網路會計算一個輸出並將其與預期輸出進行比較。反向傳播可通過梯度下降來改變權重,以減少實際輸出和預期輸出間的差異。當有足夠多(好的)例子重複這個過程足夠多次,網路就能學會執行這個任務。

黑匣子 :雖然運氣好的話,一個訓練有素的網路可以完成它的任務,但最終你要閱讀一個函式,往往會非常複雜——包含數千個變數和巢狀的啟用函式——以至於解釋網路是如何成功完成其任務也是非常困難的。此外, 一個訓練有素的網路只和它所學的資料一樣好。例如,如果資料集有偏差,那麼網路的輸出也會出現偏差。如果它只包含貓的高解析度圖片,那它對低解析度圖片的反應就不得而知了。

一個常識:在報道 Rosenblatt 於1958年發明的感測器時,《紐約時報》開闢了人工智慧炒作的道路,報道中提到“美國海軍期望擁有一臺會走路、說話、看、寫、自我複製和意識到自己存在的電子計算機雛形。” 雖然當時的感測器沒有達到這個要求,但它產生了許多令人印象深刻的模型:用於影象的卷積神經網路;文字的迴圈神經網路;以及用於影象、文字、語音、影片、蛋白質結構等的transformers。它們已經做出了令人驚歎的事情,像下圍棋時的表現超過了人類水平,在診斷X射線影象等實際任務中也接近人類水平。然而,它們在常識和邏輯推理方面的問題仍然較難應對。

5

決策樹:從根到葉

亞里士多德是一個什麼樣的「野獸」?這位哲學家的追隨者、第三世紀期間生活在敘利亞的 Porphyry 想出了一個合乎邏輯的方法來回答這個問題。他將亞里士多德提出的“存在類別”從一般到具體組合起來,將亞里士多德依次歸入到每個分類中:亞里士多德的存在是物質的而不是概念或精神;他的身體是有生命的而不是無生命的;他的思想是理性的而不是非理性的。因此,他的分類是人類。中世紀的邏輯教師將這個序列繪製為垂直流程圖:一個早期的決策樹。

數字差異 :快進到 1963 年,密歇根大學社會學家John Sonquist和經濟學家James Morgan在將調查的受訪者分組時,首次在計算機中實行了決策樹。隨著自動訓練演算法軟體的出現,這種工作變得很普遍,如今包括 scikit-learn 等在內的各種機器學習庫也已經使用決策樹。這套程式碼是由斯坦福大學和加州大學伯克利分校的四位統計學家花費了10 年時間開發的。到今天,從頭開始編寫決策樹已經成為了《機器學習 101》中的一項家庭作業。

空中的根 :決策樹可以執行分類或迴歸。它向下生長,從根部到樹冠,將一個決策層次結構的輸入示例分類為兩個(或更多)。想到德國醫學家和人類學家Johann Blumenbach的課題:大約在 1776 年,他首先將猴子與猿(撇開人類除外)區分開來,在此之前,猴子和猿是被歸為一類的。這種分類取決於各種標準,例如是否有尾巴、胸部狹窄或寬闊、是直立還是蹲伏、還有智力的高低。使用經訓練的決策樹來為這類動物貼上標籤,逐一考慮每個標準,最終將這兩組動物分開。

  • 這棵樹從一個可視為包含了所有案例的生物資料庫的根節點出發——黑猩猩、大猩猩和紅毛猩猩,以及捲尾猴、狒狒和狨猴。根會在兩個子節點間提供選擇,是否表現出某種特定特徵,導致兩個子節點包含具有和不具有該特徵的示例。以此類推,這個過程中以任意數量的葉節點結束,每個葉節點都包含大部分或全部屬於一個類別。

  • 為了成長,樹必須找到根決策。要做選擇,則得考慮所有的特徵及其價值——後附肢、桶狀胸等——並選擇能夠最大限度提高分割純度的那個特徵。「最佳純度」被定義為一個類別示例會 100% 進入一個特定的子節點、而不進入另一個節點。分叉很少在只做了一個決定之後就百分之百純粹、且很可能永遠也達不到。隨著這個過程繼續進行,產生一個又一個層次的子節點,直至純度不會因為考慮更多的特徵而增加多少。此時,這棵樹樹已經完全訓練好了。

  • 在推理時,一個新的示例從上到下經歷過決策樹,完成每個級別不同決策的評估。它會得到它所在葉節點所包含的資料標籤。

進入前 10 名:鑑於 Blumenbach 的結論(後來被Charles Darwin推翻),即人類與猿的區別在於寬闊的骨盆、手和緊牙的牙齒,如果我們想擴充套件決策樹以不僅分類猿和猴子,而是對人類進行分類,那會怎麼樣呢?澳大利亞電腦科學家 John Ross Quinlan 在 1986 年通過 ID3 實現了這一可能,它擴充套件了決策樹,以支援非二元結果。2008 年, 在IEEE國際資料探勘會議策劃的資料探勘十大演算法名單中,一項命名為 C4.5 的擴充套件細化演算法名列前茅。在一個創新猖獗的世界裡,這就是持久力。

扒開樹葉:決策樹確實有一些缺點。 它們很容易通過增加多級別層次來過度擬合數據,以至於葉節點只包括一個例子。 更糟糕的是,它們很容易出現蝴蝶效應:更換一個例子,長出來的樹就大不相同。

走進森林:美國統計學家 Leo Breiman 和紐西蘭統計學家 Adele Cutler 將這一特徵轉化為優勢,於 2001 年開發了隨機森林(random forest)——這是一個決策樹的集合,每個決策樹會處理不同的、重疊的示例選擇,並對最終結果進行投票。隨機森林和它的表親XGBoost不太容易過度擬合,這有助於使它們成為最受歡迎的機器學習演算法之一。這就像讓亞里士多德、Porphyry、Blumenbach、Darwin、 Jane Goodall、Dian Fossey和其他 1000 位動物學家一起在房間裡,確保你的分類是最好的。

6

K均值聚類:群體思維

如果你在聚會上與其他人站得很近,那麼你們很可能有一些共同點。這就是使用 k 均值聚類將資料點分組的想法。無論是通過人類機構還是其他力量形成的群體,這個演算法都會找到它們。

從爆炸到撥號音 :美國物理學家 Stuart Lloyd 是貝爾實驗室標誌性創新工廠和發明原子彈的曼哈頓計劃的校友,他於 1957 年首次提出 k-means 聚類,以在數字訊號中分配資訊,但直到 1982 年才發表這個工作:

論文地址:http://cs.nyu.edu/~roweis/csc2515-2006/readings/lloyd57.pdf

與此同時,美國統計學家 Edward Forgy 在 1965 年描述了一種類似的方法,導致了它的替代名稱為「Lloyd-Forgy 演算法」。

尋找中心 :考慮將聚類分成志同道合的工作組。給定房間中參與者的位置和要形成的組數,k-means 聚類可以將參與者分成大小大致相等的組,每個組都聚集在一箇中心點或質心周圍。

  • 在訓練期間,演算法最初通過隨機選擇 k 人來指定 k 個質心。(K 必須手動選擇,找到一個最優值有時非常重要。)然後它通過將每個人與最近的質心相關聯來增長 k 個叢集。

  • 對於每個叢集,它計算分配到該組的所有人的平均位置,並將該平均位置指定為新的質心。每個新的質心可能都沒有被一個人佔據,但那又如何呢?人們傾向於聚集在巧克力和火鍋周圍。

  • 計算出新的質心後,演算法將個體重新分配到離他們最近的質心。然後它計算新的質心,調整叢集,等等,直到質心(以及它們周圍的組)不再移動。之後,將新成員分配到正確的叢集就很容易。讓他們在房間裡就位並尋找最近的質心。

  • 預先警告:鑑於最初的隨機質心分配,你可能最終不會與你希望與之相處的以資料為中心的可愛 AI 專家在同一組中。該演算法做得很好,但不能保證找到最佳解決方案。

不同的距離 :當然,聚類物件之間的距離不需要很大。兩個向量之間的任何度量都可以。例如,k-means 聚類可以根據他們的服裝、職業或其他屬性來劃分他們,而不是根據物理距離對參加派對的人進行分組。線上商店使用它根據客戶的喜好或行為來劃分客戶,天文學家也可以將相同型別的星星分在一組。

資料點的力量 :這個想法產生了一些顯著的變化:

  • K-medoids 使用實際資料點作為質心,而不是給定叢集中的平均位置。中心點是可以將到叢集中所有點的距離最小化的點。這種變化更容易解釋,因為質心始終是資料點。

  • Fuzzy C-Means Clustering 使資料點能夠不同程度地參與多個叢集。它根據與質心的距離,用叢集的度來代替硬簇分配。

n 維狂歡 :儘管如此,原始形式的演算法仍然廣泛有用——特別是因為作為一種無監督演算法,它不需要收集昂貴的標記資料。它的使用速度也越來越快。例如,包括 scikit-learn 在內的機器學習庫受益於 2002 年新增的 kd-trees,這些 kd-trees 可以非常快速地劃分高維資料。

原文連結:

http://read.deeplearning.ai/the-batch/issue-146/

雷峰網 (公眾號:雷峰網)

雷峰網版權文章,未經授權禁止轉載。詳情見 轉載須知

「其他文章」