美文网首页
激活函数

激活函数

作者: 欠我的都给我吐出来 | 来源:发表于2021-06-01 20:06 被阅读0次

    常用的激活函数有sigmoid, ReLU,leaky-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish

    Relu

    Relu(x)={if x>0 then x;else 0}为了在反向传播算法中可以正常使用,将其在x=0x=0处的导数置为1,所以它的导数也就变为了 δRelu(x)={if x>0 then 1 else 0}
    Relu是一个非常优秀的激活哈数,相比较于传统的Sigmoid函数,有三个作用

    1. 防止梯度弥散,sigmoid的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0,所以这会造成梯度弥散,而relu函数在大于0的部分梯度为常数,所以不会产生梯度弥散现象。
    2. 稀疏激活性:elu函数在负半区的导数为0 ,所以一旦神经元激活值进入负半区,那么梯度就会为0,也就是说这个神经元不会经历训练,即所谓的稀疏性。
    3. 加快计算: relu函数的导数计算更快,程序实现就是一个if-else语句,而sigmoid函数要进行浮点四则运算

    Leaky ReLU和parameter-ReLU

    Leaky ReLU就是说小于0的地方我们不是乘0,我们小于零的地方乘上0.01,马上就会有人问说为什么是乘0.01呢 ? 那么就出现了Parametric ReLU,Parametric ReLU就是说小于0的地方,我们就乘上一个系数alpha,这个参数通过模型学习得到。

    image.png

    SeLu

    the scaled exponential linear units的简称


    image.png

    代码放到Tensorflow里面就下面几行:

    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))
    

    效果比Batch Normalization 要好
    优点是:
    不存在死区
    存在饱和区(负无穷时, 趋于 - αλ
    输入大于零时,激活输出对输入进行了放大
    证明

    参考文章
    SeLU 激活函数
    Selu激活函数

    相关文章

      网友评论

          本文标题:激活函数

          本文链接:https://www.haomeiwen.com/subject/pldgsltx.html