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

2021-09-11 20:59:59 字數 3942 閱讀 6670

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

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

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

目錄

前言

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

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

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

由於你的團隊成員們可能會對你提出的新想法產生質疑,吳恩達把書本章節寫得非常精簡(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:如何劃分資料集

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

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

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

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

總結

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

設計模式 六大設計原則總結

六大設計原則 solid 包括 單一職責原則,黎克特制替換原則,依賴倒置原則,介面隔離原則,迪公尺特法則,開閉原則。設計模式的乙個重點是面向介面程式設計,設計具有低耦合度的模組,使各個模組功能分明。在六大設計原則中,很多方面都體現了這些內容。在程式設計時,遵循這些點可以使 更容易讀和擴充套件,使 易...

設計模式六大原則簡單總結

指的是乙個類對應一種職責,而不是乙個類對應多個職責,實現類的職責要單一,盡量避免出現職責擴散的問題。指的是類之間的繼承關係,子類不應該去修改父類中的內容,不能破壞繼承體系,而是在子類中去擴充套件父類的功能。指的是類之間的依賴關係,盡量避免直接依賴,通過定義乙個介面,然後被依賴的類分別去實現這個介面中...

設計模式六大原則自我總結

open close principle 擴充套件開發,修改關閉 但軟體需求變化,擴充套件軟體實體行為,禁止修改 個人理解 如果修改原有 可能會導致原有 不可用,所以可以擴充套件,不可修改 乙個類只負責乙個職責 個人理解 類的單一職責,和方法的單一職責要權衡 防止子類在繼承父類時修改原有的方法,造成...