如何在沒有有效指導的情況下學習深度學習?

本人為一名研一學生,本科及研究生均為控制專業。在讀研期間,對深度學習產生了濃厚的興趣,希望可以以此作為研究方向,但有幾個困惑,希望能夠得到各位的幫助。

1.實驗室沒有研究相關方向的老師和學長學姐,不具備請教或交流問題的條件。如何能在這種情況下快一點入門?

2.目前在控制領域深度學習還沒有展現出好的應用前景,是應該儘力將二者結合還是在其它相對成熟的領域尋找具體的研究方向呢?

3.研究生學制只有兩年,希望下學期可以出去實習,在這麼短的時間內應學習什麼知識或技能能夠得到實習的機會呢?

4.感覺自己專業不對口而且起步比較晚,怎樣可以體現出自己的競爭力?


我也是自學的深度學習相關知識,就講講我自己的學習經歷吧,希望對你有幫助。

1. 開始的時候,我當時先自己看了coursera的一些課程,如Andrew Ng 和 Geoff Hinton 開的兩門課程,我覺得這是基礎,必須要看的。

2. 後來,我發現自己學習沒什麼動力,於是糾集了幾個人,搞了一個study group, 我覺得你也可以試試。 那時我們的study group每周會meet一次,主要看deep learning summer school的tutorial (每年都會有,2016年的網址:https://sites.google.com/site/deeplearningsummerschool2016/)。這個真的非常好,既有基礎知識,也有state of the art的內容。 我們meet的時候還會穿插present一些經典的deep learning paper.

3. 再後來,stanford開了cs231n (http://cs231n.stanford.edu/)的課程,我也大概看了一些,覺得很好,鞏固知識又加深理解。尤其是Andrej Karpathy的博客,建議常關注一下,很有收穫。

4. 當然,除了理論知識之外,實際的操練也是必不可少的。對於我來說,我先是把簡單的multilayer perception和rnn 自己推倒公式,然後用MATLAB從scratch實現了一遍。這個真的太有必要了,會讓你發現原來有很多細節你自己以前只是一知半解的,強烈建議這麼做一下。之後我學習了tensorflow,這個有很多不同框架,你可以自己選擇了。

5. 再然後就是讀paper了,這個等你入門了以後自然會知道關注哪些。

再來說一下你對於就業的問題。我覺得證明自己的最好方式就是發相關paper或實習了。

1. 對於發deep learning 相關的paper,我只有一點建議,不要為了用deep learning而用deep learning。你要想哪些問題是傳統方法解決不好的,為什麼deep learning的方法會有優勢。

2. 你說你下個學期要出去實習,這麼短的時間我想不到很好的證明自己在一個新領域的能力的方法。也許做一做Kaggle 或課程上的project?Good luck吧。

不好意思,想到哪就說到哪了,並沒有完全按照你的問題來回答,Hope it helps!


作為一路自學過來的,實驗室沒人懂,導師做dictionary learning的也不懂deep learning,談談經驗:

  1. 入門

首先當然是看Ng的UFLDL教程 - Ufldl,看完這個教程並且做完相應的習題之後,的確是受益匪淺,Matlab語言比較通俗易懂,其次再推薦CS231n: Convolutional Neural Networks for Visual Recognition(說實話還是UFLDL這個中文教程看起來比較好理解一點),做完相應的習題之後基本上是入門啦,有些數學上的概念和推導可能要花點心思查查資料去理解,這裡只要有本科的數學基礎就可以了。

2.進階

上面兩個教程相當於啟蒙,這時候你需要根據你目前的水平補充相關的知識:數學基礎(矩陣分析、凸優化等等)、機器學習。相關的教程可以看看Ng的Machine Learning,推薦李航博士的《統計學習方法》一書,以及PRML Pattern Recognition and Machine Learning 中文版來了這本書,最好反覆看以加深理解。

3.流行的文章/框架/方法的跟進

在進階的同時,多讀讀文章/熟悉DL的框架,DL主要在目標檢測/識別上顯示出了其強大的威力,所以各方面的paper都讀一讀,以及這些paper的方法用各個框架的實現,關於這些資源推薦幾個列表:

  • Awesome deep vision:kjw0612/awesome-deep-vision
  • Awesome RNN:kjw0612/awesome-rnn
  • Awesome torch:carpedm20/awesome-torch
  • Awesome Tensorflow:jtoy/awesome-tensorflow
  • Awesome Caffe:MichaelXin/Awesome-Caffe

之後,你就會有你自己在這些方面的idea,然後就知道自己該學習什麼做什麼。

至於你提及的幾個問題:

問題2:DL在強化學習中已經大展身手,有很多不錯的工作可以follow。老闆最近去NIPS開會回來大吹了一番Boston Dynamics的機器人有星球大戰里的科幻效果(不過他們有沒有用DL來做控制我們無法得知)

問題3:關於實習,最好先瞄準幾個公司,看看他們需要什麼方面的人才,是計算機視覺或者自然語言處理等等。在找實習之前先刷刷比賽(Kaggle/天池)或者能發發文章,以證明你自己在這方面有自己的理解。

問題4:踏踏實實的學習吧,DL的入門門檻真的不高,而且在各個小問題上DL都有爆炸性的突破,多看知乎多讀文章多看別人寫的博客多和作者發郵件溝通就可以了。


根據你的描述,我認為在行走前有必要先思考以下幾個更前置的問題:

一.為什麼想要學?

因為你一直在描述想「做」深度學習,而沒有表明自己想做機器人還是自然語言理解還是對統計與機器學習感興趣。所以很必要問自己為什麼想要學所謂「深度學習」。

1.如果是覺得酷炫,我覺得ok,沒問題,年輕人喜歡酷炫的且實用的技術並投之以熱情很棒。但是這個回答就要再進一步問自己將來的打算與計劃。

2.如果是科研需求,因為現在dl很好發論文啊,那麼我可以給出:先看周志華/李航的機器學習的書,再來跑隨意一個三層mlp模型並自行推導bp演算法,再來看cs231n/udacity的introduction to dl課程來熟悉CNN和RNN並且同時掌握一個深度學習框架。至此,你就應該知道自己想要研究什麼方向,並自行尋找paper閱讀了。

3.如果是為了工作。可以把為了科研的step終止在「至此」以前,並可以把看書換作看網上的blog。這樣是最為你將來好且省時省力的方法。但,結果很可能你在找工作時壓根不管你在MLDL上的知識掌握,畢竟沒有學術成果,且身為碩士,且專業不對口的學生,以趨於0的概率可以找到深度學習研究方面的工作。

二.給自己的定位,兩年規劃以及未來的職業規劃是什麼?

回答這兩個大問題,你的很多問題就不存在了。既然你說你是為了實習和找工作,那麼我就就著這點說了。比如說你對自己的定位超高舞台超大的話,那麼根本不需要有實驗室的人可以請教問題。你一定要成為你們實驗室這方面的第一人,你的討論對象是email後面的paper的作者,開源軟體的作者。像是如果勵志做fullstack AI engineer,那麼快速入門一項新鮮技術的能力一定要有。

1.如果僅僅是為了找14~18k*15的普通碩士演算法崗工作。請不要花時間在dlml上面,直接悶頭苦練演算法刷題就可以了。

2.如果是以想以研究mldl相關進入工業界,拿bat sp級別offer或者進入各公司研究院這種等級。建議還是讀了博士。如果強行碩士,碩士來說沒有頂刊頂會是不行的,那麼參照2,並且嚴格規劃自己的時間,並且放棄實習,發出頂級paper的話再要一封推薦信比什麼實習都強。

3.如果是為了更長遠的未來把自己的職業規劃定位為一個全棧人工智慧工程師,參照科研需求,並關注微博上的學術圈子,關注arxiv新論文和行業動態,並找一個可以學習的實習機會,進入一個可以深造自己的企業。並且在工作中不斷學習。這要求你從此開始培養快速入門新鮮技術的能力,提升自己關注的圈子,查閱資料的技術與調整知識獲取的深度和廣度,提升知識自律性。


對了,關於GPU我說一下。

如果你是為了找工作,可以在一些很小的玩具數據集上訓練模型,關鍵是掌握模型的原理,這樣的話實在沒有GPU,用CPU也湊合。這種數據集的極限大小大概就是MNIST這樣,幾萬個訓練樣本,用CPU跑一遍1-2個小時。

如果是科研,一定要有GPU。現在深度學習經過幾年井噴一樣的發展,已經不是曾經隨便搭個模型做個實驗就能發論文的年代了,大家都在瘋狂地刷結果。再加上現在論文用的數據集越來越大,模型也是越堆越複雜,沒有GPU基本做不了實驗。

舉個栗子,我最近做的一個用深度學習做文本摘要的實驗,訓練數據是400多萬個新聞,每篇新聞幾十個句子。用Tesla K20C,跑一遍模型都要10天左右,整個實驗前後做了兩個月。如果是CPU,至少慢10-20倍,真是不敢想。

------------------------------------------------------------------------------------

首先,要有GPU,這是最低最低的條件了。

書:

深度學習:HFTrader/DeepLearningBook

強化學習:Reinforcement Learning: An Introduction,看第二版。

學習套路:

初級:CNN實現一個圖片分類,RNN實現一個文本項目(NER,情感分類,翻譯);掌握離散狀態空間的強化學習,寫個走迷宮的小程序。

進階:掌握深度學習那本書的所有內容;掌握連續狀態空間下的強化學習(TD-(lambda) learning和policy gradient兩塊)。

然後你很熟悉西方那套理論,可以自行摸索了。


居然遇到做控制的同行,嘗試回答一下問題(1)和(2)吧. Deep learning中和控制結合比較緊密的應該是deep reinforcement learning (DRL), 這也是目前很火的一個領域. 然而, DRL在連續狀態空間的應用還處於摸索的階段. 這裡面應該有不少坑可以填. 但是跑DRL需要大量的計算資源(估計這也是為什麼很多DRL的文章來自於Google Deep Mind, 一般人玩不起). 所以, 建議可以和有計算資源的老師合作, 利用DRL解決你目前遇到的control問題. 這樣子你能得到兩方面的指導. 比如Deep Mind就用DRL去減少data center的能耗(雖然我覺得可能就是sys ID + MPC啦).

從自學的角度來看, control裡面用到的數學應該是足夠你去理解deep learning的. 如果你上過intelligent control, 你可能也會發現神經網路這東西早就被control的人玩過了, 但是沒法分析系統穩定性, 就此作罷了. 可以嘗試自己實現一遍像recurrent neural network, self-organizing map這類經典的模型, 尤其是recurrent neural network的back-propagation through time (BPTT). 當然, 神經網路在控制裡面的應用還是相當原始的. 有很多新的trick, 新的概念可以通過學習一些開源框架來習得(tensorflow, torch....). 目前來看, DL這個領域非常active, 各種開源代碼層出不窮, 上手還是挺容易的. 早進去的並不見得有太多的優勢. 所以, 起步晚一點不是什麼問題.

以上是自己自學deep learning中的一些看法, 共勉.


確定自學方向的原則

確定自學方向,實際是個優選法問題。方向對頭,少走彎路,容易成功。確定自學方向,應該注意如下幾條原則。

一是同步效應原則。即盡量做到專業選擇與工作業務同步;奮鬥目標與興趣愛好同步;發展方向與社會需求同步。這樣做容易使主觀與客觀相統一,產生共振。

二是優勢積累原則。即根據社會的實際需要和自己的實際情況,確認自己的優勢和長處,然後,重點發展自己的優勢和長處。需要注意的是,你自己最擅長的未必就是你的優勢,還要看社會現實和社會發展的實際需要。相對的高起點和優勢積累,有利於短線成才。

三是「定向爆破」原則。即注意發現和選擇能充分實現自我價值的「冷門」,努力奮鬥,爭取幾年內大見成效,多年後一鳴驚人。

四是量力而行原則。自學不怕起點低,但也不要好高騖遠。應該著眼長遠,立足當前。爭取春有耕耘,秋有收穫。碩果既可給你帶來喜悅,鼓舞你的鬥志,又往往會改變你的境遇,使你從泥濘的土道走上柏油馬路。


1.實驗室沒有研究相關方向的老師和學長學姐,不具備請教或交流問題的條件。如何能在這種情況下快一點入門?

研究生要學會的第一項本領就是自己研究,你的課題很可能你的導師和學長學姐都不了解,你要做的是有問題了通過網上檢索,閱讀文獻,動手實踐,來自己悟道,而不是指望別人來教你。將來你畢業後就職也是,企業不會看你肚子里有多少墨水,你現有的東西不一定能用到企業。所以企業更看重的是你解決問題自我學習的能力,而研究生正是培養這種能力的時期。

2.目前在控制領域深度學習還沒有展現出好的應用前景,是應該儘力將二者結合還是在其它相對成熟的領域尋找具體的研究方向呢?

控制領域的深度學習有很多好的應用啊,比如工廠的機器人控制,高危操作的機器人控制,無人駕駛的研究,建議多讀最新的人工智慧的文獻。

3.研究生學制只有兩年,希望下學期可以出去實習,在這麼短的時間內應學習什麼知識或技能能夠得到實習的機會呢?

急著去實習不一定是個好選擇,充實自己,靜下心來花時間提高自己,等畢業後找一份高大上的工作,要比急著去實習導致學藝不精就業不理想要划算的多。任何事情沒有捷徑,腳踏實地最重要!

4.感覺自己專業不對口而且起步比較晚,怎樣可以體現出自己的競爭力?

比別人更努力。


看目前大公司裡頭的深度學習工作都在做什麼,對應去掌握就好,參考上市公司深度學習演算法研發 實習生心得


推薦閱讀:

什麼是創造力,AI可以獲得嗎?
如何評價谷歌剛推出的 AutoDraw?
深度學習和人工智慧之間是什麼樣的關係?
深度學習的教學和課程,與傳統 CS 的教學和課程有什麼區別?

TAG:深度學習DeepLearning |