作者:Dan Clark, KDnuggets
編譯:顧佳妮、丁楠雅
本文為你介紹吳恩達新書中的7個使用建議,致力於講明白機器學習算法是怎樣工作的,以及如何構建一個機器學習項目。
《Machine Learning Yearning》是人工智能和深度學習界的專家吳恩達寫的一本書,這本書致力於講明白機器學習算法是怎樣工作的,以及如何構建一個機器學習項目。這裡我們選取了這本書中7個非常有用的建議向大家介紹。
人工智能、機器學習和深度學習這些概念在飛速發展同時促使著工業界發生轉變。吳恩達是這個領域的領軍人物之一,他是Coursera聯合創始人,百度人工智能團隊的前負責人,以及谷歌大腦的前負責人。
他正在寫一本叫做《Machine Learning Yearning》的書來教大家怎樣構建一個機器學習項目(網上可以得到免費的初稿)。
吳恩達在書中寫道:這本書不在於教你機器學習算法,而是教你怎樣使用機器學習算法。有些人工智能培訓班會交給你一個工具,而這本書教你的是怎樣使用這個工具。如果你想成為人工智能行業中的技術領袖,然後為自己的團隊設定目標的話,這本書會給予你幫助。
我們讀了初稿,然後從中選取了7個最有趣實用的建議:
優化指標和滿意度指標
在評估一個算法時,你應該考慮使用多個衡量指標,而不是採用一個單一的公式。其中一個方法是同時使用優化指標和滿意度指標。
通過上面表格中的例子,我們先預設一個可以接受的執行時間比如小於100毫秒,這個執行時間的衡量標準就可以作為我們的滿意度指標。分類器的執行時間只要在這個標準下就可以了。在這裡準確率是一個優化的指標,這是一個評價算法的非常有效又簡便的衡量手段。
儘快選定項目需要的驗證集或測試集:不要害怕後期是否需要替換
吳恩達表示當開始構建一個新項目時,他會盡快確定驗證集或測試集來給團隊一個定義明確的目標。起先會設定一個為期一週的目標,這個時候最好能夠儘快想出方案然後推動項目往下進行,就算想出的方案不是那麼完善也比顧慮太多要好。
話雖如此,要是你突然意識到一開始的驗證集或測試集是錯的,不要害怕去改正它。以下三個原因可能造成選出不正確的驗證集:
- 真正要解決的問題的數據分佈和驗證集的分佈大不相同。
- 驗證集過擬合。
- 選擇的衡量標準並不是這個項目真正想要的優化目標。
要記住做出變更並不是什麼大問題,只要往下繼續並讓你的團隊知道當下新的目標是什麼就可以了。
機器學習是一個迭代優化的過程:不要指望它一開始就能起作用
吳恩達說他做一個機器學習項目包括三個步驟:
- 從產生一個想法開始。
- 用代碼實現這個想法。
- 做實驗判斷這個想法如何。
這個循環走得越快,項目的進展就越快。這也說明了為什麼在一開始確定好驗證集是非常重要的,因為這樣可以在迭代優化過程中省下很多時間。衡量數據集上的表現也可以讓你迅速知道項目是否在一個正確的方向上。
快速開發第一個系統然後迭代
正如第3點中所說,構建機器學習算法是一個迭代的過程。在吳恩達的書裡有一章節的篇幅說明快速開發一個系統的好處:“不要試圖一開始就去設計和開發出一個完美的系統,而是應該在幾天內迅速發開訓練一個基本的系統。
就算這個初步的系統離你可以發開的最好版本還差得很遠,檢驗這個基本系統的功能也是很有價值的,這樣你可以迅速找到證據來確定值得你投入時間的最有保障的發展方向。
並行地評估多個想法
當團隊對改進一個算法有很多想法時,你可以並行地高效評估這些主意。這裡用識別貓咪圖像的算法來舉例,吳恩達介紹說當他想要過目100個被錯誤分類的驗證集圖片的時候,他會用一個電子錶來記錄然後一邊檢查一邊填寫。
上表中包括了每一張圖片為什麼會被分錯類,還有額外註釋便於日後的回顧。當完成這個表的時候,你就能獲知哪些想法可以消除更多的誤差,哪些想法應該被追蹤。
考慮是否要修正錯誤標註的測試集
當你進行誤差分析時,有可能會注意到驗證集的某些樣本是被錯誤標註的,例如圖片在人工標註時被打上了錯誤的標籤。如果你懷疑其中一部分誤差是由這些錯誤標註造成,那可以在剛才提到的電子表格中多加一個類別。
當表格快完成的時候,就可以考慮這些錯誤標註是否值得花時間修復了。書中給出了兩個可能的場景來幫助我們判斷這些錯誤是否值得修復。
- 例1:
測試集上總體正確率……90%
(10%的總體錯誤率)
由於標錯的樣本造成的錯誤率…… 0.6%
(6%的測試集錯誤率)
由於其他原因造成的錯誤率……9.4%
(94%的測試集錯誤率)
“在數據集中,相比於9.4%可以改進的錯誤率,由於錯誤標註導致的0.6%的錯誤率是無足輕重的。當然修正這個錯誤標註沒有什麼壞處,但是也沒有必要做。你的系統整體錯誤率是10%還是9.4%都是可接受的。“
- 例2:
測試集上總體正確率…… 98%
(2%的總體錯誤率)
由於標錯的樣本造成的錯誤率……0.6%
(30%的測試集錯誤率)
由於其他原因造成的錯誤率……1.4%
(70%的測試集錯誤率)
“驗證集上30%的錯誤是由於誤標註造成的,已經對準確率的評估增加了極大比重的錯誤。這個時候就值得來改善測試集的標籤質量了。
處理好錯誤標註的樣本可以幫你解決分類器的錯誤率是1.4%還是2%的問題,相對來說這兩者有巨大不同。“
考慮把驗證集分成小的子集
如果你在一個較大的驗證集上有20%的錯誤率,那麼值得把這個驗證集分成兩個子集:
舉一個算法在5000個驗證集上分錯1000個樣本的例子。假設我們想要人工檢查100個錯誤樣本(10%的錯誤樣本)對其進行錯誤分析,那麼應該從驗證集中隨機抽取10%然後放到一邊,暫時稱它為“引人關注的驗證集”來提醒我們要看一下這部分驗證集(在語音識別項目中,你需要聽一下錄音片段,這個時候可能將劃出來的驗證集稱為引人關注的驗證集)。這個需要關注的驗證集中有500個樣本,我們可以預期算法會在其中分錯100個左右。
驗證集的第二個子集叫做黑箱驗證集,裡面剩有4500個樣本。可以用黑箱驗證集中樣本的的錯誤率來自動評估分類器的效果。
可以用這個測試集來選算法或者調參數。而然,需要注意的是你應該避免具體去看這些樣本。我們之所以使用黑箱這個詞是因為我們只需要用這部分子集來評價分類器即可。
References
[1]Don’t learn Machine Learning in 24 hours
https://www.kdnuggets.com/2018/04/dont-learn-machine-learning-24-hours.html
[2]A Basic Recipe for Machine Learning
https://www.kdnuggets.com/2018/02/basic-recipe-machine-learning.html
[3]10 Free Must-Read Books for Machine Learning and Data Science
https://www.kdnuggets.com/2017/04/10-free-must-read-books-machine-learning-data-science.html
相關報道:
https://www.kdnuggets.com/2018/05/7-useful-suggestions-machine-learning-yearning.html
閱讀更多 大數據文摘 的文章