【原】深度學習的一些經驗總結和建議 | To do v.s Not To Do

Charlotte77發表於2019-07-22

前言:本文同步釋出於公眾號:Charlotte資料探勘,歡迎關注,獲得最新干貨~  

  昨天看到幾篇不同的文章寫關於機器學習的to do & not to do,有些觀點贊同,有些不贊同,是現在演算法崗位這麼熱門,已經不像幾年前一樣,可能跑過一些專案、懂點原理就可以了,現在對大家的要求更高,尤其工程能力更不可缺少,只跑過一些iris鳶尾花分類、啤酒與尿布、貓狗分類等的同學需要再提高提高,因為競爭太激烈了,我在這裡結合我自己的經驗總結一下吧~

 

To Do

  • 做專案時,邊蒐集資料可以邊用已經蒐集好的少部分資料跑模型。不用等到所有資料都蒐集好了再跑。

  • 不知道什麼演算法合適,可以直接把所有的演算法都跑一遍,看效果再選擇,多跑幾個應用場景你就知道什麼演算法適合什麼場景,什麼資料對不同的演算法會有什麼影響了。

  • 不知道什麼引數是最佳引數,可以用random search或者grid search自動搜尋最佳引數組合,有經驗以後對於每個引數的大概範圍心裡會有個數。

  • 一定要練習工程能力,只會調參的demo俠現在很難找到工作啦。

  • 模型復現和刷題是很好的鍛鍊工程能力的一種方式。

  • 刷題不要追求數量,要總結不同型別的題目的經驗,並結合之前的業務中,看能不能優化之前的業務邏輯。

  • 模型復現可以給自己規定一個任務,譬如在一個月內,把某篇論文的Tensorflow實現的程式碼,復現成Pytorch或者PaddlePaddle等其他框架的程式碼,不是閒著沒事做,而是模型復現可以迅速提高你對框架的熟悉度和程式碼能力。

  • 模型復現的過程中,最難的是寫新的op和模型效果(精度和速度)的對齊。這可能很折磨人,但是收穫也很大。

  • 如果要做新專案,可以先看看有沒有預訓練模型,可以快速做遷移學習的,如果有,那麼整體的模型週期會快很多。

  • 如果跑完演算法,一定要有一個成品的形態,最好不要只做演算法這一塊,譬如跑完模型將其打包封裝成服務介面(服務端和移動端等),達到讓人可用的狀態最好。

  • 領導不想知道過程,只想知道結果。沒有可用的東西和視覺化的結果,他會覺得你啥也沒做。

  • 上條只針對部分領導。

  • 沒有人會比你更關心模型的引數調整導致模型的效果提升了0.1%還是1%,大多數人,尤其是leader、或者leader的leader,只關心它有什麼用,真實場景的效果好不好。

  • 可以多和同事、同行等互相交流,參加線下的學習會、交流會等,可能會有意想不到的收穫。

  • 學習新的演算法,先把程式碼跑起來再說,再來看理論、數學推導、自己手寫實現等。

  • 除了調參以外,還需要關注關注部署上線、模型壓縮等方面的內容。

     

  

Not To Do

  • 訓練資料不要太乾淨了,因為真實場景的資料往往和實驗資料差很多,嘗試加點噪音吧,做些資料增強和mixup等。

  • 論文裡的效果不一定能復現。可以嘗試論文的思路,但是不要太過相信論文裡的效果資料。

  • 做一個專案就好好深挖,不僅僅要做出來,還要不斷的優化,不然每個專案都只是跑通了,效果還行,沒必要寫到簡歷裡,不如寫一個做的很深入,嘗試了各種優化方法並有效果提升的專案。

  • 不要因為覺得自己數學不好就先去惡補數學,買一堆高等代數、數學分析、實變函式、複變函式等純數學書,如果一定要看,推薦《線性代數》《資訊理論》《凸優化》《數值分析》。

  • 上條推薦的四本數學書也不用全看,凸優化太厚了,其他三本可以在自己有大塊時間可以刷書的時候,規定自己在一個月或者幾個月的時間迅速刷完。線性代數是基礎,數值分析是優化方法(也不用全看),凸優化與資訊理論與目標函式相關,涉及機器學習的很多理論知識。

  • 不要覺得你訓練的模型效果多好就多麼厲害,除非是做科研、打比賽、工業界更關注能不能落地,能不能應用產生價值,不要自high = =

  • 如果把你的演算法封裝成服務了,也要做做壓測,學習下工程方面的內容。

  • 最好的狀態是,工程能力強,又懂演算法,兩者結合,效果更佳。不要只注重某一方面的提升,多關注下自己的程式碼風格,不要讓你的同事code review的時候犯難 - -

 

 

  暫時想到這些,每條都是試錯後的血淚教訓的總結T_T,有補充的歡迎大家在下面留言~

 

相關文章