Activation Functions
- 平滑非線性激活單元(sigmoid,tanh,elu,softplus and softsign)
- 連續但不是處處可導的激活單元(relu,relu6,crelu and relu_x)
- 隨機正則化單元(dropout)
所有的激活操作都是應用在元素級上的,生成一個和輸入張量形狀一樣的張量
激活函數可以把當前特徵空間通過一定的線性映射轉換到另一個空間,讓數據能夠更好的被分類。
激活函數有哪些性質?
- 非線性:當激活函數是線性的,一個兩層的神經網絡就可以基本上逼近所有的函數。但如果激活函數是恆等激活函數的時候,即f(x)=x,就不滿足這個性質,而且如果MLP 使用的是恆等激活函數,那麼其實整個網絡跟單層神經網絡是等價的;
- 可微性:當優化方法是基於梯度的時候,就體現了該性質;
- 單調性:當激活函數是單調的時候,單層網絡能夠保證是凸函數;
- f(x)≈x:當激活函數滿足這個性質的時候,如果參數的初始化是隨機的較小值,那麼神經網絡的訓練將會很高效;如果不滿足這個性質,那麼就需要詳細地去設置初始值;
- 輸出值的範圍: 當激活函數輸出值是有限的時候,基於梯度的優化方法會更加穩定,因爲特徵的表示受有限權值的影響更顯著;當激活函數的輸出是無限的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的Learning Rate。
連續但不是處處可導的激活單元
1.
tf.nn.relu(features, name=None)
f = max(0, features)
2.
tf.nn.relu6(features, name=None)
加了個上限:f = min(max(features, 0), 6)
3.
tf.nn.crelu(features, name=None)
concatenates a ReLU which selects only the positive part of the activation with a ReLU which selects only the negative part of the activation
這會產生兩倍通道的結果
4.
tf.nn.lrelu(features, name=None)
f = max(α·features, features)
平滑非線性激活單元
1.
tf.nn.elu(features, name=None)
論文:Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs)
小於0的部分相當於實現了一個BN的功能
ELU在超過5層的網絡上面效果更顯著,而且速度更快。BN對帶有ELU的網絡提升不大
反向傳播的效率非常高,α是一個控制exp(x)-1範圍的數,也就是負值輸入飽和狀態的值。
2.
tf.nn.softplus(features, name=None)
f = log(exp( fetures ) + 1)
3.
tf.nn.softsign(features, name=None)
f = features / (abs( features ) + 1)
f’ = f(1-f)
4.
tf.sigmoid(x, name=None)
帶有偏置
y=1 / (1 + exp( - x))
5.
tf.tanh(x, name=None)
雙曲正切
Dropout
tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None)
正則化機制
(1 - keep_prob)元素被置爲0,剩下的元素放大爲1 / keep_prob倍
偏置相加
tf.nn.bias_add(value, bias, data_format=None, name=None)
# value: Tensor
# bias: 1-D Tensor
# data_format='NHWC' or 'NCHW'
下面在一個只包含一個卷積層和一個全連接層的簡單網絡上,改變卷積層中的激活函數,看看網絡性能的變化:(卷積核5x5x16,全連接層是sigmoid)
可以看出小網絡上relu6最好 sigmoid最差
卷積層用rule,改變全連接層中的激活函數,看看網絡性能的變化:
注意:在卷積層中表現最好的relu6在全連接層中表現最差