• 机器学习--激活函数篇


    前言

      在机器学习应用中,经常会使用一些激活函数,例如:sigmoid、ReLU等。这里简单记录总结一下为什么要用激活函数、怎么去选择激活函数

    为什么要用激活函数

      以下是激活函数具备的一些性质,也就是我们为什么要使用激活函数的原因:

    • 非线性:当激活函数是非线性的时候,多次网络才能够去逼近任意的函数。
    • 可微性:当优化的方法是基于梯度的方法的时候,这个性质是必须的。 
    • 单调性:当激活函数是单调函数的时候,单层的网络能够保证是凸函数。
    • $f(x) approx x$: 当激活函数满住这个性质的时候,如果参数的初始化是随机选取的一些较小的值,那么神经网络的训练一般会比较高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
    • 输出值的范围:当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出事无限的时候,模型的训练会更加高效,不过在这种情况下,一般需要较小的学习率(这段不是特别理解,实验做少了)

    常见激活函数简介

      激活函数的发展经历了Sigmoid -> Tanh -> ReLU -> Leaky ReLU -> Maxout这样的过程,还有一个特殊的激活函数Softmax,因为它只会被用在网络中的最后一层,用来进行最后的分类和归一化。先贴一个总结的图:

    Sigmoid

      数学公式:

      sigmoid非线性函数的数学公式是

    [公式]

      函数图像如下图所示。它输入实数值并将其“挤压”到0到1范围内,适合输出为概率的情况,但是现在已经很少有人在构建神经网络的过程中使用sigmoid。

      存在问题:

    • Sigmoid函数饱和使梯度消失。当神经元的激活在接近0或1处时会饱和,在这些区域梯度几乎为0,这就会导致梯度消失,几乎就有没有信号通过神经传回上一层。
    • Sigmoid函数的输出不是零中心的。因为如果输入神经元的数据总是正数,那么关于[公式]的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数,这将会导致梯度下降权重更新时出现z字型的下降。

     

    Tanh

      Tanh非线性函数的数学公式是

    [公式]

      Tanh非线性函数图像如下图所示,它将实数值压缩到[-1,1]之间。

      存在问题:

      Tanh解决了Sigmoid的输出是不是零中心的问题,但仍然存在饱和问题。为了防止饱和,现在主流的做法会在激活函数前多做一步batch normalization,尽可能保证每一层网络的输入具有均值较小的、零中心的分布。

    ReLU

      激活函数公式是[公式]

      ReLU非线性函数图像如下图所示。相较于sigmoid和tanh函数,ReLU对于随机梯度下降的收敛有巨大的加速作用;sigmoid和tanh在求导时含有指数运算,而ReLU求导几乎不存在任何计算量。

      对比sigmoid类函数主要变化是:

      1)单侧抑制;

      2)相对宽阔的兴奋边界;

      3)稀疏激活性。

      存在问题:

      ReLU单元比较脆弱并且可能“死掉”,而且是不可逆的,因此导致了数据多样化的丢失。通过合理设置学习率,会降低神经元“死掉”的概率。

     

    Leaky ReLU

      函数公式:

    [公式]

      其中 [公式] 是很小的负数梯度值,比如0.01,Leaky ReLU非线性函数图像如下图所示。这样做目的是使负轴信息不会全部丢失,解决了ReLU神经元“死掉”的问题。更进一步的方法是PReLU,即把 [公式] 当做每个神经元中的一个参数,是可以通过梯度下降求解的。

    Maxout

      Maxout是对ReLU和leaky ReLU的一般化归纳,函数公式是

    [公式]

      Maxout非线性函数图像如下图所示。Maxout具有ReLU的优点,如计算简单,不会 saturation,同时又没有ReLU的一些缺点,如容易go die。

      存在问题:

      每个神经元的参数double,这就导致整体参数的数量激增。

    Softmax

      Softmax用于多分类神经网络输出,目的是让大的更大。函数公式为:

    [公式]

    示意图如下。

      Softmax是Sigmoid的扩展,当类别数k=2时,Softmax回归退化为Logistic回归。

  • 相关阅读:
    转 webpack 插件 svg-sprite-loader
    form-data与x-www-form-urlencoded的区别【转】
    nginx echo 高级语法 echo_location【转】
    占位【转】
    gocron在linux环境下安装及设置开机启动【转】
    AES加密2【转】
    Redis的KEYS命令引起宕机事件【纯转】
    Java四种锁及分布式锁的初解【纯转】
    java转发二进制图片流【原】
    SpringBoot整合Redis及Redis工具类撰写【纯转】
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12893104.html
Copyright © 2020-2023  润新知