天天看點

深度學習中的激活函數導引

http://mp.weixin.qq.com/s__biz=MzI1NTE4NTUwOQ==&mid=2650325236&idx=1&sn=7bd8510d59ddc14e5d4036f2acaeaf8d&scene=0#wechat_redirect

摘要近年來,深度學習在計算機視覺領域取得了引人注目的成果,其中一個重要因素是激活函數的發展。新型激活函數ReLU克服了梯度消失,使得深度網絡的直接監督式訓練成為可能。本文将對激活函數的曆史和近期進展進行總結和概括。

激活函數的定義與作用

在人工神經網絡中,神經元節點的激活函數定義了對神經元輸出的映射,簡單來說,神經元的輸出(例如,全連接配接網絡中就是輸入向量與權重向量的内積再加上偏置項)經過激活函數處理後再作為輸出。加拿大蒙特利爾大學的Bengio教授在 ICML 2016 的文章[1]中給出了激活函數的定義:激活函數是映射 h:R→R,且幾乎處處可導。

神經網絡中激活函數的主要作用是提供網絡的非線性模組化能力,如不特别說明,激活函數一般而言是非線性函數。假設一個示例神經網絡中僅包含線性卷積和全連接配接運算,那麼該網絡僅能夠表達線性映射,即便增加網絡的深度也依舊還是線性映射,難以有效模組化實際環境中非線性分布的資料。加入(非線性)激活函數之後,深度神經網絡才具備了分層的非線性映射學習能力。是以,激活函數是深度神經網絡中不可或缺的部分。

激活函數的曆史發展與近期進展

從定義來看,幾乎所有的連續可導函數都可以用作激活函數。但目前常見的多是分段線性和具有指數形狀的非線性函數。下文将依次對它們進行總結。

Sigmoid

Sigmoid 是使用範圍最廣的一類激活函數,具有指數函數形狀 。正式定義為:

深度學習中的激活函數導引
深度學習中的激活函數導引

可見,sigmoid 在定義域内處處可導,且兩側導數逐漸趨近于0,即:

深度學習中的激活函數導引

Bengio 教授等[1]将具有這類性質的激活函數定義為軟飽和激活函數。與極限的定義類似,飽和也分為左飽和與右飽和:左飽和:

深度學習中的激活函數導引

右飽和:

深度學習中的激活函數導引

與軟飽和相對的是硬飽和激活函數,即:f'(x)=0,當 |x| > c,其中 c 為常數。

同理,硬飽和也分為左飽和和右飽和。常見的 ReLU 就是一類左側硬飽和激活函數。

Sigmoid 的軟飽和性,使得深度神經網絡在二三十年裡一直難以有效的訓練,是阻礙神經網絡發展的重要原因。具體來說,由于在後向傳遞過程中,sigmoid向下傳導的梯度包含了一個f'(x) 因子(sigmoid關于輸入的導數),是以一旦輸入落入飽和區,f'(x) 就會變得接近于0,導緻了向底層傳遞的梯度也變得非常小。此時,網絡參數很難得到有效訓練。這種現象被稱為梯度消失。一般來說, sigmoid 網絡在 5 層之内就會産生梯度消失現象[2]。梯度消失問題至今仍然存在,但被新的優化方法有效緩解了,例如DBN中的分層預訓練,Batch Normalization的逐層歸一化,Xavier和MSRA權重初始化等代表性技術。

Sigmoid 的飽和性雖然會導緻梯度消失,但也有其有利的一面。例如它在實體意義上最為接近生物神經元。 (0, 1) 的輸出還可以被表示作機率,或用于輸入的歸一化,代表性的如Sigmoid交叉熵損失函數

tanh

深度學習中的激活函數導引
深度學習中的激活函數導引

可見,tanh(x)=2sigmoid(2x)-1,也具有軟飽和性。Xavier在文獻[2]中分析了sigmoid與tanh的飽和現象及特點,具體見原論文。此外,文獻 [3] 中提到tanh 網絡的收斂速度要比sigmoid快。因為 tanh 的輸出均值比 sigmoid 更接近 0,SGD會更接近 natural gradient[4](一種二次優化技術),進而降低所需的疊代次數。

