ReLU函數簡介

打開一些神經網絡的網絡描述文件,可以看到不同的層,其中就有一種層的類型,叫做ReLU。今天正好有小夥伴問起,雖然是基礎部分但是還是來總結一下吧。首先看網絡結構描述的形式:

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 96
    pad: 3
    kernel_size: 7
    stride: 2
  }
}
layer {
  name: "relu1"
  type: "ReLU"
  bottom: "conv1"
  top: "conv1"
}

這裏截取Faster R-CNN的模型文件一小部分,可以看到,在卷積層後面緊接着是一個ReLU層,主要定義了name,type,bottom,top,其屬於非線性激活函數的一種,同類型的函數還有sigmoid函數,tanh函數,softplus函數等等。對於ReLU函數,其公式即爲個ReLU(x)=max(0, x),而sigmoid函數爲sigmoid(x)= 1/(1+e^-x),而Softplus(x)=log(1+ex)。有一個經典的4種函數圖形表示如下:
這裏寫圖片描述
這裏寫圖片描述
從圖形可以看出,後圖中的ReLU與softplus函數與前圖中的傳統sigmoid系激活函數相比,主要變化有三點:①單側抑制 ②相對寬闊的興奮邊界 ③稀疏激活性(重點,可以看到紅框裏前端狀態完全沒有激活)。

那麼爲什麼現在這麼多網絡都更多地使用ReLU函數呢?

一個重要原因就是上面提到的,其稀疏激活性。
標準的sigmoid函數輸出不具備稀疏性,需要用一些懲罰因子來訓練出一大堆接近0的冗餘數據來,從而產生稀疏數據,例如L1、L1/L2或Student-t作懲罰因子。因此需要進行無監督的預訓練。
而ReLU是線性修正,是purelin的折線版。它的作用是如果計算出的值小於0,就讓它等於0,否則保持原來的值不變。這是一種簡單粗暴地強制某些數據爲0的方法,然而經實踐證明,訓練後的網絡完全具備適度的稀疏性。而且訓練後的可視化效果和傳統方式預訓練出的效果很相似,這也說明了ReLU具備引導適度稀疏的能力。
因此,ReLu的使用,使得網絡可以自行引入稀疏性,同時大大地提高了訓練速度。下面貼出一些不同函數下的訓練結果對比數據:
這裏寫圖片描述
ReLU因而在深度網絡中已逐漸取代sigmoid而成爲主流。

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