首頁新聞動態(tài)正文

Python培訓(xùn)之如何從一名軟件工程師轉(zhuǎn)行做人工智能?

更新時間:2017-08-31 來源:黑馬程序員python培訓(xùn)學(xué)院 瀏覽量:

近日,Insight AI 發(fā)布了一篇題為《Transitioning from Software Engineering to Artificial Intelligence》的文章,提出一名軟件工程師如果打算轉(zhuǎn)行做人工智能,需要掌握這 5 項技能:統(tǒng)計學(xué)、機器學(xué)習(xí)理論、數(shù)據(jù)整理、調(diào)試/調(diào)節(jié)模型、軟件工程。

Chris Lesniewski-Laas 正在與 Insight AI 員工討論 Dropbox 的機器學(xué)習(xí)問題

關(guān)于將機器學(xué)習(xí)作為一項技能

作為軟件工程師關(guān)鍵在于要緊跟框架、標(biāo)準(zhǔn)以及范式的最新狀態(tài)。軟件工程師不停地努力學(xué)習(xí),希望把最好的工具運用到工作中。機器學(xué)習(xí)在當(dāng)今諸多的應(yīng)用程序中找到了立足點,很自然地它就變成了許多工程師想要掌握的一項技能。

但是,相比于新框架機器學(xué)習(xí)更難掌握。作為一個高效的實踐者,你需要充分理解該領(lǐng)域的理論、廣泛掌握當(dāng)前最尖端的知識,并且有能力以不確定的方式塑造問題。

網(wǎng)上很多的指南只會簡單地教你如何在一個策劃好的數(shù)據(jù)集上訓(xùn)練可以立即使用的模型,并達(dá)到一個不錯的準(zhǔn)確度,然后就結(jié)束了。事實上,要成為一個優(yōu)秀的機器學(xué)習(xí)工程師必須掌握更加廣泛的技能。

以下是我們與超過 50 個灣區(qū)和紐約頂尖的機器學(xué)習(xí)團隊對話的精華部分,他們來到 Insight AI,準(zhǔn)備好解決其問題并加速實現(xiàn)人工智能應(yīng)用的普及。

為什么機器學(xué)習(xí)不只是「另一個工具」

部署機器學(xué)習(xí)的解決方案不僅僅是在你的數(shù)據(jù)集上隨意訓(xùn)練一個模型。它需要理解以下內(nèi)容:

你擁有的數(shù)據(jù)類型、它的統(tǒng)計學(xué)分布方式、它含有什么偏差。適用于你的特定數(shù)據(jù)集的統(tǒng)計模型,以及這些模型成功的可能性。相關(guān)指標(biāo)的優(yōu)化以及你的模型輸出的意義。

換句話說,為了整合、部署以及調(diào)試模型,除去工程學(xué)的知識,你還需要有統(tǒng)計學(xué)、線性代數(shù)和優(yōu)化理論的基礎(chǔ)知識。

為一個問題搭建特定的機器學(xué)習(xí)解決方案,你需要考慮從數(shù)據(jù)的獲取、標(biāo)記和預(yù)處理到構(gòu)建、更新并服務(wù)一個推理模型以及中間的一切等問題。

最終,我們認(rèn)為可以提前為標(biāo)準(zhǔn)的網(wǎng)站搭建一個數(shù)據(jù)接口(REST API)。我們不能保證機器學(xué)習(xí)模型總是收斂或產(chǎn)生有用的輸出。學(xué)習(xí)如何審視和傳遞有效的機器學(xué)習(xí)產(chǎn)出的最佳方式是理解其理論基礎(chǔ)與數(shù)據(jù)分類之間聯(lián)系的方式。

轉(zhuǎn)行人工智能你需要掌握這 5 項技能

1. 統(tǒng)計學(xué)

為了理解機器學(xué)習(xí),堅實的統(tǒng)計學(xué)基礎(chǔ)知識是必須的。這包括:

評估模型成功的不同方法(精確度、召回率(recall)、特征曲線下的面積等)。你選擇的損失函數(shù)和評估指標(biāo)如何測量你的模型輸出的偏差。如何理解過擬合(overfitting)和欠擬合(underfitting),以及偏差/變量權(quán)衡。模型的結(jié)果與置信度之間有什么聯(lián)系。

