跳到主要內容
Lab Grimoire
TW
請喝咖啡
動手實作

神經網路與深度學習:神經元、反向傳播與表示學習

一個神經元在算什麼、激活函數為什麼不可少、softmax、反向傳播與梯度消失、Dropout,以及 CNN、RNN、Transformer 與遷移學習各適合什麼資料。

作者
CY
發表
AI 的資料基礎:從統計到生成式 AI · 第 15/19 篇

本系列第 15 篇|這篇回答:神經網路裡的「神經元」到底在算什麼?為什麼疊很多層就能處理影像和語言? 讀完這篇,你應該能:

  • 手算一個神經元的輸出,並說明活化函數為什麼不可少
  • 用前向傳播、計算損失、反向傳播、更新四步說明神經網路怎麼訓練
  • 依資料型態說明 CNN、RNN、Transformer 各擅長什麼,以及深度學習需要的資料與算力條件

一、原理:神經元、層與表示學習

一個神經元只做三件事:輸入乘上權重、全部相加並加上偏差、再送進活化函數。層數變多之後,網路靠非線性把低階特徵逐層組成高階特徵;影像和文字因此不必先由人把特徵做成表格欄位。

神經元在算什麼

活化必須是非線性的,否則多層只等於一次線性變換。

詳細說明

一個神經元(neuron),把每個輸入乘上對應權重,加總,再加上偏差,最後經過活化函數(activation function)。式子是 a = g(w₁x₁ + w₂x₂ + … + b)。g 就是活化函數。權重與偏差是第 13 篇說的參數,訓練要改的就是它們。

代一組數字。輸入 x = (2, 1),權重 w = (0.5, −1),偏差 b = 0.5。

z = 0.5×2 + (−1)×1 + 0.5

0.5×2 = 1,(−1)×1 = −1,所以 z = 1 + (−1) + 0.5 = 0.5。

常用的 ReLU,定義是 ReLU(z) = max(0, z):負數變成 0,正數原樣留下。ReLU(0.5) = 0.5。若另一組參數算出 z = −0.3,則 ReLU(−0.3) = 0。

另一個常用的是 sigmoid,寫成 σ(z) = 1 / (1 + e^(−z)),輸出落在 0 到 1 之間。z = 0 時 e^0 = 1,所以 σ(0) = 1 / (1 + 1) = 0.5。

活化必須是非線性的。若每層只做加權和,兩層就是 W₂(W₁x) = (W₂W₁)x:先乘一個矩陣、再乘第二個,等於一次乘上合併後的矩陣。層數再多也能合併成一次線性變換,能分開的邊界只剩直線或平面,彎曲的關係學不到。影像裡「這塊像不像某個物體」、句子裡詞與詞的依賴,都不是一條直線分得開的。

第 14 篇的邏輯斯迴歸,可以看成只有一個 sigmoid 神經元的網路:加權、加偏差、再壓到 0 與 1 之間,中間沒有隱藏層。

層、參數與輸出

多類別用 softmax 把分數轉成總和為 1 的機率。

詳細說明

神經元排成層:輸入層接收原始數字,隱藏層做轉換,輸出層給出預測。隱藏層有很多層時,稱為深度學習(deep learning)。

最單純的接法是全連接層:每個輸入都連到每個輸出。參數數是輸入數 × 輸出數,再加輸出數;多出來的那些是每個輸出各一個偏差。一張 28×28 的灰階影像攤平,28×28 = 784 個輸入,接到 128 個神經元。權重有 784 × 128 = 100,352 個,再加上 128 個偏差,100,352 + 128 = 100,480 個參數。一層就已經這麼多。

輸出層看任務。迴歸預測一個數值,用 1 個輸出,不加活化。二元分類用 sigmoid,得到一個 0 到 1 的分數。多類別用 softmax,把各類分數轉成總和為 1 的機率:softmax(zᵢ) = e^(zᵢ) / Σⱼ e^(zⱼ)。

分數 (2, 1, 0) 的算法:e² ≈ 7.389,e¹ ≈ 2.718,e⁰ = 1。總和 7.389 + 2.718 + 1 = 11.107。三個機率是 7.389 / 11.107 ≈ 0.665、2.718 / 11.107 ≈ 0.245、1 / 11.107 ≈ 0.090。加總 0.665 + 0.245 + 0.090 = 1.000。分數為 0 的類別機率不是 0,因為 e⁰ = 1。

表示學習

人不必先設計檢測器,網路自己把低階特徵組成高階特徵。

詳細說明

