---
# System prepended metadata

title: '[⭐ML1] Neural Network Note: 從數學觀點解釋神經網路的運作'
tags: [MachineLearning]

---

# [⭐ML1] Neural Network Note: 從數學觀點解釋神經網路的運作

Src.: 「究竟神經網路是什麼？ 第一章 深度學習」，3Blue1Brown，YouTube，Avaliable: https://youtu.be/aircAruvnKk。

K編案: 此時回顧神經網路最基本的概念反而更加清晰，對於所有重要概念的釐清都很有幫助。(2021/1/18)

0. 影片製作者介紹：**作者 Grant Sanderson **是**史丹福大學的數學研究生**。從2015 開始，他為**可汗學院**製作有關多元微積分的影片。大約一年後他離開可汗學院，專注於 3Blue1Brown 頻道。這個頻道從獨特的視覺角度解說高等數學，內容包括線性代數、微積分、神經網絡、黎曼猜想、傅立葉變換以及四元數等。

1. 本影片為數學科普，以線性代數觀點解釋神經網路，並透過**已經訓練完成**的 MNIST 手寫數字辨識神經網路進行說明。

2. 本影片先介紹最簡單的一種神經網路____MLP ( ~~彩虹小馬(x)~~ Multilayer Perceptron, 多層感知機 )，又稱為 Plain vanilla。

3. ==Neuron (神經元)==
	- "Thing that holds a number"，可將「神經元」暫時想成一種數字的載體。
	- 以手寫圖片 28x28 pixels 為例，總共有 784 個像素，因此會有 784 個對應的神經元來承裝，而每個像素的數值於此是代表圖片的灰階值，0表示全黑，1表示全白。
	- 這些神經元中的數字被稱為 ==Activation 激勵值==
	- 實際上神經元所裝的數字是取決於最初給予的輸入內容 (例如此為圖片像素的灰階值)，因此**神經元激勵值更應該被稱之為「Function (函數)」**，將上層神經元輸出轉換成介於 0 至 1 的數值。

4. 輸入層: 784 個象徵灰階值的神經元就是**神經網路的第一層**

5. 輸出層: 而此神經網路的最後一層為 10 個神經元，這十個神經元的激勵值 (Activation)，[0, 1] 是代表對於實際數字的判斷結果 (可能性、推斷機率)，其激勵值最大的神經元就是判斷最可能的結果。 
 
6. Hidden Layers (隱藏層): 夾在輸入/輸出層之間的神經網路，本影片暫不詳述。

7. "The way the network operaters activations in one layer **determines** the activations of the next layer."，神經網路操作一層激勵值的方式，會決定下一層的激勵值。 "And of course the heart of the network as an information processing mechanism comes down to how those activations from one layer bring about activations in the next layer"，這也就是神經網路學習的核心，將激勵值傳遞至下一層網路。而這樣的架構運作方式如同人類大腦神經細胞的訊息傳遞方式。

8. 為何層狀結構能夠完成數字辨識？隱藏層到底在做什麼？
	- 此說明神經網路可能的、使人較易明白的一種運作方式
	- 由於每個數字是由直線、圓圈所構成，可以想像隱藏層的最後一層是這些不同角度的直線或圓圈，而經過不同筆順的排列組合就能明確指出應對應的數字
	- 並可以期待隱藏層的前面幾層就是將圓圈、直線再分拆成許多小線段所構成
	- 不過實際上神經網路不見得是這麼運作，後續影片會繼續解釋，然而可以確定的是影像辨識的隱藏層的確會捕捉圖片中物體的輪廓。
	- 而其他智慧分類的 Task 也是類似這樣分拆成多個抽象層並完成辨識或預測。

