從六大概念總結吳恩達新書:做好工程實踐應該這樣走

 2019-03-03 10:00:32.0

在 ML 工程實踐中,很多時候都會走一些彎路,可能是模型選錯了,也可能是某個超參數一直不正確。那麼我們該如何根據模型結果確定下一步方向呢?在這一篇文章中,Niklas Donges 從六個基本概念總結了吳恩達 Machine Learning Yearning 整本書的精髓,這六個概念能引導我們快速迭代和更新 ML 系統。

《機器學習訓練祕籍》(Machine Learning Yearning)這本書講的是如何構建機器學習項目的開發流程。該書包括了許多在別處難得一見的實用見解,講述的形式又非常適合分享給團隊中的其他成員以及合作者。大多數人工智能方面的課程會向你闡釋不同機器學習算法的工作原理,而這本書教授的是如何實際使用它們。

中文書籍地址:https://accepteddoge.com/machine-learning-yearning-cn/

如果你想要成爲人工智能行業的技術主管,這本書會助你一臂之力。過去,要想學習如何在人工智能項目中做決策,唯一的方法是去攻讀研究生課程、或者在公司積累經驗。現在,《機器學習訓練祕籍》這本書可以助你快速獲得這項技能,從而變得更加擅長構造複雜的人工智能系統。

目錄

  • 前言

  • 概念 1: 迭代,迭代,迭代

  • 概念 2: 使用單一評估指標

  • 概念 3: 錯誤分析很關鍵

  • 概念 4: 定義一個最優錯誤率

  • 概念 5: 研究人類能做好的問題

  • 概念 6: 如何劃分數據集

  • 總結

前言

該書從一個小故事講起。想象一下,你的公司想要建造一個先進的貓咪檢測系統。你已經做了一個原型,可惜的是,這個系統的性能不太行。你的團隊提出了多個改進系統的想法,但你有點搞不清楚接下來該走哪條路。或許你會造出世界領先的貓咪檢測平臺,又或許,你會因走錯路而浪費掉幾個月的時間。

這本書則能告訴你,在這樣的情形下如何做抉擇、如何排定優先級。吳恩達指出,大多數機器學習問題都會爲下一步最應該做什麼或者避免什麼留下線索,學習「讀懂」這些線索是機器學習領域的關鍵技能。

簡而言之,《機器學習訓練祕籍》的主旨是讓你深入理解如何確定機器學習項目的技術方向。

由於你的團隊成員們可能會對你提出的新想法產生質疑,吳恩達把書本章節寫得非常精簡(1-2 頁)。這樣你的成員們就能在幾分鐘內讀完,並理解這些概念背後的思想。此外,這本書並不適合完全的初學者,因爲它需要對有監督學習和深度學習有一些基本的瞭解。

在本文中,我會用我自己的語言和理解來分享這本書中的六個概念。

概念 1:迭代,迭代,迭代……

吳恩達在該書中從頭到尾一直強調:由於機器學習是一個迭代的過程,快速迭代至關重要。比起去思考如何爲你的問題建造一個完美的機器學習系統,不如先儘快造出一個簡單的原型系統。若你不是這個問題所屬領域的專家,就更應如此,因爲要正確找出最佳方向,不靠實驗實在是太難了。

你應該在幾天內造出第一個原型,然後就會有線索幫你找到改進原型的最佳方向。在下一個迭代中,你可以基於其中一個線索改進這個系統,並生成下一個版本,然後周而復始。

接着他闡釋道,你迭代得越快,進步就越多。這本書中的其它概念也都基於這個原則。要注意的是,這一點適用於那些只想做一個基於人工智能的應用,而不是在這個領域做研究的人。

概念 2:使用單一評估指標 

這個概念是建立在不停迭代的基礎上。爲何要選擇一個單值評估指標,道理也很簡單:它使你能夠快速評估算法,從而更加快速地迭代。使用多種評估指標會使算法之間的比較變得更爲困難。

想象你有兩個算法。第一個準確率 94%,召回率 89%。第二個準確率 88%,召回率 95%。

這種情況下,如果你不選擇一個單一評估指標,就很難顯而易見地指出哪個分類器更好,於是你就需要花費更多的時間搞定它。而問題在於,每一次迭代都需要損失一些時間,積累到最後就非常可觀了。因爲你會嘗試很多不同的想法,調整架構、參數、特徵等等,如果你用的是一個單值評估指標(比如準確率或者 f1-值),你就能把你所有的模型按照他們的性能排序,快速決定哪個最好。另外,還有一個方法可以改善評估的過程,就是把多個指標合併成一個,比如給多個錯誤度量求平均。

當然,有一些機器學習問題需要滿足不止一個指標,比如要考慮運行時間。吳恩達這樣說:你應該定義一個「可接受」的運行時間,從而快速排除那些太慢的算法,然後用你的單值評估指標比較那些符合條件的算法。

簡單而言,一個單值評估指標使你能夠快速評估算法,從而更快地迭代。

概念 3: 誤差分析至關重要

誤差分析指的是檢查算法結果中錯誤樣例的過程。比如,假設你的貓咪檢測系統把鳥誤認爲是貓,那麼你就需要對這個問題有一些解決方案。

