作為軟件工程師關鍵在于要緊跟框架、標準以及范式的最新狀態。軟件工程師不停地努力學習,希望把最好的工具運用到工作中。機器學習在當今諸多的應用程序中找到了立足點,很自然地它就變成了許多工程師想要掌握的技能。
然而,機器學習比一個新的框架更難掌握。作為一個高效的實踐者,你需要充分理解該領域的理論、廣泛掌握當前最尖端的知識,并且有能力以不確定的方式塑造問題。
網上很多的指南只會簡單地教你如何在一個策劃好的數據集上訓練可以立即使用的模型,達到一個不錯的準確度,然后就結束了。事實上,要成為一個高效的機器學習工程師必須掌握廣泛的技能。
以下是我們與超過 50 個灣區和紐約頂尖的機器學習團隊對話的精華部分。
部署機器學習的解決方案不僅僅是在你的數據集上隨意訓練一個模型。它需要對以下內容的理解:
你擁有的數據類型、在統計學角度上它分布的方式、它含有什么偏差
適用于你的獨特的數據集的統計模型,以及這些模型成功的可能性
相關指標的優化以及你的模型輸出的意義
換句話說,為了整合、部署以及調試模型,除去工程學的知識,你還需要具備統計學、線性代數和優化理論的基礎。
為一個問題搭建特定的機器學習解決方案,你需要從數據的獲取、標記和預處理等角度考慮問題來構建、更新并服務一個推理模型等中間的一切。
最終,我們認為可以提前為標準的網站搭建一個數據接口(REST API)。我們不能保證機器學習模型總是收斂或產生有用的輸出。學習如何檢查和傳遞有效的機器學習產出最佳方式是理解其理論基礎與數據分類之間聯系的方式。
1—統計學
為了理解機器學習,堅實的統計學基礎知識是必須的。這包含了以下方面:
評估模型成功的不同方法(精確度、召回率(recall)、特征曲線下的面積等)。你選擇的損失函數和度量是如何測量你的模型輸出的偏差的。
如何理解過擬合和欠擬合,以及偏差/變量的平衡。
模型的結果與置信度之間存在什么聯系。
2—機器學習理論
當你在訓練神經網絡時,實際上發生了什么?是什么使這些任務可行而其它的不行呢?對待該問題的好方法是,在深入理解理論之前,首先通過圖片和范例理解機器學習。
需要理解的概念,從不同的損失函數工作的方法,到反向傳播有用的原因,最后要明白計算圖究竟是什么。深入理解構建函數模型并且與團隊中其他人有效地對其進行溝通非常關鍵。以下是一些資源,以高層概述開始,逐漸深入。
谷歌的深度學習課程是一個優秀的入門課程
李飛飛的計算機視覺課程和 Richard Socher 的自然語言處理課程(NLP)中包含更多專門的方法
Goodfellow 的深度學習書特別好,對基礎進行了全面的概述
另一個基礎技能是有能力閱讀、理解和實驗研究文獻。乍看起來這似乎是一個艱巨的任務,所以一個不錯的方法是以一篇后面附有代碼的文獻作為開始,并嘗試深入理解其實現。
3—數據糾紛
問任何一個數據科學家,他們會告訴你其 90% 的工作是數據再加工(data munging)。它對于應用人工智能的重要性就如同你的模型的成功與你的數據的質量(和數量)高度相關一般。數據在許多方面起作用,可分為以下幾個類別:
獲得數據(找到好的數據源,正確的測定數據的質量和分類,獲得并推測標簽)
數據預處理(補全缺失值(missing data),特征工程,數據增強,數據歸一化,拆分交叉檢驗)
數據后處理(使模型的輸出有用,去除人為數據,處理特殊情況和異常值)
熟悉數據糾紛(data wrangling)最好的方法是掌握混亂的數據集,并嘗試使用它。網上有很多的數據集并且許多社交媒體和新聞媒體網站都有著很好的應用程序接口。遵循以下步驟是一個不錯的學習方法:
掌握一個開源的數據集并對其進行檢測。它有多大(觀測值和特征值的數量)?數據是如何分布的?是否有缺失值或者不含異常值?
開始在原始數據和有用數據之間構建一條轉換的通道。回填是如何丟失值的呢?處理異常值最合適的方法是什么?你如何歸一化數據?你可以創造更多的具有表現力的特征嗎?
測試你的轉換數據集。如果一切看上去都不錯,進行下一步吧!
4—調試/調節模型
對一些不收斂或包含與調試代碼非常不同的過程但是給出合理結果的機器學習算法進行調試。同樣地,找到正確的架構和超參數需要堅實的理論基礎,良好的基礎工作可以測試不同的配置。
由于該領域在向前發展,調試模型的方法也在不斷進化。以下是從我們的討論和部署反映了 KISS 理論和軟件工程師之間的熟悉度的模型的經驗中得來的「合理性檢查(sanity checks)」。
盡快從已經被證明可以在類似數據集上工作的簡單模型入手,掌握基準線。古典統計學習模型(線性回歸、最近鄰等)或者簡單的啟發式方法或規則會讓你明白 80% 的方法并且更快地進行實現。入門的時候,以最簡單的方法去解決問題(查看谷歌機器學習規則的第一點)。
如果你決定訓練一個更加復雜的模型以在基線上有所提升,不妨從你的數據集的一個小部分入手,在分數據集上訓練模型使其過擬合。這保證了你的模型最起碼的學習能力。不斷地在模型上迭代直到你可以過擬合 5% 的數據。
一旦你開始在更多的數據上訓練,超參數就開始變的更重要了。理解這些參數背后的理論從而去理解什么是要探索的合理值。
使用理論方法調節你的模型。寫下你使用的最低限度的配置并對其結果進行總結。理想情況下,使用自動超參數搜索策略。在最開始,隨機搜尋可能就足夠了。盡可能地去探索更多理論方法吧。
許多步驟都能被你的開發技能加速,接下來是我們的最后一個技能。
5—軟件工程
許多應用機器學習允許你充分利用軟件工程技巧,有時會有小小的轉彎。這些技巧包括:
測試轉換線路的不同方面(數據預處理和增強、輸入和輸出清除、模型推理時間)
構建模塊化的代碼和可重復的實驗加速方法
在訓練的不同階段備份模型(檢查點)
建立一個分布式基礎架構來運行訓練、超參數搜索或者使其更有效地推理
以上的資源幫助你處理切實的機器學習問題。但是應用人工智能領域變化的特別快,學習的最好方式是動手實踐并且真正地嘗試構建一個完整的解決方案去解決一個實際的問題。
待辦事項:
找一個你可以構建的產品應該會很有意思。什么可以讓你的人生更高效呢?什么是可以提升使用數據完成的方法的工具?什么是解決一個有趣問題的數據驅動的方法?
尋找與問題相關的數據集。對于如今大多數容易處理的問題,你應該尋找有標識的數據。如果對于你的問題不存在有標識的數據集,那么你就應該變得有創造性一點。什么是尋找相似數據或者高效地標識的或者自己對其處理的方法?
從探索數據入手,看看你嘗試完成的任務在你所擁有的數據的數量和質量下是否可行。在你開始 TensorFlow 之前,在網上查看人們解決過得相似問題的方法是一個不錯的主意。哪些是你可以閱讀的相關博客推文和文獻,讓你熟悉當前發展情況進行搜索好方法?
找一些靈感,然后深入研究吧!記住,機器學習工程是產品建立的核心,這是一個研究方面。你會探索一些模型和范式,這些東西在未來也許被證明是不成功的,但是這非常好,因為它會使你更好地了解問題的復雜性。