為什麼 tanh 作為激活函數幾乎總是比 sigmoid 好?
在 Andrew Ng在 Coursera 上的神經網絡和深度學習課程中,他說使用幾乎總是比使用更可取.
他給出的原因是輸出使用以 0 為中心,而不是的 0.5,這“使下一層的學習更容易一些”。
- 為什麼將激活的輸出居中會加速學習?我假設他指的是前一層,因為學習發生在反向傳播期間?
- 是否還有其他功能可以使更可取?更陡峭的梯度會延遲梯度消失嗎?
- 有沒有什麼情況會更好嗎?
數學輕,直觀的答案首選。
Yan LeCun 等人在Efficient BackProp中爭論說
如果訓練集上每個輸入變量的平均值接近於零,收斂速度通常會更快。要看到這一點,請考慮所有輸入都是正數的極端情況。第一個權重層中特定節點的權重按比例更新 $ \delta x $ 在哪裡 $ \delta $ 是該節點的(標量)誤差,並且 $ x $ 是輸入向量(見方程(5)和(10))。當輸入向量的所有分量都是正數時,輸入節點的所有權重更新都將具有相同的符號(即 sign( $ \delta $ ))。*因此,*對於給定的輸入模式,這些權重只能全部減少或全部增加。因此,如果權重向量必須改變方向,它只能通過低效且非常緩慢的鋸齒形來實現。
這就是為什麼您應該標準化輸入以使平均值為零的原因。
同樣的邏輯也適用於中間層:
這種啟發式應該應用於所有層,這意味著我們希望節點輸出的平均值接近於零,因為這些輸出是下一層的輸入。
後記@craq 指出,這句話對 ReLU(x)=max(0,x) 沒有意義,它已成為一種廣泛流行的激活函數。雖然 ReLU 確實避免了 LeCun 提到的第一個 zigzag 問題,但它並沒有解決 LeCun 所說的將平均值推到零很重要的第二點。我很想知道 LeCun 對此有何評論。無論如何,有一篇名為Batch Normalization的論文,它建立在 LeCun 的工作之上,並提供了一種解決這個問題的方法:
眾所周知(LeCun et al., 1998b; Wiesler & Ney, 2011)如果輸入被白化,網絡訓練收斂速度更快——即,線性變換為具有零均值和單位方差,並且去相關。由於每一層都觀察下層產生的輸入,因此對每一層的輸入實現相同的白化將是有利的。
順便說一句,Siraj 的這個視頻在 10 分鐘有趣的時間裡解釋了很多關於激活功能的內容。
@elkout 說*“與 sigmoid (…) 相比,tanh 更受歡迎的真正原因是 tanh 的導數大於 sigmoid 的導數。”*
我認為這不是問題。我從未在文獻中看到這是一個問題。如果一個導數小於另一個導數讓您感到困擾,您可以對其進行縮放。
邏輯函數具有形狀 $ \sigma(x)=\frac{1}{1+e^{-kx}} $ . 通常,我們使用 $ k=1 $ , 但沒有什麼能阻止你使用另一個值 $ k $ 如果那是您的問題,則使您的衍生產品更廣泛。
Nitpick:tanh 也是一個sigmoid函數。任何具有 S 形狀的函數都是 sigmoid。你們所說的 sigmoid 是邏輯函數。邏輯函數之所以更受歡迎是歷史原因。它已被統計學家使用了更長的時間。此外,有些人認為它在生物學上更合理。