GELU激活函數

論文鏈接:https://arxiv.org/abs/1606.08415

在神經網絡的建模過程中,模型很重要的性質就是非線性,同時爲了模型泛化能力,需要加入隨機正則,例如dropout(隨機置一些輸出爲0,其實也是一種變相的隨機非線性激活), 而隨機正則與非線性激活是分開的兩個事情, 而其實模型的輸入是由非線性激活與隨機正則兩者共同決定的。

GELUsGELUs正是在激活中引入了隨機正則的思想,是一種對神經元輸入的概率描述,直觀上更符合自然的認識,同時實驗效果要比RelusRelusELUsELUs都要好。
GELUsGELUs其實是 dropoutdropoutzoneoutzoneoutRelusRelus的綜合,GELUsGELUs對於輸入乘以一個0,10,1組成的maskmask,而該maskmask的生成則是依概率隨機的依賴於輸入。假設輸入爲X,maskX, maskmm,則mm服從一個伯努利分佈(Φ(x),Φ(x)=P(X<=x),X)(\Phi(x), \Phi(x)=P(X<=x), X服從標準正太分佈), 這麼選擇是因爲神經元的輸入趨向於正太分佈,這麼設定使得當輸入xx減小的時候,輸入會有一個更高的概率被dropoutdropout掉,這樣的激活變換就會隨機依賴於輸入了。

數學表達如下:

GELU(x)=xP(X<=x)=xΦ(x) GELU(x)=xP(X<=x)=xΦ(x)

這裏Φ(x)\Phi(x)是正太分佈的概率函數,可以簡單採用正太分佈N(0,1)\N(0,1), 要是覺得不刺激當然可以使用參數化的正太分佈N(μ,σ)\N(\mu,\sigma), 然後通過訓練得到μ,σ\mu,\sigma

對於假設爲標準正太分佈的GELU(x)GELU(x), 論文中提供了近似計算的數學公式,如下:
GELU(x)=0.5x(1+tanh[2/π(x+0.044715x3)])GELU(x) = 0.5x(1+tanh[\sqrt{2/\pi}(x+0.044715x^3)])

def gelu(input_tensor):
	cdf = 0.5 * (1.0 + tf.erf(input_tensor / tf.sqrt(2.0)))
	return input_tesnsor*cdf

GELU學習更快且更好:
在這裏插入圖片描述

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