• 深度学习中的激活函数有哪些?


    深度学习中的激活函数有Sigmoid、Softmax、Tanh、ReLU系列(ReLU、Leaky ReLU、Randomized LeakyReLU、PReLU、ELU、Softplus)、Maxout、Softsign(对称函数)、GELUs(dropout于relu的结合)、Swish、Mish等。使用激活函数只有一个目的:为多层神经网络模型提供非线性。因为,没有激活函数时,多层神经网络的多个矩阵连乘可以化简为单层神经网络的矩阵乘法。激活的本质是模仿大脑中神经元信号的传递,大脑神经元中的突触收到刺激后按照程度传递信号。深度学习中的激活函数也是如此,其输出的值越大表示收到的正向刺激越多,代表特征的有效程度;其输出值越小表示收到的负向测距越多,代表其为背景噪声的概率越大。

    1、激活函数的性质

    性质用于描述激活函数的特征,如是否完全连续可导(relu函数在x为0时不可导,默认此时导数值为0)、是否具备饱和区(饱和区也就是函数值域的界限,左饱和区对应着函数值域下届,右饱和区对应着函数的上届)。饱和区的输出较为平缓,不受x值的波动(x变化很大,但输出值y变化很小),也就是说饱和区的导数值很接近。它稳定了神经元的输出值,这为模型提供了一定的鲁棒性(不同的输入数据,提供相同的导数)。除此外,有的激活函数含包含可以训练的参数(如Maxout的参数全由训练得来)。
    因此对于激活函数可以根据其饱和区性质和是否参数做以下区分:
    饱和区
    具有上届和下届的激活函数: Sigmoid、Softmax、Tanh、Softsign(关于原点对称输出值为[0,1])
    具有下届的激活函数: ReLU系列(ReLU、Leaky ReLU、Randomized LeakyReLU、PReLU、ELU、Softplus)、Maxout、GELUs、Swish、Mish等

    参数
    有可训练参数的激活函数: PReLU(相当于可训练的Leaky ReLU)、Maxout、Swish
    有超参数的激活函数: Leaky ReLU(需要设置负区域x的斜率)、Randomized LeakyReLU、ELU(需要设置负区域 e x − 1 e^x-1 ex1的斜率)、GELUs(需要设置dropout的概率。)
    无参数的激活函数 Sigmoid、Softmax、Tanh、Softsign、ReLU、Softplus、Mish

    理想激活函数

    通过对多个激活函数的理解,各类论文中所提到的理想激活函数通常具备以下特性:1、输出是0均值的(可以加速收敛);2、单侧饱和(提供对背景噪声的鲁棒性)。博主结合于自身看法,激活函数应该还具备随机增强的特性,这样子更符合大脑中信号的传递(随机抑制一部分信号,同时也增强一部分信号,这于dropout存在一定程度的类似)

    关于relu等分段线性函数构建的非线性

    其通过多个不同斜率的直线,对曲线进行拟合,只要直线足够多,就能对曲线进行完美拟合。

    2、各种激活函数的细节

    以下链接描述了除Softplus、Softsign、GELUs外的所有激活函数,同时还对sigmoid、tanh进行了求导,也描述了从sigmoid函数到tanh函数的变化过程。
    https://zhuanlan.zhihu.com/p/481991088

    Softplus: https://blog.csdn.net/hy592070616/article/details/120623303

    Softsign: https://blog.csdn.net/hy592070616/article/details/120623589

    GELUs: https://blog.csdn.net/hy592070616/article/details/120623814

    3、如何选择合适的激活函数

    以下内容截取自 https://zhuanlan.zhihu.com/p/172254089

    先试试ReLU的效果如何。尽管我们指出了ReLU的一些缺点,但很多人使用ReLU取得了很好的效果。根据”奥卡姆剃刀原理“,如无必要,勿增实体,也就是优先选择最简单的。ReLU相较于其他激活函数,有着最低的计算代价和最简单的代码实现。
    如果ReLU效果不太理想,下一个建议是试试LeakyReLU或ELU。经验来看:有能力生成零均值分布的激活函数,相较于其他激活函数更优。需要注意的是使用ELU的神经网络训练和推理都会更慢一些,因为需要更复杂的指数运算得到函数激活值,如果计算资源不成问题,且网络并不十分巨大,可以事实ELU;否则,最好选用LeakyReLU。LReLU和ELU都增加了需要调试的超参数。
    如果有很多算力或时间,可以试着对比下包括随机ReLU和PReLU在内的所有激活函数的性能。当网络表现出过拟合时,随机ReLU可能会有帮助。而对PReLU来说,因为增加了需要学习的参数,当且仅当有很多训练数据时才可以试试PReLU的效果。

  • 相关阅读:
    Node.js中基于node-schedule实现定时任务之详解
    51系列—基于51单片机的数字频率计(代码+文档资料)
    【软件测试笔试题】阿里巴巴(中国)网络技术有限公司
    基于STM32 CubeMX利用RTC实现带温湿度模块的万年历
    docker-compose 搭建 Prometheus+Grafana监控系统
    绘制X-Bar-S和X-Bar-R图,监测过程,计算CPK过程能力指数
    每日一博 - WebHook vs Polling
    基于Java实现一个简单的YACC
    《21天精通TypeScript-6》-数组类型
    一台服务器,最大支持的TCP连接数是多少?
  • 原文地址:https://blog.csdn.net/a486259/article/details/126619704