《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》論文閱讀筆記

論文原文:http://arxiv.org/abs/1502.01852

論文主要討論了以ReLU爲激活函數的網絡的缺陷並提出了改進的激活函數PReLU與新的Kaiming初始化方法

1. PReLU

relu與prelu的幾何圖像

  1. 前向傳播

    • 通道獨立:f(yi)=max(0,yi)+aimin(0,yi)f\left(y_{i}\right)=\max \left(0, y_{i}\right)+a_{i} \min \left(0, y_{i}\right)
    • 通道共享:f(yi)=max(0,yi)+amin(0,yi)f\left(y_{i}\right)=\max \left(0, y_{i}\right)+a \min \left(0, y_{i}\right)

    區別在於通道共享的PReLU對於每個通道都使用相同的aa,而通道獨立的PReLU對於每個通道ii都使用不同的aia_{i},這些參數都是與網絡同時訓練得到

  2. 反向傳播
    Eai=yiEf(yi)f(yi)ai \frac{\partial \mathcal{E}}{\partial a_{i}}=\sum_{y_{i}} \frac{\partial \mathcal{E}}{\partial f\left(y_{i}\right)} \frac{\partial f\left(y_{i}\right)}{\partial a_{i}}

f(yi)ai={0, if yi>0yi, if yi0 \frac{\partial f\left(y_{i}\right)}{\partial a_{i}}=\left\{\begin{array}{ll}{0,} & {\text { if } y_{i}>0} \\ {y_{i},} & {\text { if } y_{i} \leq 0}\end{array}\right.

  1. 實驗結果

    Snipaste_2019-09-03_09-31-02.png

    • 在ImageNet上僅改變激活函數能得到1.2的提升

    • 越低層的a越遠離0而越高層的a越接近0,說明模型在低層時保留了更多的信息,而在高層時提取更多非線性特徵

      Snipaste_2019-09-03_09-34-05.png

2. Kaiming初始化

  1. 使用ReLU的網絡相比使用sigmoid的網絡能更快的收斂,但不良的初始化會導致模型難以訓練。

  2. 傳統的網絡使用高斯分佈進行初始化,在訓練深層網絡時難以收斂(需要使用預訓練模型或輔助分類器),Xavier初始化基於激活函數是線性的這一假設,不適用於ReLU及其變體

  3. kaiming初始化過程

    • 對於前向傳播:yl=Wlxl+bl\mathbf{y}_{l}=\mathbf{W}_{l} \mathbf{x}_{l}+\mathbf{b}_{l}

      • xl{x}_{l}k2c×1k^{2} c\times1
      • Wl{W}_{l}d×k2cd\times k^{2} c
      • bl{b}_{l}d×1d\times 1

      其中kk爲輸入圖像大小,cc爲通道數,dd爲核個數

    • 初始化wlw_{l}xlx_{l}都是獨立同分布的,則有
      Var[yl]=nlVar[wlxl]=nlVar[wl]E[xl2] \operatorname{Var}\left[y_{l}\right]=n_{l} \operatorname{Var}\left[w_{l} x_{l}\right]=n_{l} \operatorname{Var}\left[w_{l}\right] E\left[x_{l}^{2}\right]
      只有在xl{x}_{l}0均值的情況下才有E[xl2]=Var[xl]E\left[x_{l}^{2}\right] = \operatorname{Var}\left[x_{l}\right],而ReLU激活後xl=max(0,yl1)x_{l}=\max \left(0, y_{l-1}\right)不滿足0均值,因此將與Xavier中的情況不符

    • 如果wl1{w}_{l-1}是關於0的對稱分佈,bl1=0{b}_{l-1}=0,那麼**yl1{y}_{l-1}是在0附近的均值爲0的對稱分佈**,當激活函數爲ReLU時,有E[xl2]=12Var[yl1]E\left[x_{l}^{2}\right]=\frac{1}{2} \operatorname{Var}\left[y_{l-1}\right],帶入上式得到
      Var[yl]=12nlVar[wl]Var[yl1] \operatorname{Var}\left[y_{l}\right]=\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right] \operatorname{Var}\left[y_{l-1}\right]

    • 若有多層網絡,則公式變爲
      Var[yL]=Var[y1](l=2L12nlVar[wl]) \operatorname{Var}\left[y_{L}\right]=\operatorname{Var}\left[y_{1}\right]\left(\prod_{l=2}^{L} \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]\right)

    • 要使輸入輸出的方差不變,就需要對於每一層都有
      12nlVar[wl]=1,l \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]=1, \quad \forall l

    • 這就能得出對於每一層只要設置wlw_{l}方差爲2/nl\sqrt{2 / n_{l}}的高斯分佈即可

  4. 討論

    • 使用高斯分佈時訓練深層網絡會出現梯度消失現象

    • 變量的方差會從頭到尾保持,如果輸入沒有標準化,方差的量級將會變得很大導致softmax overflow

    • 使用PReLU後,初始化公式變爲12(1+a2)nlVar[wl]=1\frac{1}{2}\left(1+a^{2}\right) n_{l} \operatorname{Var}\left[w_{l}\right]=1

    • 與Xavier初始化的比較

      • Xavier只考慮nlVar[wl]=1n_{l} \operatorname{Var}\left[w_{l}\right]=1,設置方差爲1/nl\sqrt{1 / n_{l}}

      • Kaiming考慮12nlVar[wl]=1\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]=1,設置方差爲2/nl\sqrt{2 / n_{l}}

      • 兩種初始化都能使淺層網絡收斂,但Kaiming能使深層網絡收斂並且速度更快

        Snipaste_2019-09-03_10-20-36.png

      Snipaste_2019-09-03_10-20-28.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章