---
# System prepended metadata

title: Chapter 4 多層感知器 MLP

---

# Chapter 4 多層感知器(MLP)

## 4.1 多層感知器(MLP)
### 4.1.1 隱藏層
- 是輸入層和輸出層之間眾多神經元和鏈結組成的層面，隱層可以有一層或多層。每個隱藏層有數目不定的神經元(neuron)，一個neuron在得到的輸入上計算後產生輸出。來自neuron的輸出被傳送給下一層作為輸入(輸出層除外)。最後會由輸出層產生最終的輸出。[neuron越多，非線性的性質越強。]

- MLP：由一個輸入層，一個具有一層或多層隱藏層的輸出層所組成。

![1000008638](https://hackmd.io/_uploads/HJXc1GwAa.jpg)

- 由於每層都是全連接的，因此每個輸入會影響到隱藏層的每個神經元，而隱藏層的每個神經元會影響到輸出層的每個神經元

- 單層隱藏層的MLP輸出：
H = XW(1)+b(1)[隱藏層輸出］
O = HW(2)+b(2)[輸出層輸出]

(假定為h個神經元的單隱層MLP)
X：特徵矩陣(n×d)
W1:隱藏層權重矩陣(d×h)
W2:輸出層權重矩陣(h×q)
b1:隱藏層偏置向量(1×h)
b2:輸出層偏置向量(1×q)
H:隱藏層輸出矩陣(n×h)
O:輸出層輸出矩陣(n×q)

- 不過加入隱藏層後，需要額外更新和追蹤參數。但MLP輸出的式子中的操作其實就相當於輸入層和輸出層之間的仿射變換，因為輸入層和隱藏層為一個仿射變換，隱藏層和輸出層同樣也是仿射變換，這樣的結果依舊是仿射變換。而現實中，大多數問題屬於非線性問題，此訓練出來的模型就沒有意義了。

因此就需要...激發函數！

- 在仿射變換完後的隱藏單元利用激發函數σ，不會把MLP退化成線性模型
H = σ(XW(1)+b(1))
O = HW(2)+b(2)

### 4.1.2 激發函數
- 透過計算加權和偏置來確定神經元是否要被激活，以下為常見種類

1. ReLU(Rectified Linear Unit)修正線性單元
    - 實現簡單，在各種預測任務中表現良好。
    - ReLU(x)=max(x,0)
![1000008640](https://hackmd.io/_uploads/SyCqjMD06.jpg)
    - 輸入為負值時，導數為0，輸入為正值時，導數為1
![1000008641](https://hackmd.io/_uploads/B16ghMwCT.jpg)

2. sigmoid函數
    - f:R->(0,1)
    - sigmoid(x)=1/(1+e^(-x))
    - 用於二元分類問題
![1000008643](https://hackmd.io/_uploads/H1RKeXP06.jpg)
    - 函數導數的計算及圖形
    ![1000008647](https://hackmd.io/_uploads/ByBClmPC6.jpg)
![1000008645](https://hackmd.io/_uploads/S1r0lmw0T.jpg)

3. tanh函數
![1000008696](https://hackmd.io/_uploads/rkoIKBF0a.jpg)
    - f:R->(-1,1)
    - 對稱原點
    ![1000008652](https://hackmd.io/_uploads/S13pUQwRp.jpg)
    - 導數及其圖形
    ![1000008653](https://hackmd.io/_uploads/HkbJvQwA6.jpg)
![1000008655](https://hackmd.io/_uploads/BJ-yvQDAp.jpg)

## 4.2 模型選擇 過擬合和欠擬合
### 4.2.1 前言
- 機器學習的目標是發現能夠泛化到未看過的數據的模型，只要模型發現到泛化模式時，才能對未見過的數據做有效的預測
- 過擬合(overfitting)：模型在訓練數據集上表現較佳，但對未見過的數據的預測能力不佳，通常是模型結構過於複雜導致
- 欠擬合(underfitting)：指模型參數過少或模型結構過於簡單，無法抓到數據的規律現象
![1000008659](https://hackmd.io/_uploads/Hy5GhVvAT.jpg)

### 4.2.2 訓練誤差vs泛化誤差
- 訓練誤差：指模型在訓練數據集上的表現，以預測值和真實值之間的差異來衡量
- 泛化誤差：指模型在未見過的新數據上(測試集)的預測誤差，即從樣品數據中推導出的規則能夠適用於新的數據的能力。
    - 無法準確計算泛化誤差的原因：因只能透過模型應用一個獨立的測試集(由不在訓練集裡且為隨機選取的樣本組成)估計，無法用到全部測試集樣本。

- 影響模型泛化的因素
    1. 參數數量
    2. 參數採用的值(權重)
    3. 樣本數量

### 4.2.3 模型選擇
我們會把資料切成訓練集和測試集，但在確定好超參數之前，不太希望動到測試集，因為有可能會出現過擬合測試數據的風險。也不能僅依靠訓練數據來選擇模型，因為我們無法估計訓練數據的泛化誤差。因此我們會把資料切成三等分：訓練集，驗證集，測試集

- 驗證集：是在訓練過程中，用於評估模型的初步能力與超參數調整的依據

- k折交叉驗證：在訓練過程中將訓練集切成k個子集，其中k-1個子集作為訓練集，剩下一個子集為驗證集，並執行k次訓練和驗證，並求出k個驗證誤差，用平均分數來確認模型是否最佳
![1000008661](https://hackmd.io/_uploads/r1gE7pPCp.jpg)

在比較訓練誤差和驗證誤差時，要注意過擬合和欠擬合的風險。不過，要確認是否過擬合或欠擬合時，要看模型複雜度和數據樣本大小來判斷

- 模型複雜度和過/欠擬合：
![1000008663](https://hackmd.io/_uploads/HJ-3DavA6.jpg)

- 數據大小：
資料太少：會導致更嚴重的過擬合，只要增加數據即可縮小泛化誤差

## 4.3 正則化技術(1)-權重衰減

- 通常被稱為L2正則化，因為我們是以L2的norm作為懲罰項用於最小化損失問題中，目的是為了最小化權重的值，解決過擬合的問題

- L1(lasso regression)
![1000008674](https://hackmd.io/_uploads/S17oECPAp.jpg)

- L2(ridge regression)
![1000008673](https://hackmd.io/_uploads/BksiNRDC6.jpg)

- 損失函數及新的損失函數
![1000008666](https://hackmd.io/_uploads/B1VfU0vRT.jpg)
![1000008667](https://hackmd.io/_uploads/HkVf8Cv06.jpg)
其中λ為正則化常數，跟learning rate和batch size一樣是超參數

- 權重更新
![1000008668](https://hackmd.io/_uploads/By5FURPCT.jpg)
可以透過(1 − ηλ)來減小權重w，這也是為什麼這方法叫權重衰減









































