# 人腦識別數字的能力 * 即使是解析度極低的 28x28 手寫數字,人腦仍能輕鬆辨認 * 大腦能將不同像素分布視為同一個數字概念 * 電腦要做到同樣的事情則困難許多 # 機器學習與神經網路的重要性 ![image](https://hackmd.io/_uploads/B11l9G_ngx.png) ![image](https://hackmd.io/_uploads/Hyzzcf_3lg.png) ㄏ * 手寫數字辨識是神經網路的經典入門範例 * 目標是建立一個能輸入影像並輸出數字的模型 * 神經網路的結構與學習過程能展現人工智慧的核心 # 神經網路的基本結構 * 神經元:只是一個持有 0 到 1 數值的單位 * 輸入層:784 個神經元,對應 28x28 像素灰階值 * 輸出層:10 個神經元,對應 0 到 9 的數字 * 隱藏層:中間若干層,負責抽象特徵處理 ![image](https://hackmd.io/_uploads/S1jHcGOhxg.png) # 神經網路的運作方式 * 一層的激活值決定下一層的激活值 * 訓練完成後,輸入影像會在各層轉換成不同的激活模式 * 輸出層中數值最大的神經元代表網路的判斷結果 # 為何分層結構合理 * 人類辨識數字是由子部件組成:線條、圈、交叉等 * 希望隱藏層能學到類似的子特徵 * 第二層可能對應「小邊緣」、「小線段」 * 更高層則組合這些特徵形成圈、直線,最後構成數字 # 分層抽象的更廣泛應用 ![image](https://hackmd.io/_uploads/SkFa9G_heg.png) ![image](https://hackmd.io/_uploads/ryD0cMOhel.png) * 邊緣檢測對其他影像識別任務同樣重要 * 層層抽象不僅適用於影像,也適用於語音處理 * 語音辨識例子:聲音 → 音素 → 音節 → 單字 → 片語 → 思想 # 權重與偏差的角色 * 每個神經元與前一層所有神經元相連,每條連線有一個「權重」 * 權重決定該神經元關注哪些像素或模式 * 偏差 (bias) 控制神經元在什麼情況下才會被激活 * 權重+偏差經加總後再經過「壓縮函數」(如 sigmoid),輸出介於 0 到 1 ![image](https://hackmd.io/_uploads/HkKbsMdhgx.png) # 權重與邊緣檢測的例子 * 權重可以設計成只在特定區域取值,其它位置為零 * 正負權重可區分亮暗,進而檢測邊緣 * 偏差可以設定門檻,決定激活的敏感度 # 數學表示法 ![image](https://hackmd.io/_uploads/SkJEsf_nel.png) * 將一層的輸入表示為向量 * 將權重整理成矩陣,行或列對應到特定神經元 * 激活運算可表示為「矩陣 × 向量 + 偏差向量」再套用 sigmoid * 這種矩陣運算方式讓數學表達簡潔,程式碼更高效 # 參數數量與複雜度 * 單一隱藏層的每個神經元需 784 個權重與 1 個偏差 * 16 個神經元即有 784×16 + 16 ≈ 12,560 個參數 * 整個網路共有約 13,000 個權重與偏差 # 神經網路的本質 * 每個神經元實際上是「函數」:輸入為前一層的輸出,輸出為 0~1 * 整個網路也是一個函數:輸入 784 個像素,輸出 10 個數字的機率分布 * 雖然複雜,但仍是數學函數的組合 # 激活函數的演進 * 早期常用 sigmoid 函數,輸出平滑介於 0 與 1 * 現代網路較多使用 ReLU(Rectified Linear Unit) * ReLU:輸入 >0 則輸出等於輸入,否則輸出 0 * ReLU 更易於訓練深層網路,效率高於 sigmoid ![image](https://hackmd.io/_uploads/rkTUjGdhxl.png) # Terminology * 像素網格(Pixel Grid):由固定行列排列的像素組成的矩陣,輸入影像的基本結構。 * 灰階值(Grayscale Value):像素亮度的數值表示,通常介於 0 到 1 之間。 * 輸入層(Input Layer):神經網路的第一層,接收原始資料(如影像像素)。 * 輸出層(Output Layer):神經網路最後一層,輸出分類或預測結果。 * 隱藏層(Hidden Layer):介於輸入與輸出之間的層,用於抽象化與特徵提取。 * 神經元(Neuron):神經網路的基本單位,儲存與傳遞數值(激活值)。 * 激活值(Activation):神經元輸出的數值,代表該單元被觸發的程度。 * 激活函數(Activation Function):決定神經元輸出如何映射的非線性函數。 * 前向傳播(Forward Propagation):資料由輸入層經隱藏層傳至輸出層的過程。 * 權重(Weight):連結神經元的參數,決定輸入對輸出的影響程度。 * 偏差(Bias):額外的調整值,幫助模型更靈活地擬合資料。 * 訓練(Training):透過資料與演算法調整參數,使模型逐漸學會任務的過程。 * 學習(Learning):神經網路優化權重與偏差以減少誤差的過程。 * 分類任務(Classification Task):將輸入歸類至離散標籤的任務。 * MNIST 數據集(MNIST Dataset):28x28 手寫數字影像的經典訓練資料集。 * 特徵檢測(Feature Detection):從輸入資料中自動辨識邊緣、形狀或模式等特徵。 * 抽象層次(Abstraction Level):隱藏層逐步將低層特徵轉換為高層語意表示。 * 邊緣檢測(Edge Detection):辨識影像中邊界與線條的基礎特徵處理。 * 模式識別(Pattern Recognition):辨識影像或資料中規律與形狀的能力。 * 子組件(Subcomponent):複雜形狀可由更小的基本元素組成,例如數字的線段與圈。 * 卷積概念(Convolution Concept):影像特徵可由小區域運算組合而成的原理(雖未明說)。 * 階層式表示(Hierarchical Representation):由基礎特徵逐步組合成更高層次的抽象表示。 * 激活模式(Activation Pattern):整個層神經元輸出形成的數值分布。 * 決策邊界(Decision Boundary):模型將不同類別區隔的數學超平面。 * 泛化(Generalization):模型對未見資料的適應能力,而非僅記住訓練樣本。 * 誤差函數(Error Function):衡量模型輸出與正確標籤之差距的函數。 * 反向傳播(Backpropagation):根據誤差調整權重的演算法。 * 梯度下降(Gradient Descent):逐步調整參數以最小化誤差的優化方法。 * 局部特徵(Local Feature):僅與輸入部分區域相關的小型特徵。 * 全域特徵(Global Feature):整體輸入結構上的綜合特徵。 * 神經網路架構(Neural Network Architecture):網路層數、大小與連結方式的設計。 * 單層感知器(Single-Layer Perceptron):僅有輸入層與輸出層的最簡單網路。 * 多層感知器(Multilayer Perceptron, MLP):含隱藏層的神經網路。 * 線性組合(Linear Combination):輸入值與權重的加權和。 * 非線性轉換(Nonlinear Transformation):透過激活函數使模型具備表達複雜模式的能力。 * 分類概率(Class Probability):輸出層每個神經元的值,代表該類別的信心程度。 * One-Hot 編碼(One-Hot Encoding):用 0/1 表示類別的標籤表示方式。 * 訓練後模型(Trained Model):經過學習並固定權重後可進行推論的網路。 * 推論(Inference):使用已訓練模型對新資料進行預測的過程。 * 過擬合(Overfitting):模型過度擬合訓練資料,導致泛化能力下降。 * 欠擬合(Underfitting):模型過於簡單,無法有效捕捉資料特徵。 * 超參數(Hyperparameters):需人工設定的模型參數(如層數、學習率)。 * 抽樣(Sampling):從資料集中挑選部分用於訓練或測試的技術。 * 驗證集(Validation Set):用於調整模型超參數的資料。 * 測試集(Test Set):用於最終評估模型效能的獨立資料。 * 抽象特徵(Abstract Feature):高層隱藏層中提取出的概念化表示(如數字的圈或直線)。 * 模組化(Modularity):不同層或神經元分工處理不同子問題的特性。 * 語音辨識(Speech Recognition):將聲音訊號逐層解析為音素、詞彙與語意的應用範例。 * 層次化處理(Hierarchical Processing):資料逐層拆解與組合形成更高層次資訊的過程。 * 表徵學習(Representation Learning):自動從原始資料中學得有用的特徵表示。 * 權重矩陣(Weight Matrix):將前一層所有輸出與下一層神經元連結的參數矩陣,每一行對應一個神經元的權重集合。 * 權重總和(Weighted Sum):輸入值與對應權重的加權和,是神經元輸入的核心計算。 * 正權重(Positive Weight):增加輸入對輸出的影響,使神經元更易被激活。 * 負權重(Negative Weight):減少輸入對輸出的影響,抑制神經元激活。 * 偏差(Bias):在加權和基礎上額外加入的常數,用於調整神經元的啟動門檻。 * 邊緣檢測權重模式(Edge Detection Weight Pattern):透過特定的正負權重組合偵測影像邊緣。 * Sigmoid 函數(Sigmoid Function):將輸入值壓縮至 0 與 1 之間的激活函數,呈現 S 型曲線。 * 邏輯曲線(Logistic Curve):Sigmoid 函數的另一名稱,常用於機率建模。 * 激活閾值(Activation Threshold):神經元開始被有效激活所需的加權和大小。 * 激活函數壓縮(Activation Squashing):將輸入值映射到固定範圍的轉換過程。 * 參數空間(Parameter Space):所有可能權重與偏差組合所構成的多維空間。 * 黑箱(Black Box):難以解釋內部細節但能輸出的複雜模型。 * 可解釋性(Interpretability):理解權重與偏差在模型中具體作用的能力。 * 手動調參(Manual Tuning):人為嘗試調整權重與偏差以實現特定功能。 * 向量表示(Vector Representation):將一層神經元輸出組成向量以利運算。 * 矩陣–向量乘積(Matrix–Vector Product):權重矩陣與輸出向量相乘以計算下一層輸入。 * 偏差向量(Bias Vector):將所有偏差組織成向量以一次加至輸入計算結果。 * 元件級操作(Element-wise Operation):逐元素應用函數(如 sigmoid)於向量或矩陣。 * 線性代數(Linear Algebra):神經網路運算的數學基礎,包括矩陣乘法與向量運算。 * 函數組合(Function Composition):將多層神經網路視為函數的逐層組合。 * 神經元函數(Neuron as Function):將神經元視為接受前一層輸入並輸出激活的函數。 * 神經網路函數(Network Function):整個網路視為輸入向量到輸出向量的函數。 * 參數數量(Parameter Count):網路中所有權重與偏差的總數,例如 13,000。 * 高維函數(High-Dimensional Function):依賴大量參數的複雜映射。 * 適配能力(Expressive Power):模型捕捉複雜模式與特徵的能力。 * 訓練困難(Training Difficulty):模型在實務中難以有效收斂的挑戰。 * 函數逼近(Function Approximation):神經網路透過參數學習來逼近目標函數。 * 激活梯度(Activation Gradient):激活函數輸出對輸入的變化率,影響學習效率。 * 梯度消失(Vanishing Gradient):深層網路中梯度過小導致權重無法更新的問題。 * ReLU 函數(Rectified Linear Unit):輸出為 max(0, x) 的激活函數,現代網路常用。 * 非線性激活(Nonlinear Activation):引入非線性以提升模型表達能力的函數。 * 深度網路(Deep Network):擁有多個隱藏層的神經網路。 * 閾值行為(Threshold Behavior):神經元僅在輸入超過某值時才激活的特性。 * 函數連鎖(Function Chain):多層神經元計算可視為函數的鏈式組合。 * 計算圖(Computation Graph):以節點與邊表示神經網路運算流程的結構。 * 向量化運算(Vectorized Computation):使用矩陣與向量運算加速計算的技巧。 * 數值優化(Numerical Optimization):透過數值方法調整參數以減少誤差。 * 參數可塑性(Parameter Flexibility):權重與偏差能適應不同輸入模式的能力。 * 模型複雜度(Model Complexity):由層數與參數數量決定的模型難度。 * 抽象層(Abstract Layer):隱藏層中的抽象特徵表示。 * 邊緣特徵(Edge Feature):由基礎像素組成的線段或邊界特徵。 * 形狀模式(Shape Pattern):由多個邊緣組成的更高層次特徵,如圈或數字。 * 特徵組合(Feature Combination):多個低層特徵共同作用形成高層語意。 * 模型優化(Model Optimization):調整網路架構與參數以提升效能。 * 函數逼近理論(Universal Approximation Theorem):多層感知器可逼近任意連續函數的理論。 * 生物啟發(Biological Inspiration):神經網路設計借鑑大腦神經元的啟發。 * 參數學習(Parameter Learning):透過資料自動調整權重與偏差。 * 表徵空間(Representation Space):隱藏層輸出所在的多維特徵空間。 * 特徵激活(Feature Activation):神經元因對應特徵存在而輸出的高值。 * 演算法效率(Algorithm Efficiency):計算過程中資源與時間的利用效率。