軟體工程師如何轉型人工智慧?
2017年9月,Insight AI上發表博文提出,一名軟體工程師要轉行人工智慧行業所必須具備的技能。下面是譯文參考,可供各位參考。
花5分鐘
耐心讀完,文末另有福利
。
將機器學習作為一項技能
作為軟體工程師關鍵在於要緊跟框架、標準以及範式的最新發展。軟體工程師不停地努力學習,希望把最好的工具運用到工作中。機器學習在當今諸多應用程序中找到了很好的立足點,很自然它也變成了許多工程師想要掌握的一項技能。
但是,相比於新框架機器學習更難掌握。作為一個高效的實踐者,你需要充分理解該領域的理論、廣泛掌握當前最尖端的知識,並且有能力以不確定的方式塑造問題。
網上很多指南只會簡單地教你如何在一個策劃好的數據集上訓練可以立即使用的模型,並達到一個不錯的準確度,然後就結束了。事實上,要成為一個優秀的機器學習工程師必須掌握更廣泛的技能。
以下是我們與超過 50 個灣區和紐約頂尖的機器學習團隊對話的精華部分,他們來到 Insight AI,準備好解決其問題並加速實現人工智慧應用的普及。
為什麼機器學習不只是『另一個工具』
部署機器學習的解決方案不僅僅是在你的數據集上隨意訓練一個模型。它需要理解以下內容:
擁有的數據類型、統計學分布方式、含有什麼偏差。
適用於特定數據集的統計模型,以及這些模型成功的可能性。
相關指標的優化以及模型輸出的意義。
換句話說,
為了整合、部署以及調試模型,除去工程學的知識,你還需要有統計學、線性代數和優化理論的基礎知識。
為一個問題搭建特定的機器學習解決方案,你需要考慮從數據的獲取、標記和預處理到構建、更新並服務一個推理模型以及中間的一切問題。
最終,我們認為可以提前為標準網站搭建一個數據介面(REST API)。我們不能保證機器學習模型總是收斂或產生有用的輸出。學習如何審視和傳遞有效的機器學習產出的最佳方式是理解其理論基礎與數據分類之間聯繫的方式。
轉行人工智慧你需要掌握這 5 項技能:
1—統計學
為了理解機器學習,堅實的統計學基礎知識是必須的。這包括:
評估模型成功的不同方法(精確度、召回率(recall)、特徵曲線下的面積等)。你選擇的損失函數和評估指標如何測量你的模型輸出的偏差。
如何理解過擬合(overfitting)和欠擬合(underfitting),以及偏差/變數權衡。
模型的結果與置信度之間有什麼聯繫。
2—機器學習理論
當你在訓練神經網路時,實際上發生了什麼?是什麼使這些任務可行而其它的不行呢?對待該問題的好方法是,在深入理解理論之前,首先通過圖和實例理解機器學習。
需要理解的概念有不同的損失函數工作的方法,反向傳播有用的原因,以及計算圖究竟是什麼。深入理解構建函數模型並且與團隊其他成員有效地對其進行溝通非常關鍵。以下是一些資源,以高層概述開始,逐漸深入。
一些由淺入深的學習資源
谷歌的深度學習課程是一個優秀的入門課程(https://www.udacity.com/course/deep-learning--ud730)。
李飛飛的計算機視覺課程(http://cs231n.stanford.edu)和 Richard Socher 的自然語言處理課程(http://cs224d.stanford.edu)中包含更多專門的方法。
Goodfellow 的深度學習書(http://cs224d.stanford.edu)特別好,對基礎進行了全面概述。
另一個基礎技能是有能力閱讀、理解和實驗研究論文。起初看上去這似乎是一個艱巨的任務,所以一個不錯的方法是從一篇後面附有代碼的論文開始,並深入理解其實現。
3—數據整理(Data Wrangling)
問任何一個數據科學家,他們會告訴你其 90% 的工作是數據再加工(data munging)。它對於應用人工智慧的重要性就如同你的模型的成功與你的數據的質量(和數量)高度相關一般。數據在許多方面起作用,可分為以下幾個類別:
數據獲取
(找到好的數據源,精確測定數據的質量和分類,獲取並推理標籤)
數據預處理
(補全缺失值(missing data)、特徵工程、數據增強、數據歸一化、交叉檢驗拆分)
數據後處理
(使模型的輸出有用,去除人為數據,處理特殊情況和異常值)
熟悉數據整理的最好方法是掌握原始的數據集,並嘗試使用它。網上有很多的數據集並且許多社交媒體和新聞媒體網站都有著很好的應用程序介面。遵循以下步驟是一個不錯的學習方法:
掌握一個開源的數據集並對其進行檢測。它有多大(觀測值和特徵值的數量)?數據是如何分布的?是否有缺失值或者不含異常值?
開始在原始數據和有用數據之間構建一條轉換的通道。你是如何回填丟失值的呢?處理異常值最合適的方法是什麼?你如何歸一化數據?你可以創造更具表現力的特徵嗎?
檢查你的轉換數據集。如果一切看上去都不錯,進行下一步吧!
4—調試/調節模型
對一些不收斂或者包含與調試代碼非常不同的過程但是給出合理結果的機器學習演算法進行調試。同樣地,找到正確的架構和超參數需要堅實的理論基礎,良好的基礎建設工作可以測試不同的配置。
由於該領域在向前發展,調試模型的方法也在不斷進化。以下是從我們的討論和部署反映了 KISS 理論和軟體工程師之間的熟悉度的模型的經驗中得來的「合理性檢查(sanity checks)」。
儘快從已被證明可以在類似數據集上工作的簡單模型入手,掌握基線。古典統計學習模型(線性回歸、最近鄰等)或者簡單的啟發式方法或規則會讓你明白 80% 的方法並且更快地進行實現。入門的時候,以最簡單的方法去解決問題(查看谷歌機器學習規則的第一點)。
如果你決定訓練一個更加複雜的模型以在基線上有所提升,不妨從數據集的一小部分入手,在分數據集上訓練模型使其過擬合。這保證了你的模型最起碼的學習能力。不斷地在模型上迭代直到你可以過擬合 5% 的數據。
一旦你開始在更多的數據上訓練,超參數就開始變得更重要了。理解這些參數背後的理論從而理解什麼是要探索的合理值。
使用理論方法調節你的模型。寫下你使用的最低限度的配置並總結其結果。理想情況下,使用自動超參數搜索策略。在最開始,隨機搜尋可能就足夠了。儘可能地去探索更多理論方法吧。
許多步驟都能被你的開發技能加速,這引出了最後一個技能。
5—軟體工程
許多應用型機器學習允許你充分利用軟體工程技巧,有時需要做些變換。這些技巧包括:
測試轉換線路的不同方面(數據預處理和增強、輸入和輸出清除、模型推理時間)。
構建模塊化的代碼和可重複的實驗加速方法。
在訓練的不同階段備份模型(檢查點)。
建立一個分散式基礎架構來運行訓練、超參數搜索或者更有效地推理。
想要知道更多我們推薦的成為優秀機器學習工程師的軟體技能
在工作中使用工具
上述資源會幫助你處理切實的機器學習問題。但是應用人工智慧領域變化的特別快,最好的學習方式是
動手實踐並且真正嘗試構建一個完整方案解決實際的問題
。
待辦事項:
找一個你可以構建的產品應該會很有意思。什麼可以讓你的人生更高效呢?什麼是可以提升使用數據完成的方法的工具?什麼是解決一個有趣問題的數據驅動的方法?
尋找與問題相關的數據集。對於如今大多數容易處理的問題,你應該尋找標註數據。如果對於你的問題不存在標註數據集,那麼你就應該變得有創造性一點。什麼是尋找相似數據或者高效標註數據的方法?
從探索數據入手,看看你嘗試完成的任務在你所擁有數據的數量和質量下是否可行。在你開始TensorFlow 之前,網上搜索人們解決過的相似問題是一個不錯的主意。哪些是你可以閱讀的相關博文與論文,有助於你加快探索新方法?
找一些靈感,然後深入研究吧!記住,儘管機器學習工程的核心是構建產品,但是它還包含一個不可或缺的理論層面。你會探索一些模型和範式,這些東西在未來也許被證明是不成功的,但是這非常好,因為它會使你更好地了解問題的複雜性。
附 言
人工智慧是一個令人興奮、不斷變化的領域,它對機器學習工程師的需求很大,鋪天蓋地的新聞都在圍繞這個主題進行報道。現在轉型正是最佳時期。
真傳的
《4個月轉型深度學習實戰》
課程,由兩位實戰型專家親自直播授課,助力工程師成功轉型進入人工智慧行業,並能獲得
至少25萬年薪
的工作機會。微信掃描二維碼可獲得
799元《深度學習實戰基礎》學習優惠碼
。