---
# System prepended metadata

title: 學習相關的技巧

---

>在模型訓練時，判斷模型問題出在哪很重要，本章節整理了碰到下列情況該如何調整

### 訓練模型三步驟
step1:function with unknow(尋找合適函數)
input為feature值，
step2:define loss from training data(計算損失值)
step3:optimization(找到恰當的優化器(演算法))
![image](https://hackmd.io/_uploads/H1r1sSv6T.png =80%x)

**上圖來自李弘毅教授之教學影片**
### 判斷模型訓練失敗的可能原因
>紀錄training data的loss值這很重要!!!
>[name=澤]

下圖為判斷圖
![image](https://hackmd.io/_uploads/HJuIsSDTp.png =80%x)

１．先判斷你的training data的loss值是大還小
２．在判斷你的模型在 testing data上的學習狀況
若是在訓練資料上loss太大有可能是model bias 或是optimization的問題
**那該如何判斷是哪種可能呢?**
## model bias VS optimization
**model bias** 在你的模型太過簡單時可能會發生，EX:今天帶入未知的parameter(參數)到function，但function set當中卻沒一個function可以令我們的loss值降低，簡單來說就是白做，解決方法就是想辦法讓你的model更複雜，你可以透過輸入更多特徵值，或是增加更多的layer ,nerual，來解決這類狀況。
**optimization** 舉個例子，我們在訓練模型時大多都會用到gradient descent(梯度下降法)，他確實有找到一個function，但他找到的卻不是最好的，loss不夠小，EX:你在養魚場釣魚，釣上來確只有蝦子。
好那我們介紹完上列兩種可能的問題，那到底該怎麼判斷是哪種呢?
>哈阿，答對摟，就是多試幾次拉。
>[name=澤]
>
請你先觀察這兩張圖
![](https://hackmd.io/_uploads/r1bc1QAhn.png =40%x)![](https://hackmd.io/_uploads/BJ-CxXR3n.png =50%x)
56層 v.s. 20層 的測試資料，20層的loss< 56層的loss
56層 v.s. 20層 的訓練資料，20層的loss< 56層的loss
因為在訓練的時候，越深/複雜的model應該要越契合訓練資料，甚至會overfitting，但訓練資料的loss，深<淺，你就算後36層什麼都不做，loss也不會比只做20層多啊，所以可以判斷，是optimization的問題。
如果還是不懂
![](https://hackmd.io/_uploads/BJKufQ033.png)
這張圖上在layer到第五層時loss卻比第四層還大，這就是optimization的問題。
若是遇到這類狀況，建議先用比較淺的神經網路訓練模型(待補)。

## 過擬合問題
好那如果今天training data的loss夠小，但testing卻大的哭出來，那就有可能是overfitting or mismatch
好，那甚麼是overfitting呢?
首先我們來解釋一下過度擬合吧・ω・

簡單來說就是，機器太過依賴訓練資料，導致他過度依賴某項特徵（不一定是一個啦）舉例來說，我們今天來做貓的辨識，但是我的訓練資料裡都是有毛的貓貓，那如果我今天辨識的圖片是無毛貓呢！？
機器：欸這個圖片裡沒有毛，應該就不是貓了吧（誤
以上只是舉例，不要當真
就會有過度擬合的狀況
如果你的function真的太太太太廢,一個random猜準確度還比較高，

那通常我們會傾向往兩個方向去改，第一個是增加你的資料量第二個是做data augmentation(資料增強)自己去創造資料，舉例，如果我們將一張圖片上下左右顛倒🙃️，或是用不同手段處理，以此來增加資料量。

## train loss 和 test loss 判斷


|  train_loss   |  test_loss   |                 problem                  |
|:-------------:|:------------:|:----------------------------------------:|
| $\downarrow$  | $\downarrow$ |               網路仍在學習               |
| $\downarrow$  |     ----     |                  過擬合                  |
|     ----      | $\downarrow$ |                數據集問題                |
|     ----      |     ----     | 學習遇到瓶頸，減少batch_size或調整學習率 |
| $$\uparrow $$ | $$\uparrow$$ |      訓練超參數、網路設計不當等問題      |




### 參考資料
[-機器學習攻略](https://www.youtube.com/watch?v=WeHM2xpYQpw&list=LL&index=1)

[-分析訓練過程loss異常](https://cloud.tencent.com/developer/article/1851524)