疊很多層,換來的是表示學習(representation learning)。前面的層學低階特徵,影像裡例如邊緣、紋理;後面的層把它們組成高階特徵,例如部件、物體。人不必先設計好這些檢測器。對照第 5 篇:表格資料仍常靠人做特徵工程;影像、聲音、文字多半交給網路自己學。文字沒有現成的數值欄位,也是靠一層層的表示,把局部組合慢慢組成較大的單位。哪一種接法對得上影像或序列,是下一節的問題。

二、方法:怎麼訓練、選哪種架構

參數要靠重複的四步改出來。架構則看資料是一幅影像、一段序列,還是已經整理好的表格。

訓練四步

反向傳播只算梯度,權重要等梯度下降或 Adam 才會更新。

詳細說明
  1. 前向傳播(forward pass),把這筆資料從輸入送到輸出,得到預測。
  2. 用損失函數(loss function),算預測和答案的差距。分類常用交叉熵,迴歸常用 MSE,兩者的角色在第 13 篇。差距大,損失就大。
  3. 反向傳播(backpropagation),用微積分的連鎖律,從輸出層往回算出每個權重的梯度,也就是這個權重動一點點時,損失會增還是會減。
  4. 沿梯度更新權重。這一步才是梯度下降,或 Adam,都在第 13 篇。

這四步重複許多個 epoch。一個 epoch 是訓練資料被完整走一輪。反向傳播只是把梯度算準、算得有效率的方法,本身不是最佳化器;權重數字會不會改,要看第 4 步有沒有做。

深網路的兩個麻煩

sigmoid 斜率連乘會讓梯度消失,參數一多又會過擬合。

詳細說明

層一多,會碰到梯度消失(vanishing gradient)。sigmoid 的斜率是 σ(z)×(1 − σ(z))。σ = 0.5 時,斜率是 0.5×0.5 = 0.25,這是最大值,出現在 z = 0。z 很大或很小,輸出靠近 1 或 0,斜率靠近 0。反向傳播要把每一層的斜率連乘。就算 10 層都取這個最大值,0.25¹⁰ ≈ 9.5 × 10⁻⁷,傳到前面幾層的梯度幾乎是 0,那些權重幾乎不更新。

ReLU 在正的區間斜率固定是 1,連乘不會越乘越小,所以深網路多半用它,而不是每一層都用 sigmoid。另一個做法是殘差連接(residual connection),讓梯度可以跳過幾層直接往回傳,不必每一層都乘一次。

第二個麻煩是過擬合。參數很多時,網路有能力記住訓練資料,換一批資料就不準。常見對策有四個。Dropout,訓練時隨機讓一部分神經元輸出 0,例如一半,避免網路只依賴少數神經元;拿來預測時全部神經元都用,不再隨機變成 0。資料擴增,對影像做翻轉、旋轉,讓同一張圖以不同樣子出現。權重衰減(L2),是第 13 篇的 L2,讓權重不要無限制變大。提早停止,也在第 13 篇:驗證資料上的損失不再下降就停。

架構對上資料型態

影像用 CNN 權重共享,序列用 RNN 或 Transformer。

詳細說明

全連接層把影像攤平後,每個像素各自一組權重。同一個小圖案出現在左上角或右下角,等於要重新學一次,參數也跟著像素數變多。

卷積神經網路(CNN),改用一個小濾鏡在影像上滑動。單通道的 3×3 濾鏡只有 9 個權重再加 1 個偏差,共 10 個參數,和影像多大無關。同一組權重走到每個位置,這叫權重共享。圖案換位置仍由同一組權重負責,所以認得出來。CNN 適合影像。

循環神經網路(RNN),依序讀序列,把上一步的隱藏狀態傳給下一步。序列很長時,梯度要沿著時間一步步乘回去,同樣容易梯度消失。LSTM 與 GRU,用閘門決定留下多少、忘掉多少,減輕這個問題。RNN 必須一步接一步算,難以同時處理整段序列。

Transformer,用注意力(attention),讓序列中每個位置直接參考其他位置,不必只靠前一步傳下來的狀態,因此可以平行計算。大型語言模型以它為基礎,細節在第 16 篇。

影像能被深層處理,是因為 CNN 的濾鏡先抓住局部圖案,後面的層再把邊緣、紋理組成部件和物體。語言這類序列則用 RNN 沿順序傳遞狀態,或用 Transformer 一次看整段;深層做的仍是表示學習。兩者都不是先把資料收成金額、次數那種欄位,再交一個線性模型。

什麼時候值得用深度學習

非結構化且資料量大時最有優勢,資料少則改用遷移學習。

詳細說明

