iT邦幫忙

第 11 屆 iThome 鐵人賽

7
Google Developers Machine Learning

How to Train Your Model 訓模高手:我的 Tensorflow 個人使用經驗系列文系列 第 31

【31】鐵人參賽心得與那八個月在家自修的日子

Hi 我是 Jason,不管你是否懂 Machine Learning 或者前面的文章都沒看過直接進來看心得,都謝謝你來看我的文章!以下心得我會分成參賽、寫作和我自己正在走的工程師人生道路心得,希望讀者們不吝指教。

關於鐵人參賽心得:

終於完成這次的鐵人賽文章,這是我第二次參加鐵人賽寫文章,第一次參加是在兩年前的比賽,當時報名了 Data Technology 組寫了一篇和 R 語言有關的應用,很榮幸拿了獎,因為有第一次的參賽經驗,我非常知道當天寫文章是有多緊急多混亂,也因此在看到這次比賽後,很早就報名了(8/19報的,當時報名人數還是個位數XD),也因為很早報名的關係,所以很早就開始在累積文章內容跟規劃 github 原始碼,整個內容的規劃包含寫作大該花了 50 天,也因為提早寫文章的關係,這次鐵人賽參與起來格外輕鬆,比賽時間也固定有個人的休閒活動,像是去健身房運動、追劇和打電動等XD

想對之後有興趣參加鐵人賽的讀者說....相信我,提早準備是對的。

關於寫作心得:

目前網路上能找到的技術好文章,很大一部分都是國外英文文章和大陸人寫的,台灣人的技術文章相比甚少,而其中帶有個人觀點的技術文又更是難能可貴。一個人要寫出具有中心思想的文章,要面對的挑戰很多,最基本要了解技術原理,再用自己的話來解釋,能夠勇於發表自己想法的文章是非常有價值的!而我自己也是抱持這個心態在寫作,尤其後面幾篇的優化篇,都是自己獨特的使用心得,希望能幫助後面的人能夠更快理解自己所寫、所用的語言和工具。

能在網路上寫 0 到 1 的技術教學文是很好,但更好的是從 1 到 N 的個人見解文。

八個月的自學與工程師人生:

我的背景可以先看看兩年前寫的這篇,2018年初,參加完鐵人賽後,離開了待了快三年的前一家公司,正式決定走往 Machine Learning 這條路,由於之前的工作經驗,自己比較擅長的領域是軟體工程,跟一點點的資料分析,但要成為一位優秀的機器學習工程師,只會寫程式當然不夠,所以我有了以下的規劃。

三、四、五、六月

複習大學時的數學知識,我從交大開放式課程把微積分(一)(二)重新學了一遍,除此也把線性代數、機率與統計一併學完,這四個月專心學數學,讓自己讀 Paper 時,不至於看到一堆公式就頭暈。

七、八月

我從 Udemy 買了 Lazy Programmer 系列課程,之所以喜歡他們的課程是他們注重原理,不會只教你一些 API 套一套,甚至細到 Python可刻神經網路的地步,工具用 tensorflow 和 theano 來教學,雖然硬,但是收穫不少,官網也有技能樹給你參考修課順序。

九月

懂了原理和工具後,再來就是實作經驗,我自己參加了 Kaggle 比賽和 T-Brain 比賽,不過成績都沒有很亮眼,但卻在討論區學到了不少知識,除此之外也動手訓練一些 Toy Project,像是風格移轉寶可夢練習,雖然這些範例網路上幾乎都有人做過,要復刻並不難,但你必須很確定自己真的了解其中的原理!

十月

準備面試,我花了一個禮拜面試了六間,找到了一間願意錄用我的公司,對於一個半路轉領域的我來說,我覺得自己很幸運。

這中間經歷了什麼挫折?

1. 學東西學到懷疑人生:剛學習 Machine Learning 時,很可能短短幾句話中出現 10 個專有名詞,結果你有 7 個都聽不懂...,當時打擊很大,也到了網路上發文詢問,網友們的回覆多數都也都提供了一點方向。

2. 不清楚實際 ML 工程師的工作內容:由於不清楚工作內容,所以面試時變得很難準備,我當時面試時就吃了不少虧(不太知道公司會需要怎麼樣的人),我覺得能夠先知道這點對找工作很有幫助,底下我會跟大家介紹我目前的工作內容。

3. 來自...家人的壓力:在一開始決定在家自修時,家人大多沒什麼意見,甚至會想說平常都在台北(我桃園人),現在每天都能見到很新奇,但隨著時間推移,幾個月後,家人開始擔心你太久沒有工作是不是沒有競爭力,附近鄰居也會開始好奇怎麼成天窩在家,這的確很麻煩,但我自己很清楚自己要的是什麼,也很高興自己當時有堅持著。

4. 面試時,被打槍不夠深入:沒錯...以我上面的自學歷程來說,離一個成熟的機器學習工程師還差很遠,也因此我覺得自己很幸運後來有轉成功,但如果想要被認同,我認為就是多訓練模型,多觀察網路上別人的模型是怎麼實作的,當你擁有幾百次以上的訓練經驗、有多次的採坑經驗,慢慢會對設計模型有一定的感覺。

成為 ML 工程師之後都我在做什麼