ReLU

雖然2006年Hinton教授提出通過分層無監督預訓練解決深層網絡訓練困難的問題,但是深度網絡的直接監督式訓練的最終突破,最主要的原因是采用了新型激活函數ReLU[5, 6]。與傳統的sigmoid激活函數相比,ReLU能夠有效緩解梯度消失問題,進而直接以監督的方式訓練深度神經網絡,無需依賴無監督的逐層預訓練,這也是2012年深度卷積神經網絡在ILSVRC競賽中取得裡程碑式突破的重要原因之一。

ReLU的 正式定義為:

深度學習中的激活函數導引
深度學習中的激活函數導引

可見,ReLU 在x<0 時硬飽和。由于 x>0時導數為 1,是以,ReLU 能夠在x>0時保持梯度不衰減,進而緩解梯度消失問題。但随着訓練的推進,部分輸入會落入硬飽和區,導緻對應權重無法更新。這種現象被稱為“神經元死亡”。

ReLU還經常被“诟病”的一個問題是輸出具有偏移現象[7],即輸出均值恒大于零。偏移現象和 神經元死亡會共同影響網絡的收斂性。本文作者公開在arxiv的文章[8]中的實驗表明,如果不采用Batch Normalization,即使用 MSRA 初始化30層以上的ReLU網絡,最終也難以收斂。相對的,PReLU和ELU網絡都能順利收斂,這兩種改進的激活函數将在後面介紹。實驗所用代碼見https://github.com/Coldmooon/Code-for-MPELU/ 。

ReLU另外一個性質是提供神經網絡的稀疏表達能力,在Bengio教授的Deep Sparse Rectifier Neural Network[6]一文中被認為是ReLU帶來網絡性能提升的原因之一。但後來的研究發現稀疏性并非性能提升的必要條件,文獻 RReLU [9]也指明了這一點。

PReLU[10]、ELU[7]等激活函數不具備這種稀疏性,但都能夠提升網絡性能。本文作者在文章[8]中給出了一些實驗比較結果。首先,在cifar10上采用NIN網絡,實驗結果為 PReLU > ELU > ReLU,稀疏性并沒有帶來性能提升。其次,在 ImageNet上采用類似于[11] 中model E的15 層網絡,實驗結果則是ReLU最好。為了驗證是否是稀疏性的影響,以 LReLU [12]為例進一步做了四次實驗,負半軸的斜率分别為1,0.5,0.25,  0.1,需要特别說明的是,當負半軸斜率為1時,LReLU退化為線性函數,是以性能損失最大。實驗結果展現了斜率大小與網絡性能的一緻性。綜合上述實驗可知,ReLU的稀疏性與網絡性能之間并不存在絕對正負比關系。

深度學習中的激活函數導引

PReLU

PReLU [10]是ReLU 和 LReLU的改進版本,具有非飽和性:

深度學習中的激活函數導引
深度學習中的激活函數導引

與LReLU相比,PReLU中的負半軸斜率a可學習而非固定。原文獻建議初始化a為0.25,不采用正則。個人認為,是否采用正則應當視具體的資料庫和網絡,通常情況下使用正則能夠帶來性能提升。

雖然PReLU 引入了額外的參數,但基本不需要擔心過拟合。例如,在上述cifar10+NIN實驗中, PReLU比ReLU和ELU多引入了參數,但也展現了更優秀的性能。是以實驗中若發現網絡性能不好,建議從其他角度尋找原因。

與ReLU相比,PReLU收斂速度更快。因為PReLU的輸出更接近0均值,使得SGD更接近natural gradient。證明過程參見原文[10]。

此外,作者在ResNet 中采用ReLU,而沒有采用新的PReLU。這裡給出個人淺見,不一定正确,僅供參考。首先,在上述LReLU實驗中,負半軸斜率對性能的影響表現出一緻性。對PReLU采用正則将激活值推向0也能夠帶來性能提升。這或許表明,小尺度或稀疏激活值對深度網絡的影響更大。其次,ResNet中包含機關變換和殘差兩個分支。殘差分支用于學習對機關變換的擾動。如果機關變換是最優解,那麼殘差分支的擾動應該越小越好。這種假設下,小尺度或稀疏激活值對深度網絡的影響更大。此時,ReLU或許是比PReLU更好的選擇。

