zoukankan      html  css  js  c++  java
  • 深度学习激活函数 深入浅出 通俗易懂 教你如何选择合适的激活函数

    在这里插入图片描述


    graph LR A1(梯度消失问题)-->A A2(梯度爆炸问题)-->A A((Sigmoid)) --> B((ReLU整流)) B1(解决梯度消失)-->B B2(死亡ReLU问题,有利有弊)-->B B --> C((ELU指数)) C1(计算成本高)-->C C2(无死亡ReLU问题)-->C B --> D((Leaky ReLU渗透)) D1(微分两部分都是线性相比ELU)-->D D2(无死亡ReLU问题)-->D C --> E((SELU扩展指数)) D --> E E1(没有梯度消失/爆炸问题)-->E

    图看不懂不要紧,把文章看完就肯定理解了。这是一个方便总结的图


    1 概述

    本文会介绍六种激活函数,并且比较他们的区别。

    1.1 梯度消失问题

    [w^{(L)} = w^{(L)} - learning rate imes frac{partial C}{partial w^{(L)}} ]

    • (frac{partial C}{partial w^{(L)}})很小的时候,就会出现梯度消失的问题,其中许多权重和偏置只能收到非常小的更新。
    • 而且不同层的学习速率不同,隐藏层n的学习速率会高于隐藏层n-1。这意味着后面的层几乎肯定会被网络中更前面的层受到更多的优待。
    • 同样的会出现梯度爆炸的案例。

    2 Sigmoid

    [sigmoid(x) = frac{1}{1+e^{-x}} ]

    sigmoid这样的函数会遇到严重的梯度消失问题,这个问题使得sigmoid函数在神经网络中并不实用,我们应该用后面介绍的其他激活函数。

    3 ReLU整流线性单元

    [ReLU(X) = max(0,x) ]

    • 这个是为了解决梯度消失的问题
    • 会出现死亡ReLU问题,计算梯度的时候大多数值都小于0,我们会得到相当多不会更新的权重和偏置。
    • 但是死亡ReLU可以带来稀疏性,因为神经网络激活矩阵会有很多0,所以计算成本和效率优化。
    • 但是ReLU不能避免梯度爆炸问题

    4 ELU指数线性单元

    [ELU(x) = left{ egin{aligned} x quad ifx>0\ alpha(e^x-1) quad if x < 0 end{aligned} ight.]

    (alpha in [0.1,0.3])这是经验结论

    • 因为引入了指数,所以ELU的计算成本高于ReLU
    • 能避免死亡ReLU问题
    • 神经网络不学习(alpha)
    • 不能解决梯度爆炸问题

    5 Leaky ReLU渗漏型整流线性单元

    [LReLU(x) = left{ egin{aligned} x quad x>0\ alpha x quad x<0 end{aligned} ight. ]

    (alpha in [0.1,0.3])

    • 避免死亡ReLU问题
    • 运算速度快于ELU
    • 无法避免梯度爆炸问题
    • 神经网络不学习(alpha)
    • 微分后,两部分都是线性的,ELU一部分是线性一部分是非线性的。

    6 SELU扩展型指数线性单元激活函数

    [SELU(x) = lambdaleft{ egin{aligned} x quad x>0\ alpha (e^x-1) quad x<0 end{aligned} ight. ]

    (alpha=1.673263....)
    (lambda=1.0507009...)

    • SELU可以对神经网络进行子归一化,其输出值为均值为0,标准差为1.。内部归一化比外部归一化快,这意味着网络可以更快的收敛
    • 不可能出现梯度爆炸或者消失的问题
    • 相对较新,需要更多论文比较性的探索其在CNN和RNN等架构中的应用
    • 使用SELU在CNN中应用的论文

    7 GELU高斯误差线性单元激活函数

    GELU在最近的Transformer模型(谷歌的BERT和OpenAI的GPT-2)中得到了应用

    [GELU(x) = 0.5x(1+ anh(sqrt{2/pi} imes(x+0.044715x^3))) ]

    这个函数的图形非常有意思:
    在这里插入图片描述
    微分函数非常复杂,在此不做赘述。

    • 在NLP领域最佳,在Transformer模型中表现最好。
    • 避免梯度消失问题
    • 相当新颖的一个激活函数

    graph LR A1(梯度消失问题)-->A A2(梯度爆炸问题)-->A A((Sigmoid)) --> B((ReLU整流)) B1(解决梯度消失)-->B B2(死亡ReLU问题,有利有弊)-->B B --> C((ELU指数)) C1(计算成本高)-->C C2(无死亡ReLU问题)-->C B --> D((Leaky ReLU渗透)) D1(微分两部分都是线性相比ELU)-->D D2(无死亡ReLU问题)-->D C --> E((SELU扩展指数)) D --> E E1(没有梯度消失/爆炸问题)-->E

    如果有能力的小伙伴请看下面这篇进阶版本哦!
    有数学基础像更深研究的朋友点这里看这个博文

  • 相关阅读:
    8 -- 深入使用Spring -- 5...3 使用@CacheEvict清除缓存
    8 -- 深入使用Spring -- 5...2 使用@Cacheable执行缓存
    tomcat 的 server.xml配置文件
    WEB-INF目录与META-INF目录的作用
    一个tomcat设置多个端口,多个端口对应多个应用
    8 -- 深入使用Spring -- 5...1 启用Spring缓存
    8 -- 深入使用Spring -- 5... Spring 3.1 新增的缓存机制
    8 -- 深入使用Spring -- 4...6 AOP代理:基于注解的XML配置文件的管理方式
    eclipse中设置文件的编码格式为utf-8
    MySQL 触发器简单实例
  • 原文地址:https://www.cnblogs.com/PythonLearner/p/12903606.html
Copyright © 2011-2022 走看看