手機答題,可能條理不是很清晰。

這個我相對比較有經驗,碩士期間一直都是一張1070單打獨鬥來著。

主要就是避免和大牛們搶過於熱門的領域。盡量選擇訓練集20w以內的領域,相關sota中使用的模型盡量不超過resnet50。基本單卡是夠用的。

盡量避免最熱門的那幾個領域,分類檢測分割這種數據集比較大很難做。根據經驗,一般通用領域的數據集都比較大,而對應的細粒度領域裡,數據集就很小了,比如vehicle detection,pedestrian detection之於通用檢測,face parsing,clothing parsing,salience等之於segmentation。

如果連顯卡都沒有,還可以做reranking,indexing,feature fusion,slam等等更偏向於用傳統方法去解決的領域。

其實大家最需要的是對於某個領域的調參直覺,這種時候,就需要自己寫腳本,充分利用時間,比如每天睡覺之前,預估一下第二天到實驗室大概夠跑多少組實驗,腳本跑起來,基本把日誌和對應的超參都設好。第二天就可以再仔細分析了。合理數量的實驗,加比較充足的思考,還是可以學會很多調參經驗的。

再進一步的話,就是多看論文,我一直覺得論文其實是最最重要的,閑的沒事幹就看論文,跑實驗過程中就看論文,充分利用所有時間刷論文,初學者而言,五十篇論文加三五篇復現就足以對某個領域有較為深入的了解了。如果看完五百以上論文,其實很多領域之間都能很好地串起來了。這也是一個極為重要的避免做很多無用實驗的手段。


現在Google Colab上有免費的TPU啊,知道TPU有多快么?常規訓練一個Resnet50隻要10個小時,和8卡V100的速度相當。

所以你需要的只是一把梯子和一張信用卡(用於Google Cloud賬號)

當然Colab的TPU有些坑要爬,說幾個最關鍵的,以免大家浪費時間:

1. 除了Mnist之類可以緩存的小數據集,必須用Google Cloud Storage,否則IO會是瓶頸

2. 有些ops被硬體限制了,自定義ops肯定都不行了,因為backend不是CUDA,Tensorflow自己的很多API也不能用,比如tf.images裡頭的很多API,所以ROI Align之類的ops都無法實現,也就是Two stages的物體檢測演算法都無法實現(官方也只給出了retinanet的實現)

3. Notebook經常斷線,我準備寫個瀏覽器腳本來實現自動重連。

4. Tensorflow

補充一下:要是覺得Colab不好用,直接花錢用TPU也不貴,搶佔式的TPUV2 8核,一個小時只要1.35美元,性價比比GPU高太多了,想跑超大規模的模型,還可以選擇TPUV3,TPUV2 32核、 128核、256核。。。

20190102更新:發現最近官方復現了Mask RCNN,使用高級API實現了ROI Align。

另外說明一下為什麼必須用GCS:TPU的運作方式和GPU不同,GPU是直接掛載到VM上,然後你就可以像本機使用GPU一樣用就好了,TPU是有TPU Server的,VM並不能直接訪問TPU,而是在VM上編譯好XLA,然後丟給TPU Server,所有的數據讀取、預處理、和TPU通訊等,都是在TPU Server上運行,所以你如果把數據放在VM上,IO必然是瓶頸。這也是為什麼不管你跑多大的模型,Colab配給你的VM性能都是夠用的。


基本告別state-of-the-art,只能玩玩「相對提升」。

玩相對提升就得做得讓別人心服口服,把所有的變數都控制好,只更改自己提出的的那一點,其實就是我們經常說的ablation study。

這個樣子提升上一大截,再把代碼開源了,別人才會相信這個方法真的有提升。

就算這樣,審稿人還是有可能會懷疑在更多的數據/更大的網路上性能提升是否顯著,不過那也沒辦法了,公道自在人心吧。


寫申請材料之餘答一波,一言概之,資源不夠時,我的策略就是去弄到更多計算資源