影像、語音、文字這類非結構化資料,而且資料量大時,深度學習最有優勢。一般表格資料,欄位已是金額、次數、天數,梯度提升樹常常一樣好或更好,見第 14 篇。

深度學習需要大量資料,也需要 GPU 這類算力。資料少時不要從零訓練一個大網路,改用遷移學習(transfer learning):拿已經在大量資料上預訓練好的模型,只重新訓練或微調最後幾層,讓前面學到的低階特徵留著。

下面用 numpy 把前面兩個手算再跑一次。w @ x 就是 0.5×2 + (−1)×1,再加上偏差。

import numpy as np

x = np.array([2.0, 1.0])
w = np.array([0.5, -1.0])
b = 0.5
z = w @ x + b
print(z, max(0.0, z))  # 0.5 0.5

scores = np.array([2.0, 1.0, 0.0])
p = np.exp(scores) / np.exp(scores).sum()
print(p.round(3))  # 約 0.665、0.245、0.09

三、容易混淆的地方

名稱很近的時候,差別要看它出現在計算的哪一步,以及畫面上的數字長什麼樣子。

容易混淆 差別在哪 實際遇到時的線索
活化函數 vs 損失函數 活化函數是神經元裡的 g,把 z 變成這一層的輸出;損失函數在前向傳播之後,用交叉熵或 MSE 量預測離答案多遠 程式裡 ReLU、sigmoid 緊跟在一層的加權和後面;損失出現在整筆預測算出之後,拿預測和標籤比。程式審查若看到有人用損失取代層與層之間的活化,就是把兩件事接錯位置
反向傳播 vs 梯度下降 反向傳播只用連鎖律算出梯度;改權重的是梯度下降或 Adam 訓練日誌裡損失若完全不動,先看權重有沒有被寫入。只算梯度、沒有更新那一步,參數會停在原處
CNN 的權重共享 vs 全連接層 單通道 3×3 濾鏡是 9 個權重加 1 個偏差,共 10 個參數,與影像大小無關;全連接是輸入數 × 輸出數 + 輸出數,784 接到 128 就是 100,480 模型摘要裡卷積層參數很少,圖放大後濾鏡仍是那一組。若把圖攤平再接全連接,參數量會隨像素增加,這一層會出現十萬這個量級
RNN vs Transformer RNN 把隱藏狀態一步步往下傳,難平行,長序列也容易梯度消失;Transformer 用注意力讓每個位置直接看其他位置,可以平行計算 同一段文字若必須等前一個位置算完,實作是 RNN。需求寫的是整段一起算,對上的是 Transformer。很長序列的前段權重幾乎不變時,先檢查是不是 RNN 的梯度在時間軸上越乘越小
多個 sigmoid vs softmax 每個 sigmoid 各自落在 0 到 1,總和不一定是 1;softmax 共用一個分母,機率總和為 1 儀表板上幾類分數加總若不是 1,就不是 softmax。報告把幾個 sigmoid 輸出說成「三類共佔 100%」時,和畫面上的數字對不起來
深度學習 vs 傳統機器學習 看資料型態和資料量。影像、語音、文字且資料量大,深度學習才有優勢;金額、次數、天數這類表格,梯度提升樹常常一樣好或更好。資料少則用遷移學習 對方拿著表格要求改成深度學習時,先看欄位是不是已經整理好的數字、樣本夠不夠。只有非結構化資料又有大量樣本,換深網路才對得上它擅長的條件

四、基礎練習

第 1 題

某團隊在覆核筆記。一個神經元的輸入 x = (1, 3),權重 w = (2, −1),偏差 b = 0.5,活化函數是 ReLU。輸出是多少?

  • (A) −0.5
  • (B) 5.5
  • (C) 0
  • (D) 0.5
看答案與解析

答案:C

z = 2×1 + (−1)×3 + 0.5 = 2 + (−3) + 0.5 = −0.5。ReLU(−0.5) = max(0, −0.5) = 0。

  • (A) −0.5 是活化前的 z,少做了 ReLU。
  • (B) 5.5 把第二個權重 −1 當成 +1:2×1 + 1×3 + 0.5 = 5.5。
  • (D) 0.5 是把 −0.5 取絕對值;ReLU 不是絕對值,負數要變成 0。

第 2 題

某電商為了少做一點計算,把一個 5 層網路的活化函數全部拿掉,只留加權和與偏差。這個網路會怎樣?

  • (A) 只是變慢一點,能學的關係不變
  • (B) 會更容易過擬合,所以更準
  • (C) 仍然算 5 層的深度學習,表達能力不變
  • (D) 整個網路退化成一個線性模型,學不到彎曲的邊界
