神經網路

激活函數(activation function)

/ ak-tih-VAY-shun FUNK-shun /

激活函數,是神經元在把結果傳出去之前,對自己的總和施加的那一小步「決斷」。神經元把加權輸入和偏置加起來後,得到一個單獨的數字——但一個生的數字並不太有表現力。激活函數會給它重新塑形:也許把它壓進 0 和 1 之間,也許把所有負的部分砍掉。想像一個反應不均勻的調光開關——起初很暗,然後忽然變亮。那種不均勻的反應,正是關鍵所在。

其中的道理微妙卻至關重要。加和縮放數字——這正是權重和偏置做的事——永遠只能產生直線式的關係。哪怕你疊上一百層這樣的運算,得到的仍是一條直線,並不比單獨一層好。激活函數把那條直線掰彎了。透過在層與層之間插入一段曲線,它讓網路得以搭建出彎彎曲曲、複雜的形狀——也就是真實資料真正具有的那種形狀。這種掰彎叫做非線性,它是讓深層網路比單純算術更強大的那個唯一關鍵成分。

這類函數有一整個家族,每一個都是一條不同的曲線:平滑的 S 形的 sigmoid 和 tanh、簡單的折線 ReLU 及其「漏」的表親,還有把分數變成機率的 softmax。在它們之間如何取捨,會影響網路學起來是難是易。多年來 sigmoid 和 tanh 一直佔主導;如今隱藏層的預設選擇是 ReLU,很大程度上是因為它訓練得更快,又繞開了一個深層堆疊裡學習信號會逐漸消退的麻煩。

試著只用加權和去學習 XOR 模式(當兩個輸入中恰好一個為開時,輸出 1)——你做不到;沒有任何一條直線能把這些情形分開。加上一個帶非線性激活的隱藏層,網路就輕鬆解出了。這個曾在 1960 年代難住早期研究者的小例子,是說明激活為何不可省略的最乾淨的演示。

沒有非線性激活,層層疊加毫無所得——它們會塌縮成一層。

如果每個激活都是線性的,那麼無論你加多少層,深層網路在數學上都與單獨一層完全等價。是非線性,而非單憑深度,才解鎖了表達能力。

又稱
nonlinearitytransfer function激活函数激活函數非线性函数