9. 實際上各層網路是如何傳遞激勵值？
	- 兩層網路的神經元之間可以想像有線段相聯，如同神經樹突細胞構造，以數學觀點來說，線段就是賦予「==權重值(Weight)==」，權重值就是單純的數字。
	- 然後計算所有激勵值的==加權總合(Weighted Sum)==
	- 視覺化分析-先關注隱藏層的**一個**神經元：如同前述，隱藏層第一層的神經元的激勵值就是輸入層神經元的加權總合，若此時將與原本手寫數字圖片的字跡無關的神經元的權重值都歸零，就能觀察到**對應字跡上的某個區塊其神經元的激勵值的確都上升了**
	- 理論上加權總合 (Weighted Sum) 的結果會對應到實數的任一個數字，但實際上我們希望最終能使結果落在 0~1 之間，因此會透過**一些特殊的函數**將加權總合的實數值**壓縮至 0~1 的區間**。
	- 前述的較常見的函數為「==Sigmoid Function==」，又稱為「**Logistic Curve (邏輯函數)**」，Input 數字越小 Output 數字會越接近 0，Input 數字越大 Output 數字會越接近 1，而當 Input 數字在 0 附近時 Output 數字會穩定成長。
	- 因此隱藏層的神經元的激勵值就是反應加權總合的值有多大 ("How positive value is the weighted sum ")。不過 Sigmoid 是使 Input 大於 0 時 Output 正數，但根據任務的不同，所關心的數值不一定是大於零的神經元，例如對某任務來說「數值大於 10 才是所關心的，該數值才應被稱為 Active」，換句話說你會想要設一個數值門檻，在此的專業用語為 "Set some ==Bias (偏移值)== for inactivity"，以此 Bias = 10 的例子中，只要簡單地於 Sigmoid Function 的 Weightd Sum 後面加上 Bias 的負值 即可，這樣一來 Weightd Sum 必須大於 10，其 Sigmoid Function Output 才會大於 0。
	- 總結而言，**權重 (The Weights) 會告所我們下一層神經元們所關注的圖樣長得如何，而偏移值 (The Bias) 則告訴我們加權總合 (Weighted Sum) 要超過什麼程度才是有意義的。**
	- 以上還只是介紹一個神經元的運作
10. 假設第一層隱藏層有 16 個神經元，則每個神經元都有自己專屬、連接 784 個輸入層神經元的權重 (Weights)，也有自己專屬的偏移值 (Bias)；同理，其他層隱藏層的神經元也是擁有各自的權重值及偏移值。此神經網路約有一萬三千多個權重值及偏移值，(影片此處使用旋鈕/撥盤 "knobs and dials" 比喻這些參數) 並透過調整這些參數就能使神經網路有各種不同的構成方式。 

11. ==Learning 學習==：機器學習的「學習」，就是讓電腦透過調整參數來找到一組能有效解決問題的參數設定。 "A vaild setting for all of these many many numbers so that it'll actually solve the problem." <br> 因此不會手動去調整這些參數，在訓練神經網路時更可以將隱藏層視為黑盒子，直接針對最終結果的正確率來進行調整；或是當結果是正確的時候，再去剖析各層神經元的權重值及偏移值的實際運作方式更能幫助理解、測試並找出所有可能的解決方案。
12. 為了簡化神經網路的數學式的描述方法，會用σ(Wa^i+b)的形式來表達:
	- a^i 為 One Column (單行) 的 Vector (向量)，其內容為某一層的神經元們的激勵值 (Activation)，此時應該能發覺會取名為 Activation 意味著是帶入已經經過 Activation Function 轉換過的數值；「^i」是上標 i，表示第 i 層的神經元們的激勵值。
	- W 為 2-D Matrix (二維矩陣)，其中 Row (列)對應連接至**下層的第幾個神經元**，Column (行) 對應上層神經元**連接至下層神經元的權重值 (Weights)**。
	- b 為 One Column (單行) 的 Vector (向量)，內容為上層神經元**連接至下層神經元的偏移值 (Bias)**。
	- σ 代表 Sigmoid Function，包住整個矩陣運算的涵義是要套用至矩陣 Weighted Sum 運算結果的每一列，相當於每一層隱藏層最後都套用了 Sigmoid Function。
	- 這樣表達方式也有助於程式碼的撰寫，並且能針對矩陣運算進行最佳化、加速運算。

12. 實際上，整個神經網路也可以看作是一個 Function (函數)，輸入為 784 的像素，輸出為 10 種辨識結果的可能機率值，其中含有一萬三千多個參數，其中的項不斷使用到矩陣乘法及 Sigmoid Function。

13. 下一集會詳述如何透過讀取數據來調整權重集偏移值。

14. 重要補充：ReLU
	- ==ReLU (Rectified Linear Unit, 整流線性單位函數)==
	- 目前神經網路已不再使用仿生物概念的 Sigmoid Function 作為 Activation Function，取而代之使用 ReLU，原因是相較於 Sigmoid，ReLU 更容易訓練，並且能更好地運用於深度學習神經網路 (Deep Learning)。
	- ReLU(a) = max(0, a)。ReLU(a) 是一個只輸出 0 或 a 的函數。當輸入值小於零時就直接輸出零，當輸入值大於零時，其運作就是一個純粹的函數如同 f(a) = a，依據 f(a) 進行輸出。

###### tags: `MachineLearning`