selu激活函數和自歸一化網絡(SNN)

最近出現了一個新的激活函數:縮放指數線性單元(scaled exponential linear units,selu),根據該激活函數得到的網絡具有自歸一化功能。

首先給出文章地址:https://arxiv.org/pdf/1706.02515.pdf

然後大概講一下這個激活函數的作用(個人理解,也有可能有誤)。
一般在深度學習中,在每層添加批處理能夠使得網絡收斂的更快,同時在效果上也有提升。
這篇文章就在思考,能不能夠提出一種激活函數,經過該激活函數後使得樣本分佈自動歸一化到0均值和單位方差,在這篇文章中,作者給出了長達97的證明,證明了在滿足以下兩個條件的情況下,使用該激活函數後使得樣本分佈滿足零均值和單位方差:
1 按照給定的參數對權重初始化:對於正態分佈的初始化,初始化參數爲0均值,方差爲sqrt(1/n),n是輸入的通道個數,在tensorflow裏面提供的比較好的實現:
tf.initializers.variance_scaling_initializer(factor=1.0,model=’FAN_IN’)
也可以自己直接指定,詳細的參數介紹可以看看下面的網站:http://www.cnblogs.com/denny402/p/6932956.html
2 按照給定的參數對樣本計算激活函數:
這裏寫圖片描述
其中lamada:1.0507009873554804934193349852946
alpha:1.6732632423543772848170429916717
這兩個值是在文章中進行證明後得到的,如果需要得到歸一化後得到指定均值和方差的lamada和alpha,文章中也給出了相應的計算公式。

下面給出tensorflow中實現的selu激活函數:

def selu(x):
  with ops.name_scope('elu') as scope:
    alpha = 1.6732632423543772848170429916717
    scale = 1.0507009873554804934193349852946
    return scale*tf.where(x>0.0,x,alpha*tf.nn.elu(x))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章