JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

層層堆疊:多層感知機

單個神經元只能畫一條直線。把神經元堆疊成層,你就得到一個能彎折、能塑形、幾乎能勾勒出任意形狀的網路——本文將精確講清它的原理。

從一個神經元到一支團隊

在上一篇裡,你搭建了一個人工神經元:它接收若干輸入,給每個輸入乘上一個權重,加上一個偏置,再把總和送過一個啟動函數。這台小機器很強大,卻有一個頑固的侷限——單憑自己,它只能用一條直線把資料切成兩半。經典的例子是互斥或(XOR):四個點,沒有任何一條直線能把正確的點分到各自一側。一個神經元根本做不到。

解決辦法簡單得近乎可笑:用不止一個神經元,並讓一部分神經元去聽另一部分神經元、而不是去聽原始輸入。一整排並行工作的神經元就構成一個(layer)。當你把層堆疊起來,讓前一層的輸出餵給後一層的輸入,你就造出了一個多層感知機(MLP)——最初的、最基礎的神經網路。你聽說過的所有更花俏的東西,從影像辨識器到聊天機器人,都是這個想法的後代。

為什麼堆疊會有用?因為第一層可以一次性把輸入切成好幾塊直的,而下一層能把這些塊組合成一個彎曲、帶折角的形狀——那是任何單條直線都畫不出來的。第一層兩個神經元,加上一個負責組合它們的神經元,就足以攻克 XOR。換句話說,深度讓你能用直線拼出曲線。

三種層:輸入、隱藏、輸出

一個 MLP 按三種角色來組織。輸入層其實根本不算神經元——它只是你的數字進入的那些槽位:每個特徵一個槽。如果你餵給它一張 28×28 的灰階影像,輸入層就有 784 個槽,每個像素一個。它不做任何計算,只是托住這些數值。

輸出層是最後一排,它的工作是把答案以你需要的形狀交付出來。對一個是/否的問題,你可能用一個帶 sigmoid 的神經元;對一個十選一的問題(這是哪個數字?),你就用十個神經元加一個 softmax,讓輸出讀起來像一組加和為一的機率。輸出層的大小完全由問題決定,而非由你的喜好決定。

夾在中間的一切都是隱藏層——之所以「隱藏」,是因為你從不直接看到它的數值;它們是內部的草稿。這裡有一個關鍵的思維轉變:隱藏層的神經元並不去檢測你事先命名好的東西。相反,網路會自己*發明*中間特徵——也許一個神經元對圓形發放,另一個對豎直筆畫發放——而它是在訓練過程中自行發現這些的。隱藏層的數量和大小是你來選擇的:它們是超參數,是你在訓練前撥好的旋鈕,而非資料遞給你的值。

全連接:每根線連到每個神經元

在 MLP 中,每一層都是全連接的(也叫*稠密*層):本層中的每個神經元都從前一層的*每一個*值那裡接收一根線。如果前一層有 100 個輸出、本層有 50 個神經元,那就是 100 × 50 = 5000 個權重,外加每個神經元一個偏置。這些權重中的每一個,都是網路將要學習的數。

這正是我們鍾愛矩陣的原因。與其一個一個地追蹤 5000 次乘法,我們把權重打包進一張網格——一個權重矩陣——於是整層的計算就變成一次矩陣乘法,再加上偏置向量。你早先攀過的線性代數那一級並不是無用功:一個層從字面意義上*就是*一個仿射映射(一個線性映射加上一次平移),而矩陣就是它緊湊的書寫形式。

前向傳播:資料逐級上行

把一個輸入送過網路以得到答案,這個過程叫前向傳播。它機械得令人愉快:拿起輸入向量,做本層的矩陣乘法並加偏置,套上啟動函數,你就得到下一層的值。把這些交給下一層,重複即可。數字嚴格地朝一個方向流動——從輸入流向輸出——這正是 MLP 是一個無環的*前饋*網路的原因。

  1. 從輸入向量 x 開始(你的原始特徵)。
  2. 對每一層:計算 z = W·x + b——乘以權重矩陣,加上偏置。
  3. 套上啟動函數:a = f(z),把結果彎折(例如 ReLU 或 sigmoid)。
  4. 把 a 作為輸入餵給下一層;重複直至末層。
  5. 把末層的輸出讀作你的預測。
def forward(x, layers):
    a = x
    for (W, b, activation) in layers:
        z = W @ a + b        # matrix multiply, then add bias
        a = activation(z)    # the nonlinear bend
    return a                 # final-layer output = prediction
一個 MLP 的完整前向傳播——在層上做的一個迴圈,裡面只有三行真正幹活的程式碼。

做出一個預測,真的就這麼多。神秘之處不在前向傳播——而在*好的權重究竟從何而來*。一開始它們是隨機的,所以輸出是一堆胡言。學習的意思是:把每個權重都微微挪動一點,讓答案不那麼錯,如此反覆。負責算出每個權重該往哪個方向挪的機器,就是反向傳播配上梯度下降——而這正是下一篇的主題。

萬能逼近——以及它並未承諾的東西

有一個聽起來近乎魔法的著名結論:萬能逼近定理。它說,哪怕只有一個隱藏層的 MLP,也能以你想要的任意精度逼近*任何*連續函數——前提是允許這個隱藏層足夠寬。說白了:這個簡單的架構在原理上表達力足夠強,幾乎能表示你想要的任何「輸入到輸出」的映射。

這也是為什麼在實踐中,人們會去用*深*網路,而不是用一個寬得不切實際的隱藏層。定理也許允許一個淺的解,但更深的網路往往能用少得多的神經元達到同樣的精度,並且會促成分層特徵——淺層學簡單的部件,深層學更豐富的組合。全連接的 MLP 是一個誠實的起點;它的那些專門化的表親,比如卷積網路,則加入了結構,讓在影像或文字上的學習高效得多。

所以請記住這幅圖景:一層層全連接的神經元,每兩層之間夾一個啟動函數,資料從輸入向輸出前向流動。這就是網路的軀體。它仍然缺少的,是一種自我改進的方法——把隨機的初始權重變成好的權重。給它這個能力,這台死氣沉沉的機器就變成了一台會學習的機器。那就是我們接下來要去的地方。