□文/Andrey Nikishaev □編譯/陳曉、李冉冉
從線性回歸到神經(jīng)網(wǎng)絡(luò),機器學(xué)習(xí)工程師的進(jìn)階之路
□文/Andrey Nikishaev □編譯/陳曉、李冉冉
在開始之前,我想告訴大家,我們將從最簡單的線性回歸開始,一直到最新的神經(jīng)網(wǎng)絡(luò),從而讓你能夠了解機器學(xué)習(xí)的所有方面,相信你學(xué)習(xí)之后,不僅懂得該如何使用它們,還知道該如何從頭開始構(gòu)建它們。
其實,這條學(xué)習(xí)之路中大部分知識是基于計算機視覺(CV)的,因為它是一條獲得一般知識的最佳捷徑,而從CV中獲得的經(jīng)驗知識可以簡單地轉(zhuǎn)移到任何機器學(xué)習(xí)(ML)領(lǐng)域。
我們將使用TensorFlow作為ML框架,因為它是最有前途且早已準(zhǔn)備充足的學(xué)習(xí)材料。
還有一點需要聲明的是,如果你現(xiàn)在正在學(xué)習(xí)相關(guān)理論和材料,且同時不斷地從已學(xué)材料中獲得經(jīng)驗的話,學(xué)習(xí)效果將會更好。
此外,如果你想與那些能夠解決現(xiàn)實生活問題的人競爭,我建議你在Kaggle上注冊成為會員,以學(xué)習(xí)更多知識,因為它可能會成為你的簡歷中一個很好的加分項。
你需要會Python,當(dāng)然,你不必成為一位導(dǎo)師,只要將基礎(chǔ)的知識掌握牢靠就很好了。關(guān)于其他任何相關(guān)知識,這里有補充手冊。
1.約翰霍普金斯大學(xué)的實用機器學(xué)習(xí)
(https://www.coursera.org/learn/practical-machine-learning)
2.斯坦福大學(xué)的機器學(xué)習(xí)
(https://www.coursera.org/learn/machine-learning)
前兩個課程主要講的是數(shù)據(jù)科學(xué)和機器學(xué)習(xí)的基本知識,從而使你為開始一個真正的機器學(xué)習(xí)的艱難旅程準(zhǔn)備充分。
3.CS231n:用于視覺識別的卷積神經(jīng)網(wǎng)絡(luò) 2017(http://cs231n.stanford.edu/)
(2016的版本在此處
http://academictorrents.com/details/46c5af 9e2075d9af06f280b55b65cf9b44eb9fe7)
這就是你開始要好好學(xué)習(xí)的東西,這是你能夠在互聯(lián)網(wǎng)上找到關(guān)于ML和CV的最好的課程。它不僅會告訴你這個領(lǐng)域的知識有多么深,而且還會為你提供進(jìn)一步調(diào)查的良好基礎(chǔ)。
4.Google深度學(xué)習(xí)(https://www.udacity.com/course/deep-learning--ud730)
這是可選課程,你可以只選擇其中的實用部分。
5.CS224d:用于自然語言處理的深度學(xué)習(xí)(http://cs224d.stanford.edu/)
對于那些想要掌握自然語言處理的人來說這是一個可選課程。不過,它確實很棒。
6.深度學(xué)習(xí)教材(https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/)
這是涵蓋了ML許多方面的實用手冊。
下面包括許多教程和項目,你可以試著去運行相關(guān)程序,了解它們的工作原理,并考慮該如何改進(jìn)它們。創(chuàng)建這個列表的目的就是增加你在ML領(lǐng)域的專業(yè)知識和興趣,所以即使有些任務(wù)對你來說很難,也不要害怕,你可以在準(zhǔn)備就緒時再回頭開始嘗試。
1.來自Kadenze的Tensorflow的簡單實踐 課 程(https://www.kadenze.com/courses/creative-applications-of-deep-learning-withtensorflow-iv/info)
2.Tensorflow教學(xué)集(https://github.com/nfmcclure/tensorflow_cookbook)
3.Tensorflow-101教程集
(https://github.com/sjchoi86/Tensorflow-101)
4.快速風(fēng)格遷移網(wǎng)絡(luò)
(https://github.com/lengstrom/faststyle-transfer)
這將顯示如何使用神經(jīng)網(wǎng)絡(luò)將名畫中的風(fēng)格遷移到任何照片中。
5.圖像分割
(https://github.com/MarvinTeichmann/tensorflow-fcn)
6.使用SSD進(jìn)行目標(biāo)檢測
(https://github.com/balancap/SSDTensorflow)
用于目標(biāo)檢測的最快(也更為簡單)的模型之一。
7.用于目標(biāo)檢測和分割的快速掩碼RCNN(https://github.com/CharlesShang/FastMaskRCNN)
8.強化學(xué)習(xí)
(https://github.com/dennybritz/reinforcement-learning)
非常有用的知識,特別是如果你想“制造”一個機器人或下一個Dota AI。
9.來自Google Brain團(tuán)隊的Magenta項目
(https://github.com/tensorflow/magenta/tree/master/magenta/models)
旨在通過神經(jīng)網(wǎng)絡(luò)創(chuàng)造令人信服的藝術(shù)和音樂項目,結(jié)果非常顯著。
10.用于實時圖像增強的深度雙邊學(xué)習(xí)(https://groups.csail.mit.edu/graphics/hdrnet/)
來自Google最新的用于照片增強的神奇算法。
11.自動駕駛項目
(https://github.com/udacity/selfdriving-car)
想讓你的汽車實現(xiàn)全自動?——這是一個很好的起點。
首先,你必須明白,機器學(xué)習(xí)不是100%精確的——大多數(shù)情況只是一個很好的猜測和大量的優(yōu)化迭代。所以在大多數(shù)情況下想出一些獨特的想法是非常困難的,因為你將花大量的時間和資源來訓(xùn)練模型。所以不要試圖自己找出解決方案——你應(yīng)該搜索論文、項目以及尋找可以幫助你的人。這樣,你會更快更好地獲得經(jīng)驗。
一些可以幫助你的網(wǎng)站:http://www.gitxiv.com/,http://www.arxiv-sanity.com/,https://arxiv.org/,https://stackoverflow.com。
為什么論文不能完全解決問題,甚至有些地方是錯的?
很可惜,但并不是所有的科技人員都想公開他們的研究成果,但他們都需要通過發(fā)表出版物才能獲得資助和成功。所以其中有些只是發(fā)布資料的一部分,或者故意在公式中出錯。這就是為什么總是能更好地搜索到代碼而不是論文。你應(yīng)該把這些論文當(dāng)成一個論據(jù)或者某個問題解決的事實。
你使用這幾個網(wǎng)站http://www.gitxiv.com/,http://www.arxiv-sanity.com/,https://arxiv.org/。第一個網(wǎng)站不僅僅是一篇論文,還包含代碼資源,所以更實用。
云是最適合計算生產(chǎn)模型的。對于學(xué)習(xí)和測試,使用CUDA顯卡的PC /筆記本電腦要經(jīng)濟得多。例如,我用GTX GeForce 960M和690 CUDA內(nèi)核在筆記本上訓(xùn)練所有模型。
當(dāng)然,如果你有云或免費資助的設(shè)備,可以使用它。
在訓(xùn)練中遇到的主要問題是時間,你不能只是坐著觀看訓(xùn)練統(tǒng)計數(shù)據(jù),因此,我建議你使用GridSearch?;旧?,只需創(chuàng)建一組超參數(shù)和模型體系結(jié)構(gòu),然后一個接一個地運行它們,保存結(jié)果就可以了。因此,你可以在晚上進(jìn)行訓(xùn)練,在第二天比較結(jié)果,找到最為合適的那一個。
你可以在sklearn庫中查看這個過程是如何完成的:http://scikit-learn.org/stable/modules/grid_search.html。
陳曉本刊特約撰稿人
李冉冉本刊特約撰稿人