# 【類神經網路架構的介紹】 <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