RReLU

數學形式與PReLU類似,但RReLU[9]是一種非确定性激活函數,其參數是随機的。這種随機性類似于一種噪聲,能夠在一定程度上起到正則效果。作者在cifar10/100上觀察到了性能提升。

Maxout

Maxout[13]是ReLU的推廣,其發生飽和是一個零測集事件(measure zero event)。正式定義為:

深度學習中的激活函數導引

Maxout網絡能夠近似任意連續函數,且當w2,b2,…,wn,bn為0時,退化為ReLU。 其實,Maxout的思想在視覺領域存在已久。例如,在HOG特征裡有這麼一個過程:計算三個通道的梯度強度,然後在每一個像素位置上,僅取三個通道中梯度強度最大的數值,最終形成一個通道。這其實就是Maxout的一種特例。

Maxout能夠緩解梯度消失,同時又規避了ReLU神經元死亡的缺點,但增加了參數和計算量。

ELU

ELU[7]融合了sigmoid和ReLU,具有左側軟飽性。其正式定義為:

深度學習中的激活函數導引
深度學習中的激活函數導引

右側線性部分使得ELU能夠緩解梯度消失,而左側軟飽能夠讓ELU對輸入變化或噪聲更魯棒。ELU的輸出均值接近于零,是以收斂速度更快。經本文作者實驗,ELU的收斂性質的确優于ReLU和PReLU。在cifar10上,ELU 網絡的loss 降低速度更快;在 ImageNet上,不加 Batch Normalization 30 層以上的 ReLU 網絡會無法收斂,PReLU網絡在MSRA的Fan-in (caffe )初始化下會發散,而 ELU 網絡在Fan-in/Fan-out下都能收斂 。實驗代碼見https://github.com/Coldmooon/Code-for-MPELU/。

論文的另一個重要貢獻是分析了Bias shift 現象與激活值的關系,證明了降低Bias shift 等價于把激活值的均值推向0。

Noisy Activation Functions

engio教授在ICML 2016 提出了一種激活政策[1],可用于多種軟飽和激活函數,例如 sigmoid和 tanh。

深度學習中的激活函數導引
深度學習中的激活函數導引

當激活函數發生飽和時, 網絡參數還能夠在兩種動力下繼續更新:正則項梯度和噪聲梯度。引入适當的噪聲能夠擴大SGD的參數搜尋範圍,進而有機會跳出飽和區。在激活函數中引入噪聲的更早工作可追溯到[5],但文獻[5]的工作并不考慮噪聲引入的時間和大小。本篇的特點在于,隻在飽和區才引入噪聲,且噪聲量與飽和程度相關——原式與泰勒展開式一次項之差 δ。算法1中g表示sigmoid,用于歸一化 δ。注意,ReLU的 δ恒為0,無法直接加噪聲,是以作者把噪聲加在了輸入上。

CReLU

CReLU [14]是Wenling Shang 發表在 ICML 2016的工作,本篇同樣提出了一種激活政策:

深度學習中的激活函數導引

其中,[] 表示 ReLU(其他亦可)。

作者在觀察第一層濾波器(filter)時發現,濾波器相位具有成對現象(pair-grouping phenomenon)。這一發現揭示了網絡的底層學到了一些備援濾波器來提取輸入的正負相位資訊的可能性。是以可以考慮采用适當的操作移除這些備援濾波器。對此,作者提出了CReLU,将激活函數的輸入額外做一次取反,等價于将輸入相位旋轉180°。這種政策可以看作在網絡中加入相位的先驗。實驗在cifar10上觀察到能以更少的參數獲得性能提升。

深度學習中的激活函數導引

使用CReLU時,要有意識的将濾波器數量減半,否則, 網絡參數變為2倍。

MPELU

