# 【類神經網路架構的介紹】
<style>
/* 自定義 highlight 樣式 */
.highlight {
background: linear-gradient(to top, lightblue 50%, transparent 50%);
font-weight: bold;
}
</style>
```mermaid
graph LR
A(定義題目)
--> B(收集資料)
--> C(清洗資料)
--> D(取特徵值)
--> E(降維)
F1(建模)
F2(分類)
G(製作報告)
E --> F1 --> G
E --> F2 --> G
style A fill:#fff,stroke:#333,stroke-width:2px;
style B fill:#fff,stroke:#333,stroke-width:2px;
style C fill:#fff,stroke:#333,stroke-width:2px;
style D fill:#fff,stroke:#333,stroke-width:2px;
style E fill:#ddf,stroke:#333,stroke-width:2px;
style F1 fill:#ddf,stroke:#333,stroke-width:2px;
style F2 fill:#ddf,stroke:#333,stroke-width:2px;
style G fill:#fff,stroke:#333,stroke-width:2px;
```
:::success
**重點筆記**:
- 早期類神經網路: 強調<span class = "highlight"> 建模 </span>的重要性。
- 深度神經網路: 強調<span class = "highlight"> 取特徵值、降維、建模 </span>的重要性。
:::
<br><br>
## 目錄
- Part1: Neurons v.s. Neural Networks
- Part2: Perceptron
- Part3: Neural Networks
- Part4: Others Neural Networks
<br><br>
## Part1: Neurons v.s. Neural Networks
- What is the neuron?
<center>
<img src="https://hackmd.io/_uploads/SJYiaCPuJe.png",
style="
width: 80%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
- Neurons to Neural networks
<center>
<img src="https://hackmd.io/_uploads/S1JxxydOkx.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br><br>
## Part2: Perceptron
:::success
**重點筆記**: DL 專用的 GPU
- 先分析 DL 會用的函數總共有哪些
- 替這些函數設計專用的硬體
- 加快速度
:::
### I. Basic structure of perceptron
<center>
<img src="https://hackmd.io/_uploads/SyNClFJ50.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
\begin{equation}
y = \sum_{j}^d w_jx_j + w_0 = w^Tx
\end{equation}
\begin{equation}
w = [w_0, w_1, ..., w_d]^T, \quad x = [1, x_1, ..., x_d]^T
\end{equation}
:::success
**重點筆記**: $x_0 = +1$ 是偏壓值(Bias),能夠提升整體的效能。
:::
<br>
### II. Regression model of perceptron
<center>
<img src="https://hackmd.io/_uploads/HJsJNty50.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::info
**注意事項**: 我們需要找到最佳的 $w$ 和 $w_0$,來繪製最佳回歸結果。
:::
<br>
### III. Classification model of perceptron
- **Step1**: 從下圖可發現 NN 必須要有偏壓(Bias) 才能加快運算。
<center>
<img src="https://hackmd.io/_uploads/H1PauKycC.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
- **Step2**: Output 會藉由 0.5 來做區分。
<center>
<img src="https://hackmd.io/_uploads/HJl9dKkcR.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::info
**注意事項** : Sigmoid Function
\begin{equation}
\sigma (x) = c + \frac{1}{1+e^{-(b+wx_1)}}
\end{equation}
- 只在意 -1 ~ +1 之間的函數。
- $w$ : 影響斜度、 $b$ : 影響平移、 $c$ : 影響高度。
<center>
<img src="https://hackmd.io/_uploads/S1Kv2rx5A.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::
<br>
### IV. Using a perceptron to implement an AND/XOR gate
<center>
| $x_1$ | $x_2$ | AND | XOR |
| :--: | :--: | :--: | :--: |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
</center>
- **AND Gate**: 單一神經元的實作。
<center>
<img src="https://hackmd.io/_uploads/B1GgLqy5C.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br>
- **XOR Gate**: 複合神經元的實作。
<center>
<img src="https://hackmd.io/_uploads/rkBuL5JqR.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br>
:::success
**重點筆記**:
- 類神經物理意義觀點-1: 轉置矩陣 (空間映射)
1. 前面幾層轉至,找一個最好處理的面。
2. 後面就可以做分類。
3. 解釋前面的概念: 類神經在做先升維,再降維的動作。
- 類神經物理意義觀點-2: 一個神經元,就代表一條線
1. 由資料分不去計算神經元的數量。
:::
### V. Using multiple perceptron to implement regression
- **觀點一**:可以想像成每一個神經原來代表一條線
<center>
<img src="https://hackmd.io/_uploads/S1DEY5y90.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::success
**重點筆記**:
1. 用上述現象來看待 overfitting 問題:過多的線條勢必造成一些<span class = "highlight"> 雜訊 </span>也被考慮到問題中
2. 如何避免 overfitting 的問題:透過計算資料的變動趨勢,來決定所使用的神經元數目
:::
:::info
**注意事項** : Overfitting 是深度學習模型學習過多的東西造成後續判斷錯誤的現象。
:::
<br>
- **觀點二** : 座標軸轉換
<center>
<img src="https://hackmd.io/_uploads/HkXJ3q19A.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br>
:::success
**重點筆記**:
- 類神經網路通常得先升維再降維
- 升維可以讓解題空間放大,協助我們更好求解
<center>
<img src="https://hackmd.io/_uploads/B1xn09k5A.png",
style="
width: 100%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::
- **觀點三:從深度學習的觀點來看升/降維問題**
1. 淺層神經網路:
```mermaid
graph LR;
A[Step1: \n 初始隨機] --> B[Step2: \n 維度太小] --> C[Step3: \n 很難調整到最佳解]
style A fill:#fff,stroke:#333,stroke-width:2px;
style B fill:#fff,stroke:#333,stroke-width:2px;
style C fill:#fff,stroke:#333,stroke-width:2px;
```
:::info
**注意事項** : 假設維度只有三維,那代表必須用此三個維度來找到最佳解,換言之,要找到問題的最佳解會相對困難。
:::
2. 深度學習:
```mermaid
graph LR;
A[Step1: \n 初始維度高] --> B[Step2: \n 挑選重要神經元] --> C[Step3: \n 易找到最佳解] --> D[Step4: \n 其餘神經元權重等於零]
style A fill:#fff,stroke:#333,stroke-width:2px;
style B fill:#fff,stroke:#333,stroke-width:2px;
style C fill:#fff,stroke:#333,stroke-width:2px;
style D fill:#fff,stroke:#333,stroke-width:2px;
```
:::info
**注意事項** :
- 從 Step2 我們可以發現深度學習其實是一種類神經版本的暴力法,其透過深度學習捨去掉多數的神經元,來選擇對問題有用的幾個神經元,因此,又稱做垃圾運算。
- 有了上述的暸解,也凸顯輕量化的重要性。
:::
<br><br>
## Part3: Neural Networks
Neural Network 可分為: 輸入層(input layer),隱藏層(hidden layer),輸出層(output layer)
<center>
<img src="https://hackmd.io/_uploads/HybjlZ91Jg.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::info
**注意事項**:
- 隱藏層可以有很多層
- 權重通常寫成矩陣格式:
\begin{bmatrix}
w_{11}^1, w_{12}^1, ..., w_{1n}^1 \\
w_{21}^1, w_{22}^1, ..., w_{2n}^1
\end{bmatrix}
:::
:::success
- $\sum$: 無意義不寫
- $f$: 線性保持輸入原始特徵
- 隱藏層: 把要實作的數據在此表示
:::
<br>
### 類神經 Universal Application 定理
- 我們設計的類神經能逼近任何函數, $|Value_{ideal} - Value_{Actural} | < \varepsilon$
- 數學家證明過的定理: 當有無限多個 tagent sigmoid 函數線性相加則其必然可以逼近任何函數。(具有無限多個 Tangent sigmoid function, $Ans = w_1f_1 + w_2f_2 + ... + w_{\alpha}f_{\alpha}$)
<center>
<img src="https://hackmd.io/_uploads/B1jo1lW5A.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
- 依據上述的理論發展出的方法論:在做迴歸問題時,最後一層會用線性的,而非其他 activation function。 <span class = "highlight"> 實驗室常使用此方法 </span>
- 此理論應用的演算法: 使用補償式類神經最小化模型大小。過往如果要最小化模型大小,需要用系統模擬公式找資料分布找資料分布趨勢 (類似 Greedy 概念實作) <span class = "highlight"> 實驗室常使用此方法 </span>
<center>
<img src="https://hackmd.io/_uploads/rJsXGl-5R.png",
style="
width: 80%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::success
**重點筆記**: 使用此演算法的優點
1. 快: 以不訓練的方式,快速提升現有的模型效果。
2. 遷移學習: 模型不適用現況 (再訓練)
<center>
<img src="https://hackmd.io/_uploads/Hyy45yBjC.png",
style="
width: 70%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::
- 討論1: 目前常見的 actuvation function ( i.e., sigmoid, tangnet sigmoid, relu),通常已經有數學家去證實其 Universal Application 特性
:::info
**注意事項** : Redius Based Function (RBF) 通常只放在模型前面,由後面架構來協助達成 universal approximation 的過程。由於尚未被數學家證實,所以他沒有被加入套件中。
:::
- 討論2: 為什麼 DL 可以有很好的逼近效果?數學證明告訴我們,當有「無限多個」 oo ,做 ooo 時,可以逼近任何函數。
- 討論3: 對回歸問題來說,最後一層用線性相加可以比用其他非線性 activation 更好的效果。 (投稿 AI 核心類論文,要說明每層的物理意義與為為什麼使用)
<br>
### Neural Networks 連結的形態
<center>
<img src="https://hackmd.io/_uploads/Hyfab-q1yg.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
**Fully connected:** (現今神經網路)
- 以大數據的觀點:把所有欄位丟給模型,由模型找出欄位間的相互作用,因為big data要尋找所有可能性。
- 以硬體的觀點:因為 GPU 跑 sparse matrix (稀疏矩陣) 不變 (沒連結的線條單純透過補 0 來完成,對整體來說不影響)
**Partially connected:** (早期神經網路)
- 根據我們的domain knowledge (例如: 公式), 把已知無關的連結去掉。
- 為何淺層類神經會有 partially connected
1. 淺層: 通常是以之關聯 (公式) $\rightarrow$ 去做設計。(另一個 ex. CNN)
**類神經 weight 值怎麼連**:
- 實際上是怎麼連都可,只要能解釋 weights 的物理意義都可。
<br>
### Neural Networks 神經元的選擇
- 隱藏層數量最佳解: 一定要超過五個,才能表示 x 與 y 之間的非線性變化。一定要有轉折點才能確保找到最佳解。
- 深度學習最常見隱藏層設計方式為$2^{\lceil \log_2n\rceil +1}$
<center>
<img src="https://hackmd.io/_uploads/B1z33iJqC.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
- 如果整體效果不夠好,代表升的維度仍不夠
<center>
<img src="https://hackmd.io/_uploads/BkeFaok5R.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br>
- 神經元個數 v.s. MSE