最早在浙大的時候,基本只有手頭一台 MacBook,跑跑 SVM 和 SIFT 就是極限,那個時候 Deep Learning 在國內還不被重視,本想找個實驗室去套波資源,但在紫金港整體以 Graphics 為主的氛圍下,加之粥少僧多,本科生是基本拿不到資源的。後來來到了加拿大,厚臉皮套到一位做 CV + CG 的老師。正逢他開始探索新方向,大手一揮就買了 8 張 Titan 回來。感謝當時帶我的師兄,我終於有機會真正入坑 CNN。

當時的研究基本是在 Caffe model zoo 上 finetune,實驗室這點小資源根本不夠訓練 imagenet 這種龐然大物。中間有很長一段時間沒有進展,後來覺得不行,感覺這種有 idea 無處嘗試的感覺很難受,於是就在知乎上套了一波 @Naiyan Wang,得到了去圖森加州分部實習機會。在圖森,顯卡再也不是瓶頸,我也第一次見識到企業做 deep learning 的方式。實習期間認識了很多優秀的同事,實驗了很多想法,學到了很多 lab 里學不到的知識,感覺自己終於初窺門徑。

結束圖森實習後,腦中的靈感一個接一個,同時也深刻意識到計算資源的重要性。可實驗室里顯卡有限,而且和學長學姐協調。幸好圖森給的工資剩下不少,於是一咬牙,就自己攢了顯卡和機器。這是個肉疼的選擇,但事實證明這也是一個非常正確的選擇。有了穩定充足的計算資源後,整個科研周期大大加快,很順利的發出了幾篇我自己滿意的工作。

去年申請行情水漲船高,不幸申請失敗了,遂給商湯還有麻省理工的一位新晉教授遞交了簡歷,表明實習願望。實際證明,這又是兩個非常正確的選擇。在商湯,利用充裕的計算資源嘗試了很多新想法來解決現在工業界的痛點。在麻省理工,燒了老闆十幾萬刀的 cloud credits 來做一些之前完全沒有機會做的 idea。終於,可以厚臉皮的說自己在 deep learning 這塊已經略有小成了。

回觀自己一路,基本就是 找資源 -&> 提升自己 -&> 找更多的資源 這樣一個螺旋上升的過程。至於計算資源有限時如何冷啟動?找實習應該是個不錯的選擇。


在校學生就想辦法進有"真正"做深度學習實力的實驗室;也工作的人就想辦法跳到這方面的崗位上。

這些不是重點,重點是你怎麼學、怎麼提高對問題和模型的理解?這裡的誤區是「計算資源有限」。即便在大公司和大實驗室,計算資源都不是無限供應的。很可能的情況是你要和其他組其他同學和同事去搶。

所以關鍵是,你怎麼高效地使用有限的計算資源。很多同學容易反的錯誤是一上來就從Github上下載個模型來跑。跑著跑著就變成了調參,最後模型的性能是上去了,但啥也沒學會。

正確的姿勢是要搞清楚這個模型或方法的關鍵是什麼?和其他方法比有什麼優點,解決了什麼問題?但更重要的是搞清楚它不能解決什麼問題

研究一個模型或者方法的過程,往往最重要的是找到它不能做什麼。一個模型或者方法不可能什麼問題都解決的(參考no free lunch)。用這個模型的過程,其實就是要發現這點;搞清楚了這點,就知道了它的適用邊界,就能更有效的在有限計算資源下高效的使用它,而不是把資源浪費到它不適應的情形和數據上。

所以高效使用有限計算資源的方法就是反著用,用有限資源去找到模型的適用範圍的邊界。這個比重複的去在已經反覆被證明適用的範圍(數據、場景)上浪費有限資源獲得的提高要大得多也快得多。

更進一步,如果有辦法改進這個模型,並把它的適用邊界進一步擴展,那麼恭喜你,你就真正掌握了這個模型了。


推薦閱讀:
相关文章