---
# System prepended metadata

title: 【類神經網路架構的介紹】
tags: [Data Analysis]

---

# 【類神經網路架構的介紹】

<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
![截圖 2024-10-14 上午11.02.30](https://hackmd.io/_uploads/H1GAFb9kye.png)



:::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
