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而成為主流。