zoukankan      html  css  js  c++  java
  • 激活函数综述

    前言

    激活函数,是神经网络中实现非线性计算的关键,再深的线性神经网络,本质上都和单步线性计算等价。所以,激活函数这个非线性单元是神经网络化腐朽为神奇的关键。

    激活函数的要求:

    1. 计算简单,特别是导函数计算简单
    2. 连续可导(允许在若干个点上不可导)
    3. 值域合理,这样可以尽量使得不同网络层的输入和输出数据相似

    Sigmoid型函数

    sigmoid型函数是一类S型曲线函数,两端饱和。

    logistic函数

    logistic激活函数是一个左右饱和的激活函数,将输入压缩到(0, 1)的区间中。

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

    它的导数也非常好计算:

    [f(x) = logistic(x)\ f(x)' = f(x)[1-f(x)] ]

    tanh函数

    tanh又称双曲正切。

    它的值域是(-1, 1),所以,它是中心化的

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

    其函数图像如下所示:

    相比之下,tanh比logistic好,第一是中心化,第二是不会导致梯度消失。

    ReLu相关函数

    ReLU激活函数

    ReLU全称Rectified Linear Unit,修正线性单元。

    数学表达式如下:

    [ReLu(x) = max(0, x) ]

    函数图像如下:

    优势:在x>0时导数为1,一定程度上缓解了梯度消失的问题。

    缺点:死亡ReLU问题

    死亡ReLU问题

    如果某一个隐藏层的ReLU神经元在所有训练数据上都不能被激活(导数都为0),那么在以后的训练中将永远不能被激活

    因此,有很多改进的办法。

    LeakyReLU函数

    LeakyReLU在x<0时也能保持一个很小的梯度(gamma),其数学表达式为:

    [LeakyReLU(x) = egin{cases} x, & x>=0\ gamma x, & x<0 end{cases} ]

    这里的(gamma)是一个很小的常数。

    PReLU函数

    PReLU(Parametric ReLU,带参数的ReLU)则是引入一个可学习的参数,其中对于第(i)个神经元有:

    [PReLU_i(x) = egin{cases} x, & x>0\ gamma_i x, & x leq 0 end{cases} ]

    当然也可以设置一组神经元共享一个参数。

    ELU函数

    ELU全称Exponential Linear Unit,指数线性单元。

    它通过调整(gamma)来近似地达到零中心化。

    [ELU(x) = egin{cases} x, & x>0\ gamma(e^x - 1), & x leq 0 end{cases} ]

    Softplus函数

    [Softplus(x) = log (1+e^x) ]

    接下来在同一张图中对比下这几种激活函数:

    Swish函数和GLEU函数

    Swish函数

    Swish函数是一种自门控激活函数

    [swish(x) = x sigma(eta x) ]

    (eta)是可学习的或者固定的超参数,(sigma)是一个Logistic函数,起到门控的作用。

    可以看到:

    • (eta = 0),为线性函数
    • (eta = 100),近似为ReLU函数

    所以Swish函数可以看成是线性函数和ReLU之间的非线性插值函数。

    GELU函数

    GELU,全称Gaussian Error Linear Unit,高斯误差线性单元。

    [GELU(x) = xP(X leq x) ]

    其中(P(X leq x))是高斯分布(N(mu, sigma^2))的累积分布函数。其中(mu)(sigma)一般为0和1

    如下图所示,高斯分布的累积分布函数为S型函数,

    高斯分布的概率密度函数为:

    高斯分布的累积分布函数为:

    因此GELU函数可以用Tanh函数或者Logistic函数来近似。

    [GELU(x) approx 0.5x(1 + tanh(sqrt frac{2}{pi} (x + 0.044715x^3))) ]

    或者

    [GELU(x) approx xsigma(1.702x) ]

    使用Logistic函数来近似时,GELU相当于一种特殊的Swish函数。

    Maxout单元

    Maxout的输入是上一层神经元的全部原始输出(x = [x_1; x_2; ...; x_D])

    它有(K)个权重向量,最后输出最大的那个:

    [z_k = w_k^T x + b_k\ maxout(x) = max_{k in [1, K]}(z_k) ]

    其中,(1 leq k leq K).


  • 相关阅读:
    【git】强制覆盖本地代码(与git远程仓库保持一致)
    ffmpeg CLI常用命令
    旧机改造步骤
    macbook air 2012 mid 安装 windows10 双系统遇到错误 no bootable device insert boot disk and press any key
    window、Linux 文本文件转换
    phalcon bug: model的findFirst会自动忽略一些空格
    oss2罗列所有文件
    如何让linux的history命令显示时间记录
    nginx 常用配置
    shell脚本 切换用户
  • 原文地址:https://www.cnblogs.com/YoungF/p/13424038.html
Copyright © 2011-2022 走看看