Neural-Networks
為什麼非零中心激活函數在反向傳播中是個問題?
我在這裡讀到以下內容:
- Sigmoid 輸出不是以零為中心的。這是不可取的,因為神經網絡中後續處理層中的神經元(稍後會詳細介紹)將接收非零中心的數據。這對梯度下降過程中的動力學有影響,因為如果進入神經元的數據總是正的(例如 $ x > 0 $ 逐元素 $ f = w^Tx + b $ )),然後是權重的梯度 $ w $ 將在反向傳播過程中要么全部為正,要么全部為負(取決於整個表達式的梯度 $ f $ )。這可能會在權重的梯度更新中引入不希望的鋸齒形動態。但是,請注意,一旦將這些梯度在一批數據中相加,權重的最終更新可能會有不同的符號,從而在一定程度上緩解了這個問題。因此,這是一個不便,但與上述飽和激活問題相比,它的後果較輕。
為什麼要擁有所有 $ x>0 $ (elementwise) 導致全正或全負梯度 $ w $ ?
$$ f=\sum w_ix_i+b $$ $$ \frac{df}{dw_i}=x_i $$ $$ \frac{dL}{dw_i}=\frac{dL}{df}\frac{df}{dw_i}=\frac{dL}{df}x_i $$
因為 $ x_i>0 $ , 梯度 $ \dfrac{dL}{dw_i} $ 總是有相同的符號 $ \dfrac{dL}{df} $ (全部正面或全部負面)。
更新
說有兩個參數 $ w_1 $ 和 $ w_2 $ . 如果兩個維度的梯度總是相同的符號(即要么都是正的,要么都是負的),這意味著我們只能在參數空間中大致向東北或西南方向移動。
如果我們的目標恰好在西北方向,我們只能以之字形的方式移動才能到達那裡,就像在狹窄的空間中平行停車一樣。(原諒我的畫)
因此,全正或全負激活函數(relu、sigmoid)對於基於梯度的優化可能很困難。為了解決這個問題,我們可以提前將數據標準化為以零為中心,就像在批次/層標準化中一樣。
另外我能想到的另一個解決方案是為每個輸入添加一個偏置項,以便該層變為 $$ f=\sum w_i(x_i+b_i). $$ 那麼梯度是 $$ \frac{dL}{dw_i}=\frac{dL}{df}(x_i-b_i) $$ 標誌不僅僅取決於 $ x_i $ .