美文网首页
激活函数——Relu,Swish

激活函数——Relu,Swish

作者: 乔大叶_803e | 来源:发表于2019-12-16 14:53 被阅读0次

    形式如下:
    f(x)= \begin{cases} 0,x \leq0\\ \ x , x > 0 \end{cases}

    relu 公式

    f(x) = \sum^{inf}_{i=1}\sigma(x -i +0.5) -----stepped sigmoid
    \approx log(1+e^x) ------- softplus function
    \approx max(0,x+N(0,1))------- Rel function

    其中\sigma(z) = \frac{1}{1+e^{-z}} -------- sigmoid

    下面解释上述公式中的softplus,Noisy ReLU.

    softplus函数与ReLU函数接近,但比较平滑, 同ReLU一样是单边抑制,有宽广的接受域(0,+inf), 但是由于指数运算,对数运算计算量大的原因,而不太被人使用.并且从一些人的使用经验来看(Glorot et al.(2011a)),效果也并不比ReLU好.
    softplus的导数恰好是sigmoid函数

    softplus

    ReLU的稀疏性

    当前,深度学习一个明确的目标是从数据变量中解离出关键因子。原始数据(以自然数据为主)中通常缠绕着高度密集的特征。然而,如果能够解开特征间缠绕的复杂关系,转换为稀疏特征,那么特征就有了鲁棒性(去掉了无关的噪声)。稀疏特征并不需要网络具有很强的处理线性不可分机制。那么在深度网络中,对非线性的依赖程度就可以缩一缩。一旦神经元与神经元之间改为线性激活,网络的非线性部分仅仅来自于神经元部分选择性激活。
    对比大脑工作的95%稀疏性来看,现有的计算神经网络和生物神经网络还是有很大差距的。庆幸的是,ReLu只有负值才会被稀疏掉,即引入的稀疏性是可以训练调节的,是动态变化的。只要进行梯度训练,网络可以向误差减少的方向,自动调控稀疏比率,保证激活链上存在着合理数量的非零值。

    ReLU 缺点

    • 坏死: ReLU 强制的稀疏处理会减少模型的有效容量(即特征屏蔽太多,导致模型无法学习到有效特征)。由于ReLU在x < 0时梯度为0,这样就导致负的梯度在这个ReLU被置零,而且这个神经元有可能再也不会被任何数据激活,称为神经元“坏死”。* 无负值: ReLU和sigmoid的一个相同点是结果是正值,没有负值.
    • 无负值: ReLU和sigmoid的一个相同点是结果是正值,没有负值.

    ReLU变种

    Leaky ReLU

    当𝑥<0时,𝑓(𝑥)=𝛼𝑥,其中𝛼非常小,这样可以避免在𝑥<0时,不能够学习的情况:

    f(x) = max(\alpha x,x)

    称为Parametric Rectifier(PReLU)将 𝛼 作为可学习的参数.

    当 𝛼 从高斯分布中随机产生时称为Random Rectifier(RReLU)

    当固定为𝛼=0.01时,是Leaky ReLU。

    优点:

    • 不会过拟合
    • 计算简单有效
    • 比sigmoid/tanh收敛快。

    Swish

    f(x) = x \cdot sigmoid(\beta x)

    \beta是个常识或可训练的参数。Swish 具备有下界、平滑、非单调的特性。
    Swish在深层模型上的效果优于 ReLU。

    例如,仅仅使用 Swish 单元替换 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分类准确率提高 0.9%,Inception-ResNet-v 的分类准确率提高 0.6%。

    Swish

    导数

    swish -d

    \beta= 0

    Swish变为线性函数 f(x)= \frac{x}{2}

    \beta \longrightarrow \infty , \sigma(x) = (1+exp(-x))^{-1} Swish变为 relu:f(x) = 2max(0,x)

    所以Swish函数可以看做是介于线性函数与relu函数之间的平滑函数

    Maxout

    Maxout可以看做是在深度学习网络中加入一层激活函数层,包含一个参数k.这一层相比ReLU,sigmoid等,其特殊之处在于增加了k个神经元,然后输出激活值最大的值.

    我们常见的隐含层节点输出:

    h_i(x) = sigmoid(x^T W_{....i} + b_i)

    在maxout网络中,其隐含层节点的输出表达式为

    h_i(x) = max_{j\in[1,k]}z_{ij}

    相关文章

      网友评论

          本文标题:激活函数——Relu,Swish

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