2. 機器學(xué)習(xí)理論

當(dāng)你在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時,實際上發(fā)生了什么?是什么使這些任務(wù)可行而其它的不行呢?對待該問題的好方法是,在深入理解理論之前,首先通過圖和實例理解機器學(xué)習(xí)。

需要理解的概念有不同的損失函數(shù)工作的方法,反向傳播有用的原因,以及計算圖究竟是什么。深入理解構(gòu)建函數(shù)模型并且與團隊其他成員有效地對其進(jìn)行溝通非常關(guān)鍵。以下是一些資源,以高層概述開始,逐漸深入。

谷歌的深度學(xué)習(xí)課程是一個優(yōu)秀的入門課程(https://www.udacity.com/course/deep-learning--ud730)。李飛飛的計算機視覺課程(http://cs231n.stanford.edu)和 Richard Socher 的自然語言處理課程(http://cs224d.stanford.edu)中包含更多專門的方法。Goodfellow 的深度學(xué)習(xí)書(http://cs224d.stanford.edu)特別好,對基礎(chǔ)進(jìn)行了全面概述。

另一個基礎(chǔ)技能是有能力閱讀、理解和實驗研究論文。起初看上去這似乎是一個艱巨的任務(wù),所以一個不錯的方法是從一篇后面附有代碼的論文開始,并深入理解其實現(xiàn)。

3. 數(shù)據(jù)整理(Data Wrangling)

問任何一個數(shù)據(jù)科學(xué)家,他們會告訴你其 90% 的工作是數(shù)據(jù)再加工(data munging)。它對于應(yīng)用人工智能的重要性就如同你的模型的成功與你的數(shù)據(jù)的質(zhì)量(和數(shù)量)高度相關(guān)一般。數(shù)據(jù)在許多方面起作用,可分為以下幾個類別:

數(shù)據(jù)獲取(找到好的數(shù)據(jù)源,精確測定數(shù)據(jù)的質(zhì)量和分類,獲取并推理標(biāo)簽)數(shù)據(jù)預(yù)處理(補全缺失值(missing data)、特征工程、數(shù)據(jù)增強、數(shù)據(jù)歸一化、交叉檢驗拆分)數(shù)據(jù)后處理(使模型的輸出有用,去除人為數(shù)據(jù),處理特殊情況和異常值)

熟悉數(shù)據(jù)整理的最好方法是掌握原始的數(shù)據(jù)集,并嘗試使用它。網(wǎng)上有很多的數(shù)據(jù)集并且許多社交媒體和新聞媒體網(wǎng)站都有著很好的應(yīng)用程序接口。遵循以下步驟是一個不錯的學(xué)習(xí)方法:

掌握一個開源的數(shù)據(jù)集并對其進(jìn)行檢測。它有多大(觀測值和特征值的數(shù)量)?數(shù)據(jù)是如何分布的?是否有缺失值或者不含異常值?開始在原始數(shù)據(jù)和有用數(shù)據(jù)之間構(gòu)建一條轉(zhuǎn)換的通道。你是如何回填丟失值的呢?處理異常值最合適的方法是什么?你如何歸一化數(shù)據(jù)?你可以創(chuàng)造更具表現(xiàn)力的特征嗎?檢查你的轉(zhuǎn)換數(shù)據(jù)集。如果一切看上去都不錯,進(jìn)行下一步吧!

4. 調(diào)試/調(diào)節(jié)模型

對一些不收斂或者包含與調(diào)試代碼非常不同的過程但是給出合理結(jié)果的機器學(xué)習(xí)算法進(jìn)行調(diào)試。同樣地,找到正確的架構(gòu)和超參數(shù)需要堅實的理論基礎(chǔ),良好的基礎(chǔ)建設(shè)工作可以測試不同的配置。

由于該領(lǐng)域在向前發(fā)展,調(diào)試模型的方法也在不斷進(jìn)化。以下是從我們的討論和部署反映了 KISS 理論和軟件工程師之間的熟悉度的模型的經(jīng)驗中得來的「合理性檢查(sanity checks)」。

盡快從已被證明可以在類似數(shù)據(jù)集上工作的簡單模型入手,掌握基線。古典統(tǒng)計學(xué)習(xí)模型(線性回歸、最近鄰等)或者簡單的啟發(fā)式方法或規(guī)則會讓你明白 80% 的方法并且更快地進(jìn)行實現(xiàn)。入門的時候,以最簡單的方法去解決問題(查看谷歌機器學(xué)習(xí)規(guī)則的第一點)。如果你決定訓(xùn)練一個更加復(fù)雜的模型以在基線上有所提升,不妨從數(shù)據(jù)集的一小部分入手,在分?jǐn)?shù)據(jù)集上訓(xùn)練模型使其過擬合。這保證了你的模型最起碼的學(xué)習(xí)能力。不斷地在模型上迭代直到你可以過擬合 5% 的數(shù)據(jù)。一旦你開始在更多的數(shù)據(jù)上訓(xùn)練,超參數(shù)就開始變得更重要了。理解這些參數(shù)背后的理論從而理解什么是要探索的合理值。使用理論方法調(diào)節(jié)你的模型。寫下你使用的最低限度的配置并總結(jié)其結(jié)果。理想情況下,使用自動超參數(shù)搜索策略。在最開始,隨機搜尋可能就足夠了。盡可能地去探索更多理論方法吧。