在恰當的誤差分析後,你可以估計出某個改進方案實際能爲這個系統提供多少性能增益。因此我們不用花費好幾個月先去實現某個方案,然後才發現它對你的系統沒多大影響。這樣你就能判斷,把資源投到哪個方案上效果會最好。如果你發現誤識別的圖片中只有 9% 是鳥,那無論在鳥的圖片上把算法性能提高到多少都沒什麼用,因爲它最多也就能改善你 9% 的錯誤。

另外,通過誤差分析,你還能快速判斷多個改進方案的好壞。如果驗證集裏有 100 張分類錯誤的圖片,只需要新建一個表單,一邊檢查一邊填寫。在表單裏,每個分類錯誤的圖片爲一行,每個改進方案爲一列。然後你遍歷所有分類錯誤的圖片,記錄哪些改進方案能正確分類這張圖。

然後你就會清楚,比方說,方案 1 能使系統把 40% 的誤分類圖片分對、方案 2 爲 12%、方案 3 僅僅爲 9%。所以,可知你的團隊最應該進行的是改進是方案 1。

同時,一旦開始仔細查看這些誤分類樣本,你還可能找到更多新的靈感來改善算法。

概念 4: 定義一個最優錯誤率

最優錯誤率可以指導你接下來該怎麼做。在統計學中,我們也常稱之爲貝葉斯錯誤率。

想象這樣一個場景,你在做一個語音轉文字的系統。你發現用戶們上傳的音頻文件中,預計會有 19% 的音頻背景噪音太大,連人都無法識別到底說了啥。如果是這種情況,那麼即便是最優秀的系統大概也會有接近 19% 的錯誤率。與之相反,如果你要研究的問題最優錯誤率幾乎能到達 0%,那就可以指望你的系統也能做得差不多好。

它也可以幫你檢測算法是否存在高偏差或者高方差的問題,從而幫你判斷接下來如何改進算法。

但怎麼才能知道最優錯誤率是多少呢?對於那些人類擅長的任務,你可以把你的系統的性能和人相比,差不多就是最優錯誤率了。如果是人類不擅長的任務,要定義最優錯誤率往往很難。正因爲此,你應該去研究人類本身也能做好的問題,這一點我們會在下一個概念中進行討論。

概念 5:研究人類能做好的問題

在這本書中,吳恩達多次探討了爲什麼建議大家去研究人類本身也能做好的問題,比如語音識別、圖像分類、物體檢測等等。原因有以下幾點。

首先,更容易獲取或創建一個帶標籤的數據集。因爲如果人們自己可以解決這個問題,那對他們來說,給你的機器學習算法準備些標籤也不是什麼難事。

其次,你可以把人的水準作爲最優錯誤率,即你的算法想要達到的目標。吳恩達表示,定義好一個合理可行的最優錯誤率,有助於加速團隊的開發進程,也可以幫你檢測算法是否有高偏差或者高方差的問題。

再者,這樣你就可以用你的人類直覺來做誤差分析。比如,如果你在做一個語音識別系統,而你的模型給了錯誤的答案,那你可以試着去思考:一個人想要正確轉錄這個音頻會需要什麼信息,由此去改進算法。雖然算法在越來越多人類不太擅長的任務上已經超過了人類,你還是應該儘量避免去研究這些問題。

總而言之,你應該避免這些任務,因爲:獲取數據的標籤更難、你不再能依賴人類直覺、很難確定最優錯誤率。

概念 6:如何劃分數據集

吳恩達也提出了劃分數據集的方法,建議如下:

  • 訓練集:你只用它來訓練算法,不做別的。

  • 驗證集:用於調試超參、選擇並創建合適的特徵、做誤差分析,基本上我們需要根據它來爲算法做決策。

  • 測試集:測試集用於評估你係統的性能,不能用於做決策。只在評估時使用,不做別的。

驗證集和測試集使你的團隊得以快速評估算法的性能,它們的目的是提供引導,讓你爲系統做出最正確的改進。

選擇驗證集和測試集時,吳恩達建議你考慮系統部署後你想要搞定的真實場景,使這兩個集合能如實反映該場景中的數據。如果你預期實際數據會和你當下的訓練數據有所不同,這一點就更爲重要。比如,你訓練時用的是普通的相機圖片,而以後你的系統作爲一個手機應用的一部分,只會收到手機圖片。如果你沒有足夠的手機圖片來訓練系統,你就會面臨這個問題。所以,你應該選擇能反映未來真實目標數據的樣例作爲測試集,而不是你用來訓練的數據。

同時,你應該根據同一分佈選取驗證集和測試集。否則,有可能你的團隊造出的東西在驗證集上效果很好,但在測試集上效果極差,而後者纔是你最關注的的。

總結

在本文中,你學到了《機器學習訓練祕籍》中的六個概念。現在你知道爲什麼快速迭代很重要,爲什麼該用一個單值評估指標,誤差分析是幹什麼的,以及它爲什麼重要。同時,你也認識了最優錯誤率,明白了爲什麼應該研究人類也能做好的問題。另外,你還了解了應該使驗證集和測試集與實際場景數據相一致,以及這兩個集合應該近似同一分佈。希望本文讓你對這本書的概念有了初步的理解,這絕對是一本值得一讀的書。

原文鏈接:https://towardsdatascience.com/6-concepts-of-andrew-ngs-book-machine-learning-yearning-abaf510579d4

文章來源:機器之心