:::success
**重點筆記**: 最少跑五個神經元。
:::
### Neural Networks Activation Function
- 需求 : 需要能逼近任何函數
<center>
| |Sigmoid | tanh | Relu | Leakly Relu/ELU |
| :--: |:--: | :--: | :--: | :--: |
| 可否微分 | v | v | v (partial) | v |
| 計算速度 | 慢 (指數) | 慢 (指數) | 快 (線性) | 快 (線性) |
| 函數值域 | $0$ ~ $1$ | $-1$ ~ $+1$ | $0$ ~ $+ \infty$ | $-\infty$ ~ $+\infty$
| 梯度消失 | 易發生 | 易發生 | 不易發生 | 不易發生 |
| 分佈是否為 Zero Center | x | v | x | v |
| 有無 Dead Activate Problem | x | x | v | x |
</center>
<br>
#### Activation function 的存在條件?
類神經存在意義是要逼近一個函數 $\Leftrightarrow$ 設計的類神經必須要能逼近任合函數
- 具有類神經的 Universal Application 特性
- 以前每設計一個新的類神經模型都必須先證明這點才能開始做
<br>
#### Activation Function 實例
- **Threshold (Step) Function**: 常用於分類問題 (線性)
<center>
<img src="https://hackmd.io/_uploads/HJyE8yb9A.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::info
**注意事項**: 數學上有此函式,但實務上沒有。
:::
\begin{equation}
f(u) =
\begin{cases}
1, & if & u \ge 0 \\
0, & if & u < 0
\end{cases}
\end{equation}
- **Piecewise-Linear Function** : (線性)
<center>
<img src="https://hackmd.io/_uploads/Bywv5yb5C.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
\begin{equation}
f(u) =
\begin{cases}
1, & if & u \ge \frac{1}{2} \\
u+\frac{1}{2}, & if & \frac{1}{2} > u > -\frac{1}{2} \\
0, & if & u \le -\frac{1}{2}
\end{cases}
\end{equation}
:::info
**注意事項** : 靜止區為避免極端情況影響結果,藉由操作區來做事情。
:::
- **Sigmoid Function** : (迴歸)
<center>
<img src="https://hackmd.io/_uploads/r1mM3yW9C.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
\begin{equation}
f(u) = \frac{1}{1 + e^{-u}}
\end{equation}
- **Hyperbolic Tangent Function** : (迴歸)
<center>
<img src="https://hackmd.io/_uploads/HJ4Th1W9A.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
\begin{equation}
f(u) = tanh(u) = \frac{sinh(u)}{cosh(u)} = \frac{e^u-e^{-u}}{e^u+e^{-u}}
\end{equation}
:::success
**重點筆記**: 為什麼 Tangent Sigmoid 會比 Sigmoid 表現還要好?
- 由於 Sigmoid 的 Weight 值可變動範圍較少,相對 Tangent Sigmoid 不容易求得最佳解
<center>
<img src="https://hackmd.io/_uploads/H1_VLx-9R.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::
<br>
- **ReLU** : (分類)
<center>
<img src="https://hackmd.io/_uploads/r1opueZqR.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
\begin{equation}
f(u) = max(0, u)
\end{equation}
- **Leakly ReLU**: (分類)
<center>
<img src="https://hackmd.io/_uploads/SJROFl-9C.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
\begin{equation}
f(u) = max(\alpha u, u)
\end{equation}
:::info
**注意事項**: 為什麼 Relu 被發展出來? 用 CNN 判斷是否有狗和貓。
:::
:::success
**重點筆記**: 為什麼 Leakly ReLU 會比 ReLU 表現還要好?
- Leakly ReLU 透過小小的傾斜,來讓微分後數值不為 0 ,讓模型知道往何方向調整參數。
- 相較一般 ReLU<span class = "highlight"> $y = max(0,x)$ </span>不會出現梯度消失問題(optimization的時候不知道往哪個方向更新)
\begin{equation}
w(t+1) = w(t) + \frac{\partial E}{\partial w}
\end{equation}
:::
<br><br>
## Part5: Others Neural Networks
### I. ResNet 神經網路模型
<center>
<img src="https://hackmd.io/_uploads/rkz6wikqR.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br>
### II. CNN(Convolutional Neural Network)
- Pooling : 使用 maxpooling 代表選擇的區塊中有此特徵的最大機率。
- ReLU : Convolution 後可能出現負值,也可能要找特徵選取門檻值,因此使用 ReLU 當開關。
<center>
<img src="https://hackmd.io/_uploads/B1NNxb-9A.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br>
### III. Fuzzy Neural Network
- 模糊邏輯 (模糊化、模糊規則、解模糊化),以開冷氣和除濕機與否為例:
1. 模糊化: 把冷、熱等概念轉換為常態分佈的圖 (今天感覺很熱)
2. 規則判定: 把每個區塊設定好規則 (除濕、冷氣等)(覺得熱的人 $>$ 覺得冷的人,開冷氣)(分割區塊)
:::success
**重點筆記**: 找出冷氣控制器的規則,這部分電腦自己調整區塊的規則。如果不是他的區塊則會把 Weight 配置為接近 0。
- 覺得冷人數 > 覺得溫暖人數 $\rightarrow$ 開暖氣 ( 定義: 小於18度開暖氣 )
- 覺得溫暖人數 > 覺得熱人數 $\rightarrow$ 不開 ( 定義: 18~28度不開 )
- 覺得熱人數 > 覺得溫暖人數 $\rightarrow$ 開冷氣 ( 定義: 大於28度開冷氣)
:::
4. 解模糊化: 符合幾%特定規則 $\rightarrow$ 查表,做對應動作 (拿遙控器去開)(每個區塊做什麼事)
- 模糊化 : 精確與模糊如何做轉換動作 (用簡單統計達成)
<center>
<img src="https://hackmd.io/_uploads/H1QFbPCaA.png",
style="
width: 70%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
- 模糊規則: 等機率線當中,線上每個點的機率相同。線內發生機率大於機率線
<center>
<img src="https://hackmd.io/_uploads/r1eS14Io0.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
- 模糊神經網路: 規則層的部分通常都是全連接層,但也可以如下圖的畫法。
<center>
<img src="https://hackmd.io/_uploads/B1ebEV8iC.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
##### 為什麼要模糊邏輯換成模糊類神經
1. 模糊邏輯需要大量專家決定規則
2. 所以我們讓電腦自己學習來取代專家 : 模糊類神經可透過不停自我學習,找到最佳參數
3. 硬體上實現方式模式使模糊邏輯 or 類神經?皆可。模糊邏輯:簡單、易維修。類神經:複雜,難以維修
4. 所以有時候模糊類神經訓練後,會逆向拆回模糊邏輯已實現產品
:::success
**重點筆記**: 從模糊規轉變為模糊神經網路,神經網路可以自己找到最適參數,省去請專家的步驟
:::
##### 模糊化層 (一次輸入用幾個RBF表示) 和 規則層 (區分幾個區塊) 各用幾個?
1. 由 Fuzzy 數學去計算,但此部分難度較高。
2. 用多一點神經元,訓練中無用的神經元會自己關掉。
##### 模糊化 & 規則層間的連解方式
1. 目前介紹的方法為部分連接
2. 實務上為全連接,因為電腦會自己調整權重
##### 逆向拆回模糊邏輯:找參數對應回去
1. 模糊層用 $mean$, $\sigma$ 還原
<center>
<img src="https://hackmd.io/_uploads/BkJwwNLi0.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
2. 規則層、解模糊化 把全部座標軸內的點都帶進去跑一次來得知範圍
<center>
<img src="https://hackmd.io/_uploads/rkPBu4UiR.png",
style="
width: 60%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br>
### IV. RNN、LSTM
- 具有 feedback, 權重會往回走
- 回饋使用任何方法都可以,都又不同方式的解釋方法
#### RNN
- 主要缺點為難train,誤差會累積放大 (誤差校正困難),最後發散。
- 回饋用意: 即使沒有輸入以前資料,在網路中仍可考慮以前的資料。(以下右圖又比左圖效果好。)
<center>
<img src="https://hackmd.io/_uploads/SkRgB0_o0.png",
style="
width: 100%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
#### LSTM
近似於 RNN,但循環可以開關 (自由選擇要不要回饋)。
<center>
<img src="https://hackmd.io/_uploads/ryDFT0dj0.png",
style="
width: 70%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
#### DNN
- 網路夠深,直接硬train,沒有誤差累積問題。
- 在網路夠小時不妥當。因為實際狀況更複雜 (在深度學習時又不同)
<center>
<img src="https://hackmd.io/_uploads/H1QP70dj0.png",
style="
width: 60%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
#### 為何需要回饋?
NN屬於many to one function,但並非所有問題皆是many to one。因此我們需改模型架構以符合多對一的情況。
對時序資料來說,可以多考慮之前的氣溫來預測之後的氣溫:
- 假設一地的溫度是: $17^\circ\mathrm{C} \to 18^\circ\mathrm{C}\to 19^\circ\mathrm{C} \to 18^\circ\mathrm{C} \to 17^\circ\mathrm{C}$
- One to One: 僅能針對前一時段溫度做預測,因此可能出現預測溫度持續上升或下降的情況。
\begin{equation}
y(t+1) = f(y(t))
\end{equation}
- Many to One: 可以更靈活針對前些時段累積做預測,避免上述線性的情況發生。同時就可以回歸 Many to One形式 (即RNN)。
\begin{equation}
y(t+1) = f(y(t-1)) + f(y(t))
\end{equation}
<br><br>
### RBF Neural Network
#### RBF函數 (Radial Basis Function) (高斯函數)
1. 可用來在模型中對資料做分群 or 把分群動作融入到模型中,但是無法逼近所有函數
2. 在資料科學中通常會先分類再建模,都能收到比直接建模更好的成效
3. 通常放在 Neural Network 之前,例如: RBF-NN, Fuzzy Neural Network
4. 適用的範圍: 資料不同的區段差異大時
5. 類神經詬病的地方:普通 Neural Network 通常只對具有高斯分佈(常態分佈)資料集建模才會有比較好的效能,因此沒能讓 NN 達成 Universal Approximation 特性 (分類)
6. RBF Neural Network 神經元數目的選擇:使用 GMM 高斯混合模型,其會告訴你這個資料集分佈是由幾個高斯函數組成,再根據其函數的分佈來設定神經元數目
<center>
<img src="https://hackmd.io/_uploads/r12mheZ9C.png",
style="
width: 50%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
\begin{equation}
f(u) = e^{-\alpha u^2}
\end{equation}
#### RBF Neural Network
**資料先分類再建模**: 跟單純使用神經網路相比,建模的難度會大幅下降。
<center>
<img src="https://hackmd.io/_uploads/SJ5rorHe1g.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::success
**重點筆記**: 如何知道上述分段建模的狀況
- 資料觀察
- 套用最簡單的 model 後去觀看效果 ( NN $\rightarrow$ RBF-NN ),單純使用 NN 的話,建模時會對變動較大的資料,產生較差的效果。
:::
**資料分佈角度分析**:
- Input:一個 NN 只能針對一個 Gussian 分布的資料建模,因此當資料出現多個 Gussian 分布組合時,用 RBF-NN 來建模能提升準確度
- Output:NN 的 Error Histogram 必須呈現 Gussian 分佈,才訓練成功
<center>
<img src="https://hackmd.io/_uploads/BkdjGUBlyx.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
**RBF-NN的實例**:
<center>
<img src="https://hackmd.io/_uploads/r1IDQIrlJl.png",
style="
width: 70%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<center>
<img src="https://hackmd.io/_uploads/r1HWDZbqR.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<center>
<img src="https://hackmd.io/_uploads/SypjoWW5C.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br><br>
### V. Wavelet Neural Network
#### 介紹
- 現在的 Deep Learning: ```add([Neuron], activation = Relu)```
- 以前的 Deep Learning:
<center>
<img src="https://hackmd.io/_uploads/rkmPO8Sgyx.png",
style="
width: 60%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
:::success
**重點筆記**:有些趨勢雖然可以被組合出來,但有可能需要太多的 Function。因此用複合的多函數,來減少神經元需求。
:::
- 如何透過 NN 將一堆 Function 組成一條線
<center>
<img src="https://hackmd.io/_uploads/rJDOKLrxkl.png",
style="
width: 60%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
#### 神經網路的比較
- 過去:把資料都放在同一個網路當中
- 現在:
<center>
<img src="https://hackmd.io/_uploads/S1ZisUBxJx.png",
style="
width: 90%;
height: auto;">
<div style="
border-bottom: 3px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 3px;">
</div>
</center>
<br>
### VI. ANN