把機(jī)器學(xué)習(xí)當(dāng)做一種技能
作為一名軟件工程師北救,我們應(yīng)該活到老學(xué)到老,時(shí)刻與不斷發(fā)展的框架芜抒、標(biāo)準(zhǔn)和范式保持同步珍策。同時(shí),還要能活學(xué)活用宅倒,在工作中使用最合適的工具攘宙,以提高工作效率。隨著機(jī)器學(xué)習(xí)在越來(lái)越多的應(yīng)用程序中尋得了一席之地,它成為了廣大工程師迫切希望掌握的一門(mén)課題蹭劈。
機(jī)器學(xué)習(xí)比一個(gè)新的框架更難掌握疗绣。要成為一名高效的實(shí)踐者,你需要深入理解該領(lǐng)域相關(guān)的理論铺韧,廣泛了解這個(gè)行業(yè)的現(xiàn)狀多矮,以及具備以非確定性的方式構(gòu)建問(wèn)題的能力。
你可以在網(wǎng)上找到很多教程來(lái)教你如何在一個(gè)精心挑選過(guò)的數(shù)據(jù)集上訓(xùn)練一個(gè)現(xiàn)成的模型祟蚀,并使之達(dá)到不錯(cuò)的準(zhǔn)確性工窍。事實(shí)上,具備更多的相關(guān)技能是成為一個(gè)高效機(jī)器學(xué)習(xí)工程師的關(guān)鍵前酿。
以下是我們與50多個(gè)頂尖機(jī)器學(xué)習(xí)團(tuán)隊(duì)的一些對(duì)話(huà)患雏,他們來(lái)自海灣地區(qū)和紐約,這次來(lái)到Insight公司是為了探求人工智能從業(yè)者需要共同面對(duì)的問(wèn)題??罢维,并希望能夠加快自己融入應(yīng)用人工智能領(lǐng)域的步伐 淹仑。
為什么機(jī)器學(xué)習(xí)“并不僅僅是另一種工具”
部署機(jī)器學(xué)習(xí)解決方案不僅僅是用數(shù)據(jù)對(duì)任意一個(gè)模型進(jìn)行訓(xùn)練。你還需要了解:
你所擁有的**數(shù)據(jù)的類(lèi)型**肺孵、**數(shù)據(jù)集在統(tǒng)計(jì)上如何分布**匀借,以及數(shù)據(jù)集存在怎樣的偏差。
適用于特定數(shù)據(jù)集的**統(tǒng)計(jì)模型**平窘,以及這些模型成功的概率吓肋。
模型**優(yōu)化**的相關(guān)指標(biāo),以及模型輸出的含義瑰艘。
換句話(huà)說(shuō)是鬼,要對(duì)模型進(jìn)行集成、部署和調(diào)試紫新,除了要具備工程上的能力之外均蜜,你還需要了解統(tǒng)計(jì)的基本原理、線(xiàn)性代數(shù)和優(yōu)化理論芒率。
要針對(duì)某個(gè)問(wèn)題構(gòu)建一個(gè)定制化的機(jī)器學(xué)習(xí)解決方案囤耳,需要考慮的東西涵蓋了從數(shù)據(jù)的獲取、標(biāo)記和預(yù)處理到模型的構(gòu)建偶芍、更新和服務(wù)充择,以及這個(gè)過(guò)程中的所有一切。
最后腋寨,我們認(rèn)為聪铺,為標(biāo)準(zhǔn)Web應(yīng)用程序構(gòu)建一套R(shí)EST API是一個(gè)可以提前完成的任務(wù)。另一方面萄窜,機(jī)器學(xué)習(xí)模型不總是能保證收斂或者產(chǎn)生可用的輸出铃剔。學(xué)習(xí)如何審視和交付有影響力的機(jī)器學(xué)習(xí)產(chǎn)品的最佳方法是了解其理論基礎(chǔ)是如何與數(shù)據(jù)分類(lèi)學(xué)相關(guān)聯(lián)的撒桨。
轉(zhuǎn)行到應(yīng)用AI之前最需要掌握的5個(gè)技能
1. 統(tǒng)計(jì)學(xué)
要深入理解機(jī)器學(xué)習(xí),必須要有扎實(shí)的統(tǒng)計(jì)學(xué)基礎(chǔ)知識(shí)键兜,這涉及到幾個(gè)方面:
度量模型是否成功的各種方法(精確度凤类、召回率、ROC曲線(xiàn)下面積等)普气。損失函數(shù)和評(píng)估指標(biāo)的選擇是如何**偏離模型的輸出**的谜疤。
如何理解**過(guò)擬合**和**欠擬合**,以及**偏差/方差折衷**现诀。
你對(duì)模型的結(jié)果有什么樣的**信心**夷磕。
2. 機(jī)器學(xué)習(xí)理論
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時(shí)候,實(shí)際上發(fā)生了什么仔沿?是什么使得某些任務(wù)可行坐桩,而其他任務(wù)不可行?要弄清楚這些問(wèn)題封锉,最好的方法不是深入研究理論知識(shí)绵跷,而是試著通過(guò)圖形和示例來(lái)了解機(jī)器學(xué)習(xí)。
需要理解的概念范圍包括:不同的**損失函數(shù)**的工作原理是什么成福、為什么**反向傳播**是有用的碾局、**計(jì)算圖**是什么。而對(duì)于**如何建立一個(gè)功能模型**奴艾,以及**如何跟團(tuán)隊(duì)里的其他人員進(jìn)行有效地交流**净当,這些都需要深入地理解。下面我給出了一些參考資料:
谷歌的深度學(xué)習(xí)課程對(duì)深度學(xué)習(xí)做了一般性地介紹蕴潦。
Fei-Fei Li的計(jì)算機(jī)視覺(jué)課程蚯瞧,以及Richard Socher的NLP課程,則提供了更為專(zhuān)業(yè)的介紹
Goodfellow編寫(xiě)的深度學(xué)習(xí)書(shū)籍相當(dāng)不錯(cuò)品擎,可用于全面了解深度學(xué)習(xí)方面的基礎(chǔ)知識(shí)。
另一個(gè)基本技能是閱讀备徐、理解和實(shí)施論文的能力萄传。這個(gè)一開(kāi)始做起來(lái)可能會(huì)感覺(jué)比較困難,所以最好的方法就是閱讀附帶代碼的論文(例如蜜猾,研究GitXiv上的論文)秀菱,并試著去理解它是如何實(shí)現(xiàn)的。
3. 數(shù)據(jù)處理
如果你去問(wèn)任何一個(gè)數(shù)據(jù)科學(xué)家他們的主要工作是什么蹭睡,他們會(huì)告訴你衍菱,90%的工作是數(shù)據(jù)處理。這與應(yīng)用AI同樣重要肩豁,因?yàn)槟P偷某晒εc否與數(shù)據(jù)的質(zhì)量(和數(shù)量)強(qiáng)相關(guān)脊串。數(shù)據(jù)工作包含多個(gè)方面辫呻,但可歸納為下面幾類(lèi):
數(shù)據(jù)采集(包括:找到好的數(shù)據(jù)源、準(zhǔn)確度量數(shù)據(jù)的**質(zhì)量**和**分類(lèi)**琼锋、獲取和推斷標(biāo)簽)
數(shù)據(jù)預(yù)處理(**缺失數(shù)據(jù)**填補(bǔ)放闺、**特征工程**、數(shù)據(jù)**增強(qiáng)**缕坎、數(shù)據(jù)**規(guī)范化**怖侦、交叉驗(yàn)證分割)
數(shù)據(jù)后處理(使模型的輸出可用、清理工作谜叹、處理**特殊情況**和**異常值**)
熟悉數(shù)據(jù)處理工作最好的方法是獲取一個(gè)數(shù)據(jù)集并試著使用它匾寝。有很多在線(xiàn)數(shù)據(jù)集,以及很多提供API的社交媒體和新聞媒體網(wǎng)站荷腊⊙藁冢基于上面提到的幾個(gè)步驟,我們可以這樣進(jìn)行學(xué)習(xí):
獲取一個(gè)開(kāi)源的數(shù)據(jù)集停局,并對(duì)其進(jìn)行檢查很钓。它有多大(點(diǎn)和特征的數(shù)量)?數(shù)據(jù)如何分布董栽?是否存在缺失值或異常值码倦?
構(gòu)建一個(gè)將原始數(shù)據(jù)轉(zhuǎn)換為可用數(shù)據(jù)的轉(zhuǎn)換流程。如何填補(bǔ)缺失值锭碳?如何正確處理異常值袁稽?如何規(guī)范化數(shù)據(jù)?能創(chuàng)造出更多的表現(xiàn)特征嗎擒抛?
檢查轉(zhuǎn)換過(guò)的數(shù)據(jù)集推汽。如果看起來(lái)一起正常,請(qǐng)繼續(xù)下一章節(jié)歧沪!
4. 對(duì)模型進(jìn)行調(diào)試或調(diào)優(yōu)
調(diào)試機(jī)器學(xué)習(xí)算法(無(wú)法收斂歹撒,或者得到的結(jié)果不合理)與調(diào)試普通代碼有著很大的區(qū)別。同時(shí)诊胞,要找出合適的架構(gòu)和超參數(shù)則需要具備扎實(shí)的理論基礎(chǔ)和完備的基礎(chǔ)架構(gòu)暖夭,以便對(duì)不同的配置進(jìn)行徹底的測(cè)試。
由于目前機(jī)器學(xué)習(xí)領(lǐng)域發(fā)展迅猛撵孤,而調(diào)試模型的方法也在不斷地發(fā)展迈着。以下是從我們部署模型的討論和經(jīng)驗(yàn)中總結(jié)出來(lái)的“合理性檢查”列表,這些條目也以某種方式反映了許多軟件工程師熟悉的KISS原理邪码。
從一個(gè)已經(jīng)被證明可以使用類(lèi)似數(shù)據(jù)集的**簡(jiǎn)單模型**開(kāi)始裕菠,以盡快獲得**基線(xiàn)**版本。經(jīng)典的統(tǒng)計(jì)學(xué)習(xí)模型(線(xiàn)性回歸闭专、最近鄰居等)或者簡(jiǎn)單的啟發(fā)式算法或規(guī)則通常能幫你**解決80%的問(wèn)題**奴潘,并且能更快地實(shí)現(xiàn)需求旧烧。剛開(kāi)始的時(shí)候,要用最簡(jiǎn)單的方式來(lái)解決問(wèn)題(請(qǐng)參閱谷歌的機(jī)器學(xué)習(xí)規(guī)則的前幾點(diǎn))萤彩。
如果你決定訓(xùn)練一個(gè)更復(fù)雜的模型以改進(jìn)基線(xiàn)版本粪滤,那么可以用**數(shù)據(jù)集的一個(gè)很小的子集**來(lái)進(jìn)行訓(xùn)練并達(dá)到過(guò)擬合。這能夠確保這個(gè)模型至少還有學(xué)習(xí)的能力雀扶。不斷地對(duì)模型進(jìn)行迭代杖小,直到對(duì)5%的數(shù)據(jù)量過(guò)擬合。
一旦開(kāi)始用更多的數(shù)據(jù)進(jìn)行訓(xùn)練愚墓,那么超參數(shù)就開(kāi)始發(fā)揮更大的作用了予权。你需要理解這些參數(shù)涉及到的**理論**,這樣才能找到合理的值浪册。
請(qǐng)采用有針對(duì)性的方法對(duì)模型進(jìn)行調(diào)優(yōu)扫腺。簡(jiǎn)要地記錄下你曾經(jīng)使用的所有配置及其結(jié)果。在理想情況下村象,可以使用**自動(dòng)超參數(shù)搜索**策略笆环。最開(kāi)始的時(shí)候,使用隨機(jī)搜索就足夠了厚者。
你的開(kāi)發(fā)能力越強(qiáng)躁劣,則這些步驟實(shí)現(xiàn)起來(lái)就越快,反之亦然库菲。
5. 軟件工程
許多的應(yīng)用機(jī)器學(xué)習(xí)允許你充分發(fā)揮自己在軟件工程方面的技能账忘,雖然有時(shí)也會(huì)有一點(diǎn)小改變。這些技能包括:
測(cè)試流水線(xiàn)的各個(gè)方面(數(shù)據(jù)的預(yù)處理和增強(qiáng)熙宇、輸入輸出的整理鳖擒、模型推理時(shí)間)。
基于**模塊化**和可重用的原則來(lái)構(gòu)建代碼烫止。
在訓(xùn)練過(guò)程中的不同點(diǎn)對(duì)模型進(jìn)行備份(**設(shè)置檢查點(diǎn)**)蒋荚。
配置一個(gè)**分布式的基礎(chǔ)架構(gòu)**,這樣能更加有效地進(jìn)行訓(xùn)練馆蠕、超參數(shù)搜索或者推演圆裕。
有關(guān)一名優(yōu)秀的機(jī)器學(xué)習(xí)工程師所需掌握的軟件技能,請(qǐng)查看我們的專(zhuān)題文章“從學(xué)術(shù)界轉(zhuǎn)行到應(yīng)用AI”荆几。
工作中的小竅門(mén)
以上那些資源能幫你處理和解決實(shí)際的機(jī)器學(xué)習(xí)問(wèn)題。但是赊时,應(yīng)用AI這個(gè)領(lǐng)域的變化非扯种快,因此祖秒,最好的學(xué)習(xí)方式是親身實(shí)踐诞吱,嘗試構(gòu)建一個(gè)端到端的方案來(lái)解決一個(gè)真正的問(wèn)題舟奠。
行動(dòng)項(xiàng):
尋找一個(gè)可能會(huì)比較有趣的產(chǎn)品來(lái)構(gòu)建。什么能使你的生活更有效率房维?什么工具可以改進(jìn)使用數(shù)據(jù)完成某些工作的方法沼瘫?什么是以數(shù)據(jù)驅(qū)動(dòng)的方式來(lái)解決一個(gè)有趣的問(wèn)題?
搜索與問(wèn)題相關(guān)的數(shù)據(jù)集咙俩。對(duì)于大多數(shù)比較容易處理的問(wèn)題來(lái)說(shuō)耿戚,已經(jīng)打過(guò)標(biāo)記的數(shù)據(jù)也許就是你正在尋找的。如果你的問(wèn)題沒(méi)有對(duì)應(yīng)的標(biāo)記過(guò)的數(shù)據(jù)集阿趁,那么現(xiàn)在就來(lái)做這件事吧膜蛔。你可以通過(guò)哪些方法來(lái)找到類(lèi)似的數(shù)據(jù),或者高效地標(biāo)記數(shù)據(jù)脖阵,或者以其他方式來(lái)加速完成這個(gè)工作皂股?
在動(dòng)手之前,先看看你手頭的數(shù)據(jù)是否在數(shù)量和質(zhì)量上能滿(mǎn)足當(dāng)前任務(wù)的要求命黔。在使用TensorFlow之前呜呐,最好先在網(wǎng)上找找其他人解決類(lèi)似問(wèn)題的方法。有哪些相關(guān)的**博客帖子**和**論文**能夠加快完成工作悍募?
尋找一些靈感蘑辑,然后深入研究!雖然你探索得到的模式和范例可能后來(lái)會(huì)被證明是錯(cuò)誤的搜立,但這對(duì)你也有好處以躯,因?yàn)樗茏屇愀钊氲亓私鈫?wèn)題的復(fù)雜性。
最后的建議
人工智能是一個(gè)令人興奮啄踊、不斷發(fā)展的領(lǐng)域忧设。機(jī)器學(xué)習(xí)工程師對(duì)于獲取相關(guān)知識(shí)的需求非常強(qiáng)烈,但這很容易被相關(guān)的新聞所淹沒(méi)颠通。我們建議你只跟蹤少量的信息來(lái)源和新聞信札址晕,以便能夠?qū)⒐P(guān)和抽象研究與該領(lǐng)域的創(chuàng)新分離。這里有一些資料也許對(duì)你有所幫助:
黑客新聞(Hacker News):黑客新聞是一個(gè)專(zhuān)注于計(jì)算機(jī)科學(xué)顿锰、數(shù)據(jù)科學(xué)和企業(yè)家精神的社會(huì)新聞網(wǎng)站谨垃。它由著名的創(chuàng)業(yè)孵化器Y Combinator運(yùn)營(yíng)。不要因?yàn)榫W(wǎng)站的名字而拋棄這個(gè)網(wǎng)站硼控! “黑客”這個(gè)詞的原始含義與網(wǎng)絡(luò)罪犯無(wú)關(guān)刘陶,它指的是那些依靠自己高超的編程技能來(lái)提出完美解決方案的人。
引入AI(Import AI):Jack Clark負(fù)責(zé)的有關(guān)人工智能的新聞信札牢撼,它始終與該領(lǐng)域最先進(jìn)最重要的發(fā)展保持同步匙隔。
Insight博客:我們保持著相當(dāng)活躍的步伐。在AI博客中的一些帖子談?wù)摰搅艘恍?a target="_blank" rel="nofollow">過(guò)去的項(xiàng)目熏版,這些可以觸發(fā)一些靈感來(lái)解決有趣的問(wèn)題纷责。我們還定期發(fā)送一些有關(guān)AI的內(nèi)容到郵件列表捍掺。注冊(cè)用戶(hù)請(qǐng)?jiān)L問(wèn)這里。
文章原標(biāo)題《Transitioning from Software Engineering to Artificial Intelligence》再膳,作者:Emmanuel Ameisen挺勿,譯者:夏天,審校:主題曲喂柒。
文章為簡(jiǎn)譯不瓶,更為詳細(xì)的你容,請(qǐng)查看原文鏈接
本文由用戶(hù)為個(gè)人學(xué)習(xí)及研究之目的自行翻譯發(fā)表胳喷,如發(fā)現(xiàn)侵犯原作者的版權(quán)湃番,請(qǐng)與社區(qū)聯(lián)系處理yqgroup@service.aliyun.com