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
Softmax會經過exp計算放大結果, 使結果會很像[0,0,1] 容易找出我們要的答案
Loss Function
調參方式
常見問題
- 一般結構性的data 使用傳統ML會有更好的結果
- Dense層為全連結層, 所有的特徵都會去看, 與卷積層只看部分特徵不同, 適合輸入特徵中沒有特定結構, 例如輸入為一些屬性列表, 也常用於最後的分類層
- Overfitting 處理方法 :
- training data太少 or data有bias減
- 縮減神經網路層, 通常由少的層數開始慢慢往上加
- weight regularization(L1 or L2)
- dropout
- 增加更多資料data augmentations or pre-trained
- 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才有辦法進一步找到
- 增加更多layer
- 讓每一層更寬
- 訓練更多週期
- 驗證是要注意驗證資料代表性是否包含全部類別, 應對資料進打散, 時間資料就不可打散, 驗證資料與訓練資料也不該出現一樣的資料
- 分類資料平衡可使用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:
- 台灣人工智慧學校
- 速記AI課程-深度學習入門(ㄧ)
Deep learning 深度學習必讀:Keras 大神帶你用 Python 實作
沒有留言:
張貼留言