SOTA激活函數學習


除了之前較為流行的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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM