
使用這些基本 REST API 最佳實踐構建出色的 API
四年后,24 歲的德國神童 Carl Friedrich Gauss (高斯)堅稱他自 1795 年以來一直在使用它,但認為它太瑣碎了,無法寫。高斯的主張促使Legendre匿名發表了一份文章,稱“一位非常著名的幾何學家毫不猶豫地采用了這種方法。”
斜率和偏差:當結果與影響它的變量之間的關系遵循直線時,線性回歸很有用。例如,汽車的油耗與其重量成線性關系。
普及的兩個步驟:該算法立即幫助航海者追蹤星星,以及幫助后來的生物學家(尤其是查爾斯·達爾文的堂兄Francis Galton)識別植物和動物的可遺傳特征。這兩項深入發展釋放了線性回歸的廣泛潛力。1922 年,英國統計學家 Ronald Fisher 和 Karl Pearson 展示了線性回歸如何適應相關性和分布的一般統計框架,使其在所有科學中都有用。而且,近一個世紀后,計算機的出現提供了數據和處理能力,可以更大程度地利用它。應對歧義:當然,數據永遠不會被完美地衡量,有些變量比其他變量更重要。這些生活事實激發了更復雜的變體。例如,帶有正則化的線性回歸(也稱為「嶺回歸」,ridge regression)鼓勵線性回歸模型不要過多地依賴于任何一個變量,或者更確切地說,均勻地依賴于最重要的變量。如果為了簡單起見,另一種形式的正則化(L1 而不是 L2)會產生 lasso(壓縮估計),鼓勵盡可能多的系數為零。換句話說,它學會選擇具有高預測能力的變量并忽略其余的。彈性網絡結合了這兩種類型的正則化。當數據稀疏或特征看起來相關時,它很有用。在每個神經元中:現在,簡單的版本仍然非常有用。神經網絡中最常見的神經元類型是線性回歸模型,隨后是非線性激活函數,使線性回歸成為深度學習的基本組成部分。
曾經有一段時間,邏輯回歸只用于對一件事進行分類:如果你喝了一瓶毒藥,你可能會被貼上的標簽是“活著”還是“死去”呢?時代變了,今天,不僅呼叫緊急服務為這個問題提供了更好的答案,而且邏輯回歸也成為了深度學習的核心。毒物控制:邏輯函數可以追溯到 1830 年代,當時比利時統計學家 P.F. Verhulst 發明它來描述人口動態:隨著時間的推移,指數增長的初始爆炸隨著它消耗可用資源而趨于平緩,從而產生特征邏輯曲線。一個多世紀過去后,美國統計學家 E. B. Wilson 和他的學生 Jane Worcester 又設計了邏輯回歸來計算給定有害物質有多少是致命的。
擬合函數:邏輯回歸將邏輯函數擬合到數據集,以便預測給定事件(例如,攝入士的寧)發生特定結果(例如,過早死亡)的概率。
更多結果:Verhulst 的工作發現了二元結果的概率,忽略了進一步的可能性,例如中毒受害者可能會進入來世的哪一邊。他的繼任者擴展了算法:
多功能曲線:邏輯函數以相當準確的方式描述了廣泛的現象,因此邏輯回歸在許多情況下提供了有用的基線預測。在醫學上,它可以估計死亡率和疾病風險。在政治學中,它預測選舉的贏家和輸家。在經濟學中,它預測商業前景。更重要的是,它在各種各樣的神經網絡中驅動一部分神經元(其中非線性是 Sigmoid 函數)。
想象一下黃昏后在山上徒步旅行,發現腳下什么都看不到。而且您的手機電池沒電了,因此您無法使用 GPS 應用程序找到回家的路。您可能會通過梯度下降找到最快的路徑。小心不要從懸崖上走。太陽和地毯:梯度下降比通過陡峭的地形下降更有利。1847年,法國數學家Augustin-Louis Cauchy發明了近似恒星軌道的算法。60 年后,他的同胞 Jacques Hadamard 獨立開發了它來描述薄而靈活的物體(如地毯)的變形,這可能會使膝蓋向下徒步更容易。然而,在機器學習中,它最常見的用途是找到學習算法損失函數的最低點。
向下爬:經過訓練的神經網絡提供了一個函數,該函數在給定輸入的情況下計算所需的輸出。訓練網絡的一種方法是通過迭代計算實際輸出與期望輸出之間的差異,然后更改網絡的參數值以縮小差異,從而將輸出中的損失或誤差最小化。梯度下降縮小了差異,將計算損失的函數最小化。網絡的參數值相當于地形上的一個位置,損失的是當前高度。隨著你的下降,你可以提高網絡計算接近所需輸出的能力。可見性是有限的,因為在典型的監督學習情況下,該算法僅依賴于網絡的參數值和損失函數的梯度或斜率——即你在山上的位置和你腳下的斜率。
卡在山谷里:太糟糕了,你的手機沒電了,因為算法可能沒有把你推到凸山的底部。你可能會陷入由多個山谷(局部最小值)、山峰(局部最大值)、鞍點(鞍點)和高原組成的非凸面景觀中。事實上,圖像識別、文本生成和語音識別等任務都是非凸的,并且已經出現了梯度下降的許多變體來處理這種情況。例如,該算法可能具有幫助它放大小幅上漲和下跌的動量,從而使其更有可能到達底部。研究人員設計了如此多的變體,以至于看起來優化器的數量與局部最小值一樣多。幸運的是,局部最小值和全局最小值往往大致相等。最優優化器:梯度下降是尋找任一函數的最小值的明確選擇。在可以直接計算精確解的情況下——例如,具有大量變量的線性回歸任務中——它可以逼近一個值,而且通常速度更快、成本更低。但它確實在復雜的非線性任務中發揮了作用。憑借梯度下降和冒險精神,你可能可以及時趕出山區吃晚飯。
讓我們先把這個問題弄清楚:大腦不是一個圖形處理單元集,如果它是的話,那它運行的軟件要比典型的人工神經網絡復雜得多。而神經網絡的靈感來自大腦的結構:一層層相互連接的神經元,每個神經元根據其相鄰狀態來計算自己的輸出,由此產生的一連串活動形成了一個想法——或識別出一張貓的照片。從生物到人工:大腦通過神經元之間相互作用來學習的想法可以追溯到 1873 年,但直到 1943 年,美國神經科學家 Warren McCulloch 和 Walter Pitts 才利用簡單的數學規則建立了生物神經網絡模型。1958 年,美國心理學家Frank Rosenblatt開發出感測器——這是一種在打卡機上實現的單層視覺網絡,旨在為美國海軍建立一個硬件版本。
越大越好:Rosenblatt 的發明只能識別單線分類。之后,烏克蘭數學家 Alexey Ivakhnenko 和 Valentin Lapa 通過在任意層數中堆疊神經元網絡,克服了這一限制。1985 年,獨立工作的法國計算機科學家 Yann LeCun、David Parker 和美國心理學家 David Rumelhart 及其同事,描述了使用反向傳播來有效訓練此類網絡。在新千年的第一個十年中,包括 Kumar Chellapilla、Dave Steinkraus 和 Rajat Raina(與吳恩達合作)在內的研究人員通過使用圖形處理單元進一步推動了神經網絡的發展,這使得越來越大的神經網絡能從互聯網生成的海量數據中得到學習。適合每項任務:神經網絡背后的原理很簡單:對于任何任務,都有一個可執行它的函數。一個神經網絡通過組合多個簡單函數構成可訓練函數,每個函數由單個神經元執行。一個神經元的功能由稱為「權重」的可調參數決定。給定這些權重和輸入示例及其所需輸出的隨機值,就可以反復更改權重,直到可訓練的函數能完成手頭的任務。
黑匣子:雖然運氣好的話,一個訓練有素的網絡可以完成它的任務,但最終你要閱讀一個函數,往往會非常復雜——包含數千個變量和嵌套的激活函數——以至于解釋網絡是如何成功完成其任務也是非常困難的。此外, 一個訓練有素的網絡只和它所學的數據一樣好。例如,如果數據集有偏差,那么網絡的輸出也會出現偏差。如果它只包含貓的高分辨率圖片,那它對低分辨率圖片的反應就不得而知了。一個常識:在報道 Rosenblatt 于1958年發明的感測器時,《紐約時報》開辟了人工智能炒作的道路,報道中提到“美國海軍期望擁有一臺會走路、說話、看、寫、自我復制和意識到自己存在的電子計算機雛形。” 雖然當時的感測器沒有達到這個要求,但它產生了許多令人印象深刻的模型:用于圖像的卷積神經網絡;文本的循環神經網絡;以及用于圖像、文本、語音、視頻、蛋白質結構等的transformers。它們已經做出了令人驚嘆的事情,像下圍棋時的表現超過了人類水平,在診斷X射線圖像等實際任務中也接近人類水平。然而,它們在常識和邏輯推理方面的問題仍然較難應對。
亞里士多德是一個什么樣的「野獸」?這位哲學家的追隨者、第三世紀期間生活在敘利亞的 Porphyry 想出了一個合乎邏輯的方法來回答這個問題。他將亞里士多德提出的“存在類別”從一般到具體組合起來,將亞里士多德依次歸入到每個分類中:亞里士多德的存在是物質的而不是概念或精神;他的身體是有生命的而不是無生命的;他的思想是理性的而不是非理性的。因此,他的分類是人類。中世紀的邏輯教師將這個序列繪制為垂直流程圖:一個早期的決策樹。數字差異:快進到 1963 年,密歇根大學社會學家John Sonquist和經濟學家James Morgan在將調查的受訪者分組時,首次在計算機中實行了決策樹。隨著自動訓練算法軟件的出現,這種工作變得很普遍,如今包括 scikit-learn 等在內的各種機器學習庫也已經使用決策樹。這套代碼是由斯坦福大學和加州大學伯克利分校的四位統計學家花費了10 年時間開發的。到今天,從頭開始編寫決策樹已經成為了《機器學習 101》中的一項家庭作業。空中的根:決策樹可以執行分類或回歸。它向下生長,從根部到樹冠,將一個決策層次結構的輸入示例分類為兩個(或更多)。想到德國醫學家和人類學家Johann Blumenbach的課題:大約在 1776 年,他首先將猴子與猿(撇開人類除外)區分開來,在此之前,猴子和猿是被歸為一類的。這種分類取決于各種標準,例如是否有尾巴、胸部狹窄或寬闊、是直立還是蹲伏、還有智力的高低。使用經訓練的決策樹來為這類動物貼上標簽,逐一考慮每個標準,最終將這兩組動物分開。
進入前 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 位動物學家一起在房間里,確保你的分類是最好的。
如果你在聚會上與其他人站得很近,那么你們很可能有一些共同點。這就是使用 k 均值聚類將數據點分組的想法。無論是通過人類機構還是其他力量形成的群體,這個算法都會找到它們。從爆炸到撥號音:美國物理學家 Stuart Lloyd 是貝爾實驗室標志性創新工廠和發明原子彈的曼哈頓計劃的校友,他于 1957 年首次提出 k-means 聚類,以在數字信號中分配信息,但直到 1982 年才發表這個工作:
與此同時,美國統計學家 Edward Forgy 在 1965 年描述了一種類似的方法,導致了它的替代名稱為「Lloyd-Forgy 算法」。尋找中心:考慮將聚類分成志同道合的工作組。給定房間中參與者的位置和要形成的組數,k-means 聚類可以將參與者分成大小大致相等的組,每個組都聚集在一個中心點或質心周圍。
不同的距離:當然,聚類對象之間的距離不需要很大。兩個向量之間的任何度量都可以。例如,k-means 聚類可以根據他們的服裝、職業或其他屬性來劃分他們,而不是根據物理距離對參加派對的人進行分組。在線商店使用它根據客戶的喜好或行為來劃分客戶,天文學家也可以將相同類型的星星分在一組。數據點的力量:這個想法產生了一些顯著的變化:
Revelry in?n?dimensions:?盡管如此,原始形式的算法仍然廣泛有用——特別是因為作為一種無監督算法,它不需要收集昂貴的標記數據。它的使用速度也越來越快。例如,包括 scikit-learn 在內的機器學習庫受益于 2002 年添加的 kd-trees,這些 kd-trees 可以非常快速地劃分高維數據。
文章轉自微信公眾號@算法進階