2019年4月12日 星期五

[DL] Deep Learning通用觀念整理


Deep Learning是一種從高維歸納出規則的其中一個
工具, 本文介紹基本神經網路概念與調參方式, 以DNN為例






神經網路 , layer, loss function, loss score, optimizer, 更新權重 流程圖




  • model.fit : 以batch_size樣本批次輸入訓練資料, 跑完全部資料算一次epoch, 每次batch依照該次loss計算相關權重的梯度, 更新權重
  • Backpropagation:得到loss後往前用連鎖律微分, 並非一層層往前走, 再依照learning rate修正gradient
  • GD看完所有資料才走
  • SGD隨機選樣本看
  • learning rate 找最低點的時候一次要速度, 不可過大或過小
  • Batch size取決於GPU


Adaptive 表示會依照情況調整learning rate

Activation Function
如果沒有像relu(非線性函數)的啟動函數, dense只會由兩個線性運算組成, output = dot(W, input) + b, 因此該層只能輸入資料的線性變換, 只有所有可能的線性變換集合, 這樣不利於多層的轉換表示 , 添加在多層也不會擴張到其他假設空間


Softmax會經過exp計算放大結果,  使結果會很像[0,0,1] 容易找出我們要的答案

Loss Function



調參方式









常見問題 
  • 一般結構性的data 使用傳統ML會有更好的結果
  • Dense層為全連結層, 所有的特徵都會去看, 與卷積層只看部分特徵不同, 適合輸入特徵中沒有特定結構, 例如輸入為一些屬性列表, 也常用於最後的分類層 
  •  Overfitting 處理方法 :
  1. training data太少 or data有bias減
  2. 縮減神經網路層, 通常由少的層數開始慢慢往上加
  3. weight regularization(L1 or L2)
  4. dropout 
  5. 增加更多資料data augmentations or pre-trained
  6. data augmentations : 變形(rotation.scaling.blur), pixel變化, GAN生成, image-combination-based)
  • Dropout較適合深的神經網路, 正規化適合淺的神經網路, Dropout是比較常用的方法, overfitting才使用, 不要一開始就使用
  • Batch Normalization 的使用時機:遇到收歛速度很慢,或梯度爆炸等無法訓練的狀況時可以嘗試, 在一般使用情况下也可以加入,用來加快訓練速度,提高模型效能,一般更深的網路可以使用。
  • Dropout正規化可以混合使用
  • sigmoid 於多層神經網路, 微分回去的時候容易產生梯度消失, 很小值一直乘就會歸0, weight就會容易更新, 必須做batch normalization, 通常在Active function 前面
  • RMSE 是MSE開根號, RMSE EX預測身高, 算出的loss單位也是身高, 較常用
  • 處理非線性問題 >> 引入多重神經元, 增加層數, 非線性激活函數
  • Deep Learning是從過去資料學習的, 過去沒有相關資料, 演算法也找不到, 可以解決問題還是很有限
  • Deep Learning自動化特徵工程, 但不是每個問題都可以解, 圖形處理很直接可以使用, 因為效果很好
  • softmax 正常狀況下, 不會有每個類別信心值類似的狀況 
  • 資料量大就直接丟deep learning, 太少就使用feature engineering, 或產生多點data
  • 資料量少時, 應該降低隱藏層數, 避免overfitting
  • 分類類別過多, 就該讓模型變更複雜, 也適用於不知道model需要多大時, 就故意讓他overfitting, 找出最大的model,  找出太小和太大的model才有辦法進一步找到
  1. 增加更多layer
  2. 讓每一層更寬
  3. 訓練更多週期
  • 驗證是要注意驗證資料代表性是否包含全部類別, 應對資料進打散, 時間資料就不可打散, 驗證資料與訓練資料也不該出現一樣的資料
  • 分類資料平衡可使用accuray與AUC當成評估標準, 類別不均則使用precision recall f1-score作為衡量表準 


以下是實作中訓練技巧
  • 建立多個NN(utils.auto_train >> max_loop)
  • 動態調整learning rate
  • 20 model 預測出來的做多數決 >> 決定哪個答案
  • 前處理完的資料就先存成csv or 進DB, 不同model程式讀進來處理即可
  • 資料量少可以使用K-Fold, 多次驗證取平均, 判斷行好壞
  • 建立高興能深度卷機神經網路需要使用殘差連接. 批次量正規化. 深度可分離卷積 
  • 選擇自動調參套件數搭配使用 EX: Hyperopt 和 Hyperas 
==============以下是可以參考的資料==============

Ref: 

沒有留言:

張貼留言