MPELU[8]是我們組的工作,将分段線性與ELU統一到了一種形式下。在NIN+CIFAR10,本文作者發現ELU與LReLU性能一緻,而與PReLU差距較大。經過分析,ELU泰勒展開的一次項就是LReLU。當在ELU前加入BN讓輸入集中在0均值附近, 則ELU與LReLU之差——泰勒展開高次項會變小,粗略估計,約55.57%的激活值誤差小于0.01。是以,受PReLU啟發,令α可學習能夠提高性能。此外,引入參數β能夠進一步控制ELU的函數形狀。正式定義為:

深度學習中的激活函數導引
深度學習中的激活函數導引

α 和 β可以使用正則。α, β 固定為1時,MPELU 退化為 ELU; β 固定為很小的值時,MPELU 近似為 PReLU;當α=0,MPELU 等價于 ReLU。

MPELU 的優勢在于同時具備 ReLU、PReLU和 ELU的優點。首先,MPELU具備ELU的收斂性質,能夠在無 Batch Normalization 的情況下讓幾十層網絡收斂。其次,作為一般化形式, MPELU較三者的推廣能力更強。簡言之,MPELU = max(ReLU, PReLU, ELU)。

深度學習中的激活函數導引

目前對ELU網絡普遍采用的初始化方法是 MSRA。這在實際中是可行的,隻是不具備理論解釋性。我們的工作利用泰勒公式和MSRA的推導過程,為ELU網絡初始化提供了理論解釋。此外,Dmytro 提出了 LSUV[15],理論上可以用于 ELU/MPELU 的初始化。但在30/52層ELU網絡上,發現 LSUV 會導緻ELU網絡在幾次疊代之内發散,網絡檔案見https://github.com/Coldmooon/Code-for-MPELU/。

總結

深度學習的快速發展,催生了形式各異的激活函數。面對琳琅滿目的成果,如何做出選擇目前尚未有統一定論,仍需依靠實驗指導。一般來說,在分類問題上建議首先嘗試 ReLU,其次ELU,這是兩類不引入額外參數的激活函數。然後可考慮使用具備學習能力的PReLU和本文作者提出的MPELU,并使用正則化技術,例如應該考慮在網絡中增加Batch Normalization層。

本文圍繞深度卷積神經網絡結構,對十餘種激活函數進行了總結,相關代碼可在作者的github首頁上下載下傳:https://github.com/Coldmooon/Code-for-MPELU/。個人淺見如有疏漏之處,請諸位讀者不吝斧正。

緻謝

這是一次嚴肅又愉快的寫作過程,本文作者在撰稿過程中得到了兩位審稿人的建設性意見,改善了文章的可讀性,并提示了若幹重要的引證文獻,在此特表感謝!

參考文獻

1.         Gulcehre, C., et al., Noisy Activation Functions, in ICML 2016. 2016.

2.         Glorot, X. and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. AISTATS 2010.3.         LeCun, Y., et al., Backpropagation applied to handwritten zip code recognition. Neural computation, 1989. 1(4): p. 541-551.4.         Amari, S.-I., Natural gradient works efficiently in learning. Neural computation, 1998. 10(2): p. 251-276.5.         Nair, V. and G.E. Hinton. Rectified linear units improve Restricted Boltzmann machines. ICML 2010.6.         Glorot, X., A. Bordes, and Y. Bengio. Deep Sparse Rectifier Neural Networks.AISTATS 2011.7.         Djork-Arné Clevert, T.U., Sepp Hochreiter. Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs). ICLR 2016.8.         Li, Y., et al., Improving Deep Neural Network with Multiple Parametric Exponential Linear Units. arXiv preprint arXiv:1606.00305, 2016.9.         Xu, B., et al. Empirical Evaluation of Rectified Activations in Convolutional Network. ICML Deep Learning Workshop 2015.10.      He, K., et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. ICCV 2015.11.       He, K. and J. Sun Convolutional Neural Networks at Constrained Time Cost. CVPR 2015.12.       Maas, A.L., Awni Y. Hannun, and Andrew Y. Ng. Rectifier nonlinearities improve neural network acoustic models. in ICML 2013.13.       Goodfellow, I.J., et al. Maxout Networks.  ICML 2013..14.       Shang, W., et al., Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear Units.ICML 2016.15.       Mishkin, D. and J. Matas All you need is a good init. ICLR 2016.

繼續閱讀