看答案與解析

答案:D

沒有非線性活化,W₂(W₁x) = (W₂W₁)x 可以一路合併。5 層仍等於一個線性變換,只能畫直線或平面的邊界。

  • (A) 拿掉活化是少一次計算,不是變慢;能學的關係會變,彎曲邊界會消失。
  • (B) 表達能力是變少,不是更容易過擬合,也不會因此更準。
  • (C) 層數還在,但沒有非線性就合併得回一層線性,不再具有原來深層網路的表達能力。

第 3 題

某工廠把 100 個感測讀數送進一個全連接層,輸出 50 個神經元。這一層一共有幾個參數?

  • (A) 5,000
  • (B) 5,050
  • (C) 150
  • (D) 5,100
看答案與解析

答案:B

權重是 100×50 = 5,000。每個輸出再加 1 個偏差,5,000 + 50 = 5,050。

  • (A) 5,000 只算了權重,漏了 50 個偏差。
  • (C) 150 是 100 + 50,沒有做相乘。
  • (D) 5,100 把偏差算成每個輸入一個:5,000 + 100 = 5,100。偏差是每個輸出一個,不是每個輸入一個。

第 4 題

某醫院的模型把結果分成三類,給出分數 (2, 1, 0),再經過 softmax。哪一種說法符合 softmax?

  • (A) 三個機率的總和為 1,其中最大的約是 0.665
  • (B) 機率變成 (1, 0, 0),softmax 只留下分數最大的那一類
  • (C) 三個機率各自獨立,總和不一定是 1
  • (D) 分數為 0 的那一類,機率是 0
看答案與解析

答案:A

e² ≈ 7.389,e¹ ≈ 2.718,e⁰ = 1。總和 7.389 + 2.718 + 1 = 11.107。三個機率約為 7.389 / 11.107 ≈ 0.665、2.718 / 11.107 ≈ 0.245、1 / 11.107 ≈ 0.090。加總 0.665 + 0.245 + 0.090 = 1.000。

  • (B) softmax 不會把其餘類別直接變成 0,三個機率都是正的。
  • (C) 各自獨立、總和不一定為 1,那是多個 sigmoid 各自輸出時的情況;softmax 共用一個分母,總和為 1。
  • (D) e⁰ = 1,不是 0,這一類的機率約是 0.090。

第 5 題

某工廠只有 800 張標註過的瑕疵影像,想做瑕疵分類。比較合適的做法是哪一個?

  • (A) 從零訓練一個大型 Transformer
  • (B) 把每張影像攤平成一列數字,用線性迴歸分類
  • (C) 資料太少,深度學習完全不能用
  • (D) 用在大量影像上預訓練好的 CNN 做遷移學習,微調最後幾層,並搭配資料擴增
看答案與解析

答案:D

800 張標註影像不算大量資料。影像對上的架構是 CNN。資料少時用遷移學習,保留預訓練模型前面的低階特徵,只微調最後幾層,並用翻轉、旋轉做資料擴增。

  • (A) 大型 Transformer 從零訓練需要大量資料與算力;這批資料是影像,也不是拿序列模型從零開始的情況。
  • (B) 攤平後的線性迴歸是一個不加活化的線性輸出,沒有濾鏡的權重共享,學不到局部圖案。
  • (C) 資料少時仍可用遷移學習,不是深度學習完全不能用。

第 6 題

某醫院用一個很深的網路判讀影像,每一層活化都用 sigmoid。訓練時前面幾層的權重幾乎不變。比較合理的判斷是哪一個?

  • (A) 學習率太大
  • (B) 資料洩漏
  • (C) 梯度消失,改用 ReLU 或加入殘差連接
  • (D) 過擬合
看答案與解析

答案:C

sigmoid 的斜率最大只有 0.25。很多層連乘之後,前面幾層的梯度可以小到幾乎是 0,權重就幾乎不變。正區間斜率為 1 的 ReLU,或能讓梯度跳層回傳的殘差連接,是針對這個情況的改法。

  • (A) 學習率太大時,更新步伐過大,權重會劇烈變動,而不是幾乎不動。
  • (B) 資料洩漏是訓練時混進了不該用的資訊,見第 12 篇。它對不上「前面幾層梯度被連乘到幾乎為 0」。
  • (D) 過擬合是記住了訓練資料,權重仍在更新;這裡是前面幾層學不動。

