搜尋意圖: 如果你在找「Sigmoid 函數 是什麼」或「Sigmoid 函數 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。
TL;DR: Sigmoid 函數是一種將任意實數壓縮到 (0, 1) 區間的 S 形曲線,公式為 σ(x) = 1/(1+e⁻ˣ),常作為神經網路的激活函數及邏輯斯迴歸的輸出層,用於將線性輸出轉換為機率值。
實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。
下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。
Sigmoid 函數是一種將任意實數壓縮到 (0, 1) 區間的 S 形曲線,公式為 σ(x) = 1/(1+e⁻ˣ),常作為神經網路的激活函數及邏輯斯迴歸的輸出層,用於將線性輸出轉換為機率值。
核心概念
Sigmoid 函數,正式名稱為邏輯斯 Sigmoid(Logistic Sigmoid),定義為:
σ(x) = 1 / (1 + e⁻ˣ)
其關鍵數學性質:
- 值域:(0, 1),永不觸達端點,輸出恆為嚴格正數
- 單調遞增:x 越大,輸出越接近 1;x 越小,輸出越接近 0
- 關於 (0, 0.5) 點中心對稱
- σ(0) = 0.5,即輸入為零時輸出為 0.5
導數存在簡潔的自引用形式:
σ'(x) = σ(x) × (1 − σ(x))
這使得在反向傳播時,一旦前向傳播已計算出 σ(x),導數的計算極為高效。
運作原理
邏輯斯迴歸中的角色
邏輯斯迴歸(Logistic Regression)的核心是對線性組合 wᵀx + b 套用 Sigmoid 函數:
p(y=1|x) = σ(wᵀx + b)
輸出 p 直接作為正類的機率估計。決策邊界設在 p = 0.5,即 wᵀx + b = 0 處。模型訓練使用二元交叉熵(Binary Cross-Entropy)作為損失函數,搭配梯度下降最佳化。
神經網路中的角色
在深度神經網路的隱藏層中,Sigmoid 曾是 1980 至 2000 年代最主流的激活函數。然而,它存在兩個根本性的問題,限制了深度網路的訓練:
梯度消失(Vanishing Gradient):當 |x| 很大時,σ'(x) 接近 0。在深度網路中,透過多層反向傳播,梯度會指數級縮小,導致淺層參數幾乎無法更新,訓練極其緩慢。
非零中心(Not Zero-Centered):Sigmoid 輸出永遠為正,導致梯度更新總是同號,使參數更新出現「Z 字形」震盪,收斂速度下降。
這兩個問題驅使研究者開發出 ReLU(2010 年)及其後的各種變體,取代 Sigmoid 作為隱藏層的激活函數。
在閘控機制中的應用
Sigmoid 在序列模型中仍是不可或缺的元件。LSTM(Long Short-Term Memory)中的三個閘(輸入閘、遺忘閘、輸出閘)全部使用 Sigmoid,將閘值壓縮到 (0, 1),以 0 代表「完全關閉」、1 代表「完全開啟」,實現對記憶細胞的精細控制。
GRU(Gated Recurrent Unit)同樣在更新閘與重置閘中使用 Sigmoid。
實際應用
二元分類任務的輸出層
無論底層網路使用何種激活函數,二元分類任務的輸出層幾乎統一使用 Sigmoid,搭配 Binary Cross-Entropy 損失:
import torch.nn as nn
# PyTorch 實作:輸出層使用 Sigmoid
model = nn.Sequential(
nn.Linear(128, 64),
nn.ReLU(), # 隱藏層用 ReLU
nn.Linear(64, 1),
nn.Sigmoid() # 輸出層用 Sigmoid 轉為機率
)
loss_fn = nn.BCELoss()
注意:PyTorch 的 BCEWithLogitsLoss 內部合併了 Sigmoid 與 BCE 計算,數值更穩定,實務上優先使用。
多標籤分類
多標籤分類(Multi-label Classification,即一個樣本可同時屬於多個類別)的輸出層使用 Sigmoid 而非 Softmax。Softmax 的輸出總和為 1,適合互斥的多類別問題;Sigmoid 讓每個標籤獨立輸出機率,適合非互斥的標籤問題(例如一篇文章可同時被標注為「科技」和「教育」)。
常見誤區
誤區一:深度學習隱藏層應該用 Sigmoid Sigmoid 因為梯度消失問題,已不適合用於深度網路的隱藏層。現代深度學習隱藏層的預設選擇是 ReLU 或其變體(Leaky ReLU、ELU、GELU)。Sigmoid 的隱藏層用途主要保留於特定的閘控機制。
誤區二:Sigmoid 輸出就是「正確」機率 Sigmoid 輸出的是模型估計的機率,但若模型未經校正(Calibration),這個機率可能是偏差的(過度自信或過度保守)。若下游任務對機率精度敏感,需要額外的機率校正步驟(如 Platt Scaling)。
誤區三:Sigmoid 和 Softmax 可以互換用於多分類 對於互斥的單標籤多分類問題,Softmax 是正確選擇(輸出總和為 1,強制模型在各類別間做出取捨)。若誤用 Sigmoid,每個類別獨立計算機率,總和不為 1,失去了多分類的機率解釋。
與相關技術的比較
| 激活函數 | 值域 | 梯度消失風險 | 計算成本 | 主要用途 |
|---|---|---|---|---|
| Sigmoid | (0, 1) | 高 | 中(含 exp) | 二元分類輸出、LSTM 閘 |
| Tanh | (−1, 1) | 高 | 中(含 exp) | RNN 隱藏狀態、零中心需求 |
| ReLU | [0, ∞) | 低(但有死亡 ReLU) | 極低(max 運算) | CNN / DNN 隱藏層 |
| Softmax | (0, 1),和為 1 | 低 | 中 | 多類別分類輸出層 |
| GELU | 近似 ReLU | 低 | 中 | Transformer 隱藏層 |
Sigmoid 與 Tanh 在數學上密切相關:tanh(x) = 2σ(2x) − 1,即 Tanh 是 Sigmoid 的線性縮放版本,值域為 (−1, 1),具備零中心性質,在 RNN 的隱藏狀態中表現通常優於 Sigmoid。
常見問題
為什麼 Sigmoid 在深度神經網路的隱藏層中被 ReLU 取代?
核心原因是梯度消失問題。Sigmoid 的導數 σ'(x) = σ(x)(1−σ(x)) 在 x 的絕對值增大時趨近於零:當 |x| = 5 時,導數僅約 0.007。在多層反向傳播中,各層的梯度相乘,使最終梯度以指數速度縮小,導致淺層幾乎無法學習。ReLU 在正半軸的導數恆為 1,不存在梯度衰減問題。此外,Sigmoid 輸出始終為正(非零中心),導致梯度同號,更新方向受限,而 ReLU 不具此缺陷。
Sigmoid 在邏輯斯迴歸與神經網路輸出層的用法有何不同?
邏輯斯迴歸中,Sigmoid 是整個模型的唯一非線性元件,將線性組合轉換為二元機率,模型訓練等同於最大似然估計(MLE)。在神經網路的輸出層,Sigmoid 是多層非線性轉換後的最後一步,前面各層已由 ReLU 等激活函數建立複雜的特徵表示,Sigmoid 只負責將最終線性輸出壓縮至機率區間。兩者的 Sigmoid 功能相同,但前者的 Sigmoid 承擔所有表示學習,後者只做最後的輸出轉換。
Sigmoid 和 Softmax 在多類別問題中如何選擇?
關鍵在於類別是否互斥。若每個樣本只屬於一個類別(單標籤多分類,如手寫數字辨識 0-9),使用 Softmax:它強制所有類別機率總和為 1,使模型在各類別間做出明確選擇。若每個樣本可同時屬於多個類別(多標籤分類,如影像同時包含「貓」和「戶外場景」),使用 Sigmoid:每個類別獨立輸出機率,彼此之間不相互競爭。混用兩者(例如互斥問題用 Sigmoid)會破壞機率解釋的正確性。