打造第一個深度學習模型

用 Tensorflow+Keras 試試看

從早期有 theano, caffe/caffe2, Torch 到現在變成主要有 Tensorflow, PyTorch, mxnet, PaddlePaddle 等模型框架 (大多背後對應有主要的支持或採用者: Google, Facebook, Amazon, 百度等). 各有特色與優缺點, 在台灣最常遇到採用 PyTorch 或者 Tensorflow+Keras 的深度學習專家.

如果目標設立在應用別人已經創造的模型, 採 Tensorflow+Keras 應該是門檻最低的, 同時很可能 99% 的深度模型相關問題都可以在Open Source 或是社群中找到可以參考或解惑的資源.

舉例要設計一個多層神經網路 (深度模型) 來進行預測房價, 假設我們打算從實價登錄, 在同一區域(例如: 台本市東區) 取得歷史紀錄中 [交易年月, 總面積, 主建物, 型態, 屋齡, 樓別/樓高, 建物格局, 管理組織] 等欄位 來預測 下一個月某房子的總價.

如上圖, 有些資料是數值型態, 直覺容易處理; 但是諸如[管理組織, 樓別/樓高, 建物格局] 就需要動點腦筋進行資料預處理. 先忽略此重大細節.

我們已經用 pandas 把資料預處理成一個取名為 trainDF 的 DataFrame (可想成一個 Excel 表格), 而對應的總價我們以 trainY 來記錄; 也切割出一些資料作為測試驗證用, 命名為 testDF, 對應的總價我們以 testY 來記錄 .

我們就可以輕易寫出一個深度模型:

要多少層與每層要多少神經元, 例如: Dense(64, ...) 代表該層有 64 神經元, 是所謂的超參數, 是要自己設定的, 通常這代表大量的嘗試錯誤方能找到, 所幸 keras 提供了 keras-tuner 這工具, 能幫助我們搜尋較優的超參數.

另外 activation='relu', 代表要用 ReLu 作為 激勵函數. 激勵函數常用的也有許多選擇, 如何選我們暫且不談. 是否感覺現在的工具大幅降低應用深度學習的門檻?

圖示: 以Tensorflow Keras 設計一個深度模型

輸入層我們用shape[1]來自動取得輸入層參數的數量; Dense 代表 全連接層 (full-connected); 最後輸出是單一值 Dense(1), 代表迴歸

可以任意多加幾層, 只要於 model 內多加幾行 layers.Dense(...).

儘管比較實用的模型通常不是如此簡單(常有百層以上, 且連接相當複雜的模型), 通常也無須重複發明輪子, 大多數性能較佳的 SOTA模型, 都容易找到公開程式碼可以參考, 很多甚至只要調整一點超參數以符合數據集即可運作. 如果沒有找到可參考的模型程式碼可參考, 以 Tensorflow + Keras 亦可大幅降低門檻.

要開發 Deep Learning 相關應用, 如果要解決的問題是已經有論文研究過的, 其挑戰點我個人的看法是: 先試用已經公開發表的模型, 微量的調整模型以符合數據, 再把心力放在:

  1. 收集與標示更多的數據, 例如上述的 trainDF, trainY; testDF, testY 很可能是真正決定專案成敗的關鍵, 我們在資料預處理討論.

  2. 提升訓練模型的能力 (包含調整超參數)

很可能就可以取得相當優異的性能以滿足專案需求.