除了之前較為流行的RELU激活函數,最近又新出了幾個效果較好的激活函數
一、BERT激活函數 - GELU(gaussian error linear units)高斯誤差線性單元
數學公式如下:
X是服從標准正態分布的變量。
近似的數學計算公式如下:
函數圖如下:
橙色曲線為:GELU
藍色曲線為:Mish函數
特性:當輸入x減小的時候,輸入會有一個更高的概率被dropout掉,這樣的激活變換就會隨機依賴於輸入了,在激活中引入了隨機正則的思想,是一種對神經元輸入的概率描述。但是其實GELU相比Mish函數就要差一點,首先在大於0階段,Mish函數的梯度是要略大於GELU,在負軸階段Mish函數比GELU要晚一點趨近於0,也就是神經元能夠晚一點死掉。
import math import numpy as np from matplotlib import pyplot as plt def mish(x): return x * math.tanh(math.log(1+math.exp(x))) def GELU(x): return 0.5*x*(1+math.tanh(math.sqrt(2/math.pi)*(x+0.044715*x**3))) x = np.linspace(-10,10,1000) y=[] z=[] for i in x: y.append(mish(i)) z.append(GELU(i)) plt.plot(x,y) plt.plot(x,z) plt.grid() plt.ylim(-1,6) plt.xlim(-7,7) plt.show()
二、Mish激活函數
公式如下:
函數圖如下:
橙色曲線為:ln(1+e^(x))
藍色曲線為:Mish函數
import math import numpy as np from matplotlib import pyplot as plt def mish(x): return x * math.tanh(math.log(1+math.exp(x))) def ln_e(x): return math.log(1+math.exp(x)) x = np.linspace(-10,10,1000) y=[] z=[] for i in x: y.append(mish(i)) z.append(ln_e(i)) plt.plot(x,y) plt.plot(x,z) plt.grid() plt.show()