1. 收集數據、清潔資料:多數時候開放資料集都不會是剛好符合你的需求,以臉部辨識為例,網路上能使用的公開數據集有MS-Celeb-1M,但是當今天你想辨識台灣地區的人臉時,這樣的數據集效果並不好,因此可能需要自己寫爬蟲去抓資料來標記,不定期寫script是家常便飯。

2. 挑戰優化:ML 在學術和工業之間有很大的差別,一旦你負責了公司某項 AI 產品,都有可能被要求產品必須要達到某些門檻,例如模型限制在 10 mb 以下、單次推論要在 50 ms 以內等難題,你要思考的東西絕對不只有訓練而已,盡可能去了解作業系統的原理才有可能優化。

3. 與其他工程師共事:有時候全公司可能只有你自己最了解,你要學著如何將你做的東西口語化敘述給同事聽,另一方面,你有必須對同事使用的工具語言有概念,以我為例,我也必須額外花時間學如何使用 Linux, Docker, Golang, AWS 上的服務等,才有辦法跟同事討論問題。

4. 適應新工具:以我自己用的 tensorflow 為例,最新的 2.0 已經正式推出了,代表我也必須多花時間補足這方面的知識,像是改用 2.0 的寫法更新現有的模型,另外,如果訓練環境一定要自己搭建,每次的大更新都讓人心累(我自己是用 Nvidia 的 Docker,就輕鬆不少)。

5. 調參數、換模型:當訓練模型變成你的工作後,你必須面對模型不收斂、訓練結果變成 nan等各種詭異的問題,這會花不少時間去分析問題,如果有時程壓力更是煎熬!畢竟模型不 work 的原因很多種,這很需要良好心態,除了參數以外,也要嘗試不同模型,同一個問題用 VGG、ResNet、MobileNet、SqueezeNet 的效果都不同,也花了不少時間在更換模型。

如果你也跟我一樣,有打算從事 ML 相關產業,希望我上面的經歷能給你一些啟發,持續性的努力是必要的,以上就是我這次的心得文,謝謝大家!

最後是 30天滿滿的 commit 圖XD
https://ithelp.ithome.com.tw/upload/images/20191009/20107299ZGs9C1YltB.png

30天大雜燴

基礎篇:
【01】前言、先備技能需求以及環境介紹
【02】基本功:將graph存成tfevent,使用tensorboard瀏覽
【03】新手常誤解的用法,tensorflow 多個 graph 處理
【04】tensorflow 到底該用 name scope 還是 variable scope
【05】tensorflow 的 convolution 方式好多種,我該用哪個...
【06】tensorflow 細看存檔:checkpoint 篇
【07】tensorflow 細看存檔:save pb 篇
【08】tensorflow 細看存檔:load pb篇

Tensorboard 篇:
【09】從 tensorboard 來觀察:batch_normalization 和 dropout 的建模篇
【10】從 tensorboard 來觀察:你容易忽略的 batch_normalization 原理篇
【11】從 tensorboard 來觀察:dropout 原理篇

資料集篇:
【12】tensorflow 資料集應用:製作 tfrecord 篇
【13】tensorflow 資料集應用:讀取 tfrecord 篇
【14】tensorflow 資料集應用:利用 TFRecordDataset 達成 Data Augmentation 篇

訓練篇:
【15】tensorflow 訓練技巧:control_dependencies 篇
【16】tensorflow 訓練技巧:用 piecewise_constant 達成可變動 learning rate 篇
【17】tensorflow 訓練技巧:運用 GraphKeys.UPDATE_OPS 來更新 Batch Normalization 權重篇
【18】tensorflow 訓練技巧:模型如何輕鬆又方便地做 regularization 篇
【19】tensorflow 訓練技巧:用 tf.GraphKeys.TRAINABLE_VARIABLES 評估模型效能篇
【20】tensorflow 訓練技巧:觀念一次就搞懂 Gradient Descent, Momentum, Adagrad, RMSProp, Adam 五種 optimizer 差異篇
【21】tensorflow 訓練技巧:使用 tf.summary 搭配 tensorboard 儀表板篇
【22】tensorflow 訓練技巧觀念混合運用篇

優化篇:
【23】tensorflow 模型優化手術:ensure_graph_is_valid 篇
【24】tensorflow 模型優化手術:把一般輸入改成 pre processing 輸入篇
【25】tensorflow 模型優化手術:每次推論都要對 training node 設 false 很麻煩,如何鎖住 training node 篇
【26】tensorflow 模型優化手術:推論時經過 dropout 很多餘?如何去掉 dropout layer 篇
【27】tensorflow 模型優化手術:除去冗贅的 Merge、Switch 運算節點,模型再剪枝篇
【28】tensorflow 模型優化手術:給我折下去!模型 folding batch normalization 篇
【29】tensorflow 模型優化手術:優化前 vs 優化後評比篇
【30】tensorflow 模型優化手術:移動端的部署 tf.lite 篇

Github鐵人賽原始碼(master)


上一篇
【30】tensorflow 模型優化手術:移動端的部署 tf.lite 篇
系列文
How to Train Your Model 訓模高手:我的 Tensorflow 個人使用經驗系列文31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
阿展展展
iT邦好手 1 級 ‧ 2020-02-27 20:50:42

大推 能在網路上寫 0 到 1 的技術教學文是很好,但更好的是從 1 到 N 的個人見解文。

恭喜完賽 /images/emoticon/emoticon32.gif

我要留言

立即登入留言