首頁(yè)新聞動(dòng)態(tài)正文

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5. 軟件工程

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

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

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

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

在工作中使用工具

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

待辦事項(xiàng):

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

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






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

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

首發(fā):http://409rqu1.cn/news/python.html


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!