許多步驟都能被你的開發(fā)技能加速,這引出了最后一個技能。

5. 軟件工程

許多應(yīng)用型機器學(xué)習(xí)允許你充分利用軟件工程技巧,有時需要做些變換。這些技巧包括:

測試轉(zhuǎn)換線路的不同方面(數(shù)據(jù)預(yù)處理和增強、輸入和輸出清除、模型推理時間)。構(gòu)建模塊化的代碼和可重復(fù)的實驗加速方法。在訓(xùn)練的不同階段備份模型(檢查點)。建立一個分布式基礎(chǔ)架構(gòu)來運行訓(xùn)練、超參數(shù)搜索或者更有效地推理。

想要知道更多我們推薦的成為優(yōu)秀機器學(xué)習(xí)工程師的軟件技能,請查看我們的推文:

https://blog.insightdatascience.com/preparing-for-the-transition-to-applied-ai-8eaf53624079

在工作中使用工具

上述資源會幫助你處理切實的機器學(xué)習(xí)問題。但是應(yīng)用人工智能領(lǐng)域變化的特別快,最好的學(xué)習(xí)方式是動手實踐并且真正嘗試構(gòu)建一個完整方案解決實際的問題。

待辦事項:

找一個你可以構(gòu)建的產(chǎn)品應(yīng)該會很有意思。什么可以讓你的人生更高效呢?什么是可以提升使用數(shù)據(jù)完成的方法的工具?什么是解決一個有趣問題的數(shù)據(jù)驅(qū)動的方法?尋找與問題相關(guān)的數(shù)據(jù)集。對于如今大多數(shù)容易處理的問題,你應(yīng)該尋找標(biāo)注數(shù)據(jù)。如果對于你的問題不存在標(biāo)注數(shù)據(jù)集,那么你就應(yīng)該變得有創(chuàng)造性一點。什么是尋找相似數(shù)據(jù)或者高效標(biāo)注數(shù)據(jù)的方法?從探索數(shù)據(jù)入手,看看你嘗試完成的任務(wù)在你所擁有數(shù)據(jù)的數(shù)量和質(zhì)量下是否可行。在你開始 TensorFlow 之前,網(wǎng)上搜索人們解決過的相似問題是一個不錯的主意。哪些是你可以閱讀的相關(guān)博文與論文,有助于你加快探索新方法?

找一些靈感,然后深入研究吧!記住,盡管機器學(xué)習(xí)工程的核心是構(gòu)建產(chǎn)品,但是它還包含一個不可或缺的理論層面。你會探索一些模型和范式,這些東西在未來也許被證明是不成功的,但是這非常好,因為它會使你更好地了解問題的復(fù)雜性。






本文版權(quán)歸黑馬程序員Python培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!

作者:黑馬程序員Python培訓(xùn)學(xué)院

首發(fā):http://www.pantone-color.com.cn/news/python.html


分享到:
在線咨詢 我要報名
和我們在線交談!