五、重點回顧

  • 一個神經元先算 z = w₁x₁ + w₂x₂ + … + b,再經活化函數;ReLU(z) = max(0, z),負的 z 變成 0。
  • 沒有非線性活化時,W₂(W₁x) = (W₂W₁)x,多層合併後仍是一個線性模型,學不到彎曲的邊界。
  • 全連接層的參數數是輸入數 × 輸出數 + 輸出數;多類別輸出用 softmax,機率總和為 1。
  • 訓練是前向傳播、算損失、反向傳播算梯度、再用梯度下降或 Adam 更新;反向傳播本身不是最佳化器。
  • sigmoid 的斜率最多 0.25,10 層連乘最多約 9.5 × 10⁻⁷,前面幾層會梯度消失;ReLU 的正區間斜率是 1,殘差連接讓梯度能跳層回傳。
  • CNN 用權重共享看影像,RNN 逐步讀序列,Transformer 用注意力平行處理序列;表格資料常常不必用深度學習,資料少時則用遷移學習而不是從零訓練大網路。

覺得有幫助? RSS · X · 請我喝杯咖啡

沿著三個箭頭,看 x = (2, 1) 如何先合成 z,再由 ReLU 決定留下多少。

加權和經 ReLU 成為輸出
1 / 4
出現輸入 x = (2, 1)
x = (2, 1) 得 z = 0.5×2 + (−1)×1 + 0.5 = 0.5;ReLU 後輸出仍是 0.5。
  1. 這兩個數要分開乘上各自的權重,w 是 (0.5, −1),不能先把輸入加在一起。
  2. 0.5×2 = 1 與 (−1)×1 = −1 剛好抵銷,最後只留下偏差 0.5。
  3. ReLU(z) = max(0, z),負數變成 0,正數原樣留下;這裡的 z 是正的。
  4. z 是正的,max(0, z) 不會把它截成 0,加權和因此原樣通過。

A、B、C 三根長條的高度約是 0.665、0.245、0.09。

Softmax 把分數變成總和為 1 的機率
1 / 3
出現 A、B、C 三根長條
分數 (2, 1, 0) 轉為約 0.665、0.245、0.090,三者總和為 1.000。
  1. 它們是分數 (2, 1, 0) 經過 softmax 之後的機率,不是原始分數本身。
  2. 分子 e² ≈ 7.389、e¹ ≈ 2.718,再除以總和 11.107,所以 A 比 B 高。
  3. 分數為 0 的類別不是機率 0,因為 e⁰ = 1。三個機率加總 0.665 + 0.245 + 0.090 = 1.000。

圓環依序是預測、損失、梯度與權重更新,最後箭頭回到起點。

訓練反覆前向與更新權重
1 / 5
出現前向傳播節點
前向傳播產生預測、損失量差距、反向傳播計算梯度,最後更新權重。
  1. 它把這筆資料從輸入送到輸出,得到預測,這時權重還沒有被改動。
  2. 損失函數量的是預測和答案的差距,分類常用交叉熵,迴歸常用 MSE。
  3. 連鎖律從輸出層往回算梯度,看出每個權重動一點點時損失會增或會減。
  4. 沿梯度改權重的是這一步,方法是梯度下降或 Adam;只做反向傳播不會改數字。
  5. 一個 epoch 是訓練資料被完整走一輪,四步會再重複許多個 epoch。

五個長條對應 1 到 5 層,標出 sigmoid 斜率連乘的上限。

每層乘 0.25,梯度快速縮小
1 / 4
出現 1 到 5 層五根長條
每層斜率取最大值 0.25,10 層連乘仍只約 9.5 × 10⁻⁷;圖中列出前 5 層。
  1. 每根都取該層斜率的最大值來連乘,起點是 σ = 0.5 時的 0.25。
  2. 2 層那根是 1 層再乘 0.25;z 很大或很小時,斜率比這個最大值更靠近 0。
  3. 中間 3 層是 0.0156、4 層是 0.0039,每多一層就再乘 0.25。
  4. 若 10 層都取最大值,0.25¹⁰ ≈ 9.5 × 10⁻⁷,前面幾層的梯度幾乎是 0,權重幾乎不更新。

由上到下三列,依表頭對照架構、擅長的資料與關鍵機制。

架構機制配合資料型態
1 / 3
CNN:影像,權重共享
CNN 以共享濾鏡處理影像;RNN 傳遞序列狀態;Transformer 用注意力參照其他位置。
  1. 單通道 3×3 濾鏡是 9 個權重加 1 個偏差,同一組權重走到每個位置。
  2. 上一步的隱藏狀態傳給下一步;序列一長,梯度還要沿時間一步步乘回去。
  3. 每個位置直接參考其他位置,不必只靠前一步傳下來的狀態,因此可以平行計算。