zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    BZOJ 3251 树上三角形:LCA【构成三角形的结论】
    BZOJ 2442 [Usaco2011 Open]修剪草坪:单调队列优化dp
    2018湖南省赛选拔
    扩展BSGS-传送门
    倒数第N个字符串
    HDU-6070 Dirt Ratio(二分+线段树+分数规划)
    第一场多校
    HDU5923-Prediction-有继承味道的并查集
    POJ2516费用流
    POJ3436:ACM Computer Factory-最大流
  • 原文地址:https://www.cnblogs.com/gczr/p/11788271.html
Copyright © 2011-2022 走看看