精华内容
下载资源
问答
  • 神经网络激活函数

    2020-10-21 11:24:47
    不过在我们了解为什么把激活函数应用在人工神经网络中之前,了解一下激活函数与生物神经网络的关联依然是十分有用的。一个典型神经元的物理结构由细胞体、向其他神经元发送信息的轴突以及从其他神经元接受信号或信息...

    转载网址:https://blog.csdn.net/qq_30815237/article/details/86700680

           生物神经网络是人工神经网络的起源。然而,人工神经网络(ANNs)的工作机制与大脑的工作机制并不是十分的相似。不过在我们了解为什么把激活函数应用在人工神经网络中之前,了解一下激活函数与生物神经网络的关联依然是十分有用的。一个典型神经元的物理结构由细胞体、向其他神经元发送信息的轴突以及从其他神经元接受信号或信息的树突组成。      

                                                            

           图中,红色的圆圈表示两个神经元连接的区域。神经元通过树突从其他神经元中接受信号。树突的信号强度称为突触权值,用于与传入信号相乘。树突传出的信号在细胞体中累积,如果最后的信号强度超过了某个阈值,神经元就会允许轴突中的信息继续传递。否则,信号就会被阻止而得不到进一步的传播。激活函数决定了信号是否能够被通过。这个例子仅仅是个只有阈值这一个参数的简单的阶跃函数。现在,当我们学习了一些新东西(或者忘掉一些东西)时,阈值以及一些神经元的突触权重会发生改变。这在神经元中创造了新的连接从而使得大脑能学习到新的东西。让我们在人工神经元的基础上来再次理解相同的概念。

                                                  

           图中所示的例子是一个输入为x_{1}\rightarrow x_{n}的神经元,输入对应的权重分布为w_{1}\rightarrow w_{n},偏置为b,激活函数f作用于输入的权重之和上面。(x_{1},x_{2}...x_{n})是与权重(w_{1},w_{2}...w_{n})相乘的信号向量,接着是累加(例如:总和+偏置b)。最后,激活函数f作用于这个累加的总和。请注意,权重(w_{1},w_{2}...w_{n})和偏置b把输入信号转换为线性的。而另一方面,激活函数把信号转换为非线性的,而这种非线性使得我们能够学习到输入与输出之间任意复杂的变换关系。

          这些年来,人们使用了各种各样的激活函数,但是寻找一个合适的激活函数使神经网络学习得更好更快依然是一个非常活跃的研究领域。

    2. 网络是怎么学习的?

            理解神经网络学习的基本概念是关键。假设网络原本应该得到的输出为y。网络产生的输出为y{}'。应该得到的输出与实际得到的输出之间的差值(y{}'-y)被转换为损失函数(J(\theta ))的度量。当神经网络的错误很多时,该损失很大,而当损失很小时则网络的错误也很少。整个训练过程就是在训练集上寻找使损失函数最小的权值和偏置

                                                   

            在图中,损失函数的形状像一个碗。在训练过程中的任何一点,损失函数关于权值的偏导数只是在碗的当前位置上的斜率。可见通过向偏导数预测出的方向移动,我们可以到达碗的底部,从而最小化了损失函数。这个使用函数的偏导数来迭代找到局部最小值的方法称为梯度下降法。在人工神经网络中,权值通过称为反向传播的方法来更新。损失函数关于权值的偏导数用于更新权值。在某种意义上来说,误差是在网络上用导数来反向传播的。这是用迭代的方式来完成的,在许多轮迭代之后,损失达到最小值,并且损失函数的导数变为0。

    3. 激活函数的类型

         线性激活函数:形式为f(x)=x的简单的线性函数。基本上,输入不经过任何修正就传递给输出。  

                                              

    非线性激活函数:这些函数用于分离非线性可分的数据,并且是最常使用的激活函数。一个非线性等式决定了从输入到输出的映射。不同类型的非线性激活函数分别有sigmod, tanh, relu, lrelu, prelu, swish等等。本文接下来会详细的讨论这些激活函数           

    4. 在一个人工神经网络中,我们为什么需要非线性激活函数?

          神经网络用于实现复杂的函数,而非线性激活函数能够使神经网络逼近任意复杂的函数。如果没有激活函数引入的非线性,多层神经网络就相当于单层的神经网络。让我们看一个简单的例子来理解为什么没有非线性,神经网络甚至不可能逼近像XOR和XNOR门这样简单的函数。

         在下图中,我们用图表表示了XOR门。我们的数据集中有两个类,分别用交叉和圆圈来表示。当两个特征x_{1}x_{2}相同时,类的标签为红色交叉,否则就是蓝色圆圈。当输入为(0,0)与(1,1)时红色交叉的输出为0,输入为(0,1)和(1,0)时的蓝色圆圈的输出为1。

                                    

            通过上图我们可以看到数据点都是非线性可分的。也就是说,我们无法画出一条笔直的直线来分开蓝色圆圈和红色交叉。因此,我们才需要非线性的决策边界来将它们分开。如果没有非线性,神经网络就不能逼近XOR门。激活函数对控制神经网络的输出范围也起着至关重要的作用。神经元的输出\sum_{i}^{n} (w_{i}x_{i}+b)可以是非常大的值。而这个输出,若我们不经修改就输入到下一层神经元中,有可能演变成一个非常大的数从而使得计算过程非常难以处理。而激活函数的任务之一就是将神经元的输出映射到某个范围内(例如:0到1之间)。接下来,我们准备去了解一下不同类型的激活函数。

    非线性激活函数

    5.1 Sigmoid激活函数

           Sigmoid也被称为逻辑激活函数(Logistic Activation Function)。它将一个实数值压缩到0至1的范围内。当我们的最终目标是预测概率时,它可以被应用到输出层。它使很大的负数向0转变,很大的正数向1转变。在数学上表示为:

                                                                           

    下图为sigmoid函数以及它的导数图像。

                    

    Sigmoid激活函数的三个主要缺点是:

    1、梯度消失:sigmoid函数在0和1附近是平坦的。也就是说,sigmoid的梯度在0和1附近为0。在通过sigmoid函数网络反向传播时,当神经元的输出近似于0和1时它的梯度接近于0。这些神经元被称为饱和神经元。因此,这些神经元的权值无法更新。不仅如此,与这些神经元相连接的神经元的权值也更新得非常缓慢。这个问题也被称为梯度消失。所以,想象如果有一个大型网络包含有许多处于饱和动态的sigmoid激活函数的神经元,那么网络将会无法进行反向传播。

    2、不是零均值:sigmoid的输出不是零均值的。

    3、计算量太大:指数函数与其它非线性激活函数相比计算量太大了。下一个要讨论的是解决了sigmoid中零均值问题的非线性激活函数。

    Sigmoid 和 Softmax 区别:

      sigmoid将一个real value映射到(0,1)的区间,用来做二分类。而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。

    5.2 Tanh激活函数

                                               

         Tanh也被称为双曲正切激活函数。类似sigmoid,tanh也是把一个实数值压缩。与sigmoid不同的是,tanh在-1到1的输出范围内是零均值的。你可以把tanh函数看做是两个sigmoid加在一起。

           

           在实际运用中,tanh比sigmoid更好。这主要是因为Sigmoid函数在输入处于[-1,1]之间时,函数值变化敏感,一旦接近或者超出区间就失去敏感性,处于饱和状态,影响神经网络预测的精度值。而tanh的输出和输入能够保持非线性单调上升和下降关系,符合BP网络的梯度求解,容错性好,有界,渐进于0、1,符合人脑神经饱和的规律,与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。

          Tanh唯一的缺点是:tanh函数也存在着梯度消失的问题,因此在饱和时会导致梯度消失。为了解决梯度消失问题,让我们讨论另一个被称为线性整流函数(ReLU)的非线性激活函数,它比我们之前讨论的两个激活函数都更好,并且也是在今天应用最为广泛的激活函数。

    5.3 线性整流函数(ReLU)

       

            激活函数的导数如图所示,ReLU激活函数从底部进行了半矫正(half-rectified)。在数学上,它可以由这个简单的表达式表达:

                                                          f(z)=max(0,z)

              这意味着,当输入z<0时,输出为0。当输入z>0时,输出就是输入z的值。这个激活函数能够使网络更快的收敛。没有饱和意味着至少在正数范围内,能够对梯度消失有抵抗能力,所以神经元至少在一半的输入范围内不会反向传播,全部都是0的结果。ReLU在计算上非常有效率,因为它是使用简单的阈值实现的。

    ReLU如何引入非线性

    用形式化的语言来说,所谓非线性,就是一阶导数不为常数ReLu的定义是max(0, x),因此,ReLU的导数为:

    显然,ReLU的导数不是常数,所以ReLU非线性的。Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

      1、ReLu虽然在大于0的区间是线性的,在小于等于0的部分也是线性的,但是它整体不是线性的,因为不是一条直线,所以Relu函数是非线性函数。也就是说,线性和非线性都是就函数的整体而言的。用术语来说,线性、非线性是就函数的整个定义域而言的。这就意味着无论我们堆多少层网络,如果这些层都使用线性激活函数,那这些层最终等效于一层!那这样的模型的表达能力就很限了。多个线性操作的组合也是一个线性操作,没有非线性激活,就相当于只有一个超平面去划分空间。

         ReLu是非线性的,效果类似于划分和折叠空间,组合多个(线性操作 + ReLu)就可以任意的划分空间

                                                 
        2、对于浅层的机器学习,比如经典的三层神经网络,用它作为激活函数的话,那表现出来的性质肯定是线性的。但是在深度学习里,少则几十,多则上千的隐藏层,虽然,单独的隐藏层是线性的,但是很多的隐藏层表现出来的就是非线性的。举个简单的例子,一条曲线无限分段,每段就趋向直线,反过来,很多这样的直线就可以拟合曲线。类似,大规模的神经网络,包含很多这样的线性基本组件,自然也可以拟合复杂的非线性情况。Relu通过构造很多的线形空间(类似于折叠的方式),逼近非线性方程。

    但是Relu神经元有几个缺点:

    • 因为其将所有的输入负数变为0,在训练中可能很脆弱,很容易导致神经元失活,使其不会在任何数据点上再次激活。简单地说,ReLu可能导致神经元死亡。
    • 对于ReLu中(x<0)的激活,此时梯度为0,因此在下降过程中权重不会被调整。这意味着进入这种状态的神经元将停止对错误/输入的变化做出反应(仅仅因为梯度为0,没有任何变化)。这就是所谓的dying ReLu problem.

    平时使用的时候RELU的缺点并不是特别明显,只有在学习率设置不恰当(较大)的时候,会加快神经网络中神经元的“死亡”。

        为了解决relu激活函数在x<0时的梯度消失问题, 我们提出了被称为泄漏relu(Leaky Relu)的激活函数,这个激活函数试图解决ReLU激活函数”Dead ReLU”的问题。让我们详细了解一下leaky relu。

    5.4泄漏ReLU激活函数(leaky relu)

         Leaky ReLU激活函数是一个想要缓解relu消亡问题的尝试。它的函数表达式如下:

                                                              

                                            

        Leaky relu的思想就是当x<0时,会有个很小0.1的正斜率\alpha,这是一个超参数,可调。这个函数多少消除了relu的消亡问题,但是它的结果并不一致。虽然它具有relu激活函数的所有特征,例如:计算效率高、收敛速度快、在正区域不饱和等。它的思想可以进一步的扩展。如用一个常数项代替乘以x,从而使我们能够将这个常数项乘以一个能够使leaky relu更好工作的超参数。这个leaky relu的拓展被称为parametric relu(参数relu)。

    5.5 PReLU带参数激活函数(Parametric ReLU)

                                     

    PRelu的函数为:

                                                                                  

             其中\alpha为超参数。PRelu的思想是引进任意超参数\alpha,而这个\alpha可以通过反向传播学习(注意PRelu与leaky relu的区别,前者是学习得到,后者是我们认为设定)。这赋予了神经元在负区域内选择最好斜率的能力,因此,他们可以变成单纯的ReLU激活函数或者Leaky ReLU激活函数。如果\alpha=0,那么 PReLU 退化为ReLU;如果 \alpha是一个很小的固定值(如\alpha=0.01),则 PReLU 退化为 Leaky ReLU(LReLU)。 

    (1) PReLU只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。特别的,当不同channels使用相同的ai时,参数就更少了。

    (2) BP更新ai时,采用的是带动量的更新方式:
                                                              
           上式的两个系数分别是动量和学习率。需要特别注意的是更新ai时不施加权重衰减(L2正则化),因为这会把ai很大程度上push到0。事实上,即使不加正则化,试验中ai也很少有超过1的。

    (3) 整个论文,ai被初始化为0.25。

           总之,一般使用ReLU效果更好,但是你可以通过实验使用Leaky ReLU或者Parametric ReLU来观察它们是否能对你的问题给出最好的结果。

    5.6.ELU

         ELU函数是针对ReLU函数的一个改进型,相比于ReLU函数,在输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除ReLU死掉的问题,不过还是有梯度饱和和指数运算的问题。

                             

         其中α是一个可调整的参数,它控制着ELU负值部分在何时饱和。 右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快 
                               tensorflow中:tf.nn.elu(features, name=None)

    5.7、SELU

                                             

        经过该激活函数后使得样本分布自动归一化到0均值和单位方差(自归一化,保证训练过程中梯度不会爆炸或消失,效果比Batch Normalization 要好) 
         其实就是ELU乘了个lambda,关键在于这个lambda是大于1的。以前relu,prelu,elu这些激活函数,都是在负半轴坡度平缓,这样在activation的方差过大的时候可以让它减小,防止了梯度爆炸,但是正半轴坡度简单的设成了1。而selu的正半轴大于1,在方差过小的的时候可以让它增大,同时防止了梯度消失。这样激活函数就有一个不动点,网络深了以后每一层的输出都是均值为0方差为1。

    tensorflow中:tf.nn.selu(features, name=None)

    1. def selu(x):
    2. with ops.name_scope('elu') as scope:
    3. alpha = 1.6732632423543772848170429916717
    4. scale = 1.0507009873554804934193349852946
    5. return scale*tf.where(x>=0.0, x, alpha*tf.nn.elu(x))

                                

    5.8 SWISH激活函数

                                          

              Swish也被称为self-gated(自门控)激活函数,最近由谷歌研究人员发布。它的数学表达式为:

                                                                              

            一般来说,swish激活函数的表现比relu更好。从图中我们可以观察到swish激活函数在x轴的负区域内末端的图像形状与relu激活函数是不同的,这是因为swich激活函数即使输入的值在增加,它的输出也可以减少。大部分的激活函数都是单调的,即他们的输出值在输入增加的时候是不会减少的。但Swish在0点具有单边有界性,平滑且不单调。

    参考:https://mp.weixin.qq.com/s/wNX9Z-9CGrNoFqJ4qylpgA

             https://blog.csdn.net/qq_20909377/article/details/79133981

    展开全文
  • 神经网络激活函数对数函数 什么是激活功能? (What are Activation Functions?) Activation functions in neural networks are used to define the output of the neuron given the set of inputs. These are ...

    神经网络激活函数对数函数

    什么是激活功能? (What are Activation Functions?)

    Activation functions in neural networks are used to define the output of the neuron given the set of inputs. These are applied to the weighted sum of the inputs and transform them into output depending on the type of activation used.

    在给定输入集的情况下,神经网络中的激活函数用于定义神经元的输出。 将这些应用于输入的加权总和,并根据使用的激活类型将其转换为输出。

    Output of neuron = Activation(weighted sum of inputs + bias)

    神经元的输出=激活(输入的加权总和+偏差)

    为什么我们需要激活功能? (Why we need Activation Functions?)

    The main idea behind using activation functions is to add non-linearity.

    使用激活函数的主要思想是添加非线性

    Now, the question arises why we need non-linearity? We need neural network models to learn and represent complex functions. Thus, using activation functions in neural networks, aids in process of learning complex patterns from data and adds the capability to generate non-linear mappings from inputs to outputs.

    现在,出现了一个问题,为什么我们需要非线性? 我们需要神经网络模型来学习和表示复杂的功能。 因此,在神经网络中使用激活函数,有助于从数据中学习复杂模式,并增加了从输入到输出生成非线性映射的功能。

    激活功能的类型 (Types of Activation Functions)

    1. Sigmoid- It limits the input value between 0 and 1.

      Sigmoid-将输入值限制在0到1之间。

    Image for post
    Image for post

    Sigmoid maps the input to a small range of [0, 1]. As a result, there are large regions of the input space which are mapped to a very small range. This leads to a problem called vanishing gradient. It means that the most upstream layers will learn very slowly because essentially the computed gradient is very small due to the way the gradients are chained together.

    Sigmoid将输入映射到较小的[0,1]范围。 结果,输入空间中有很大的区域映射到很小的范围。 这导致了一个称为消失梯度的问题。 这意味着最上游的层将学习得非常缓慢,因为从本质上来说,由于将梯度链接在一起的方式,计算出的梯度非常小。

    2. Tanh- It limits the value between -1 and 1.

    2. Tanh-将值限制在-1和1之间。

    Image for post
    Image for post

    Difference between tanh and sigmoid — Apart from the difference in the range of these activation functions, tanh function is symmetric around the origin, whereas the sigmoid function is not.

    tanh和sigmoid之间的差异—除了这些激活函数范围的差异之外,tanh函数在原点周围是对称的,而sigmoid函数不是。

    Both sigmoid and tanh pose vanishing gradient problems when used as activation functions in neural networks.

    当在神经网络中用作激活函数时,S形和tanh都会出现消失的梯度问题。

    3. ReLU(Rectified Linear Unit)- It is the most popular activation function.

    3. ReLU(整流线性单位)-这是最流行的激活功能。

    Image for post
    • Outputs the same value for a positive value and zeroes out negative values.

      为正值输出相同的值,并将负值清零。
    • It is very fast to compute (given the simplicity of logic), thus improving training time.

      计算非常快(考虑到逻辑的简单性),从而缩短了训练时间。
    • ReLU does not pose vanishing gradient problem.

      ReLU不会造成梯度消失的问题。
    • It does not have a maximum value.

      它没有最大值。
    Image for post

    There are different variations of ReLU that are available like LeakyReLU, SELU, ELU, SReLU. Still, ReLU is widely used as it is simple, fast, and efficient.

    ReLU有不同的变体,如LeakyReLU,SELU,ELU,SReLU。 尽管如此,ReLU简单,快速且高效,因此被广泛使用。

    Implementation in PyTorch

    在PyTorch中实施

    torch.nn.ReLU() — applies the rectified linear unit function element-wise.

    torch.nn.ReLU() —将整流的线性单位函数按元素应用。

    Image for post
    nn.ReLU() used after covolution layernn.ReLU()在卷积层之后使用

    参考文献: (References:-)

    翻译自: https://medium.com/analytics-vidhya/activation-functions-in-neural-networks-bcafebfddbf2

    神经网络激活函数对数函数

    展开全文
  • 共30种神经网络激活函数汇总,其中25种有函数图像以及导数图像,包括函数表达式。
  • 基于matlab的人工神经网络激活函数示例基于matlab的人工神经网络激活函数示例
  • 介绍几个常用的神经网络激活函数,及其导数: sigmoid 函数 tanh 函数 ReLU 函数

    介绍

    本篇文章,介绍几个常用的神经网络激活函数:

    1. sigmoid 函数
    2. tanh 函数
    3. ReLU 函数

    sigmoid 函数

    sigmoid 函数表达式

    函数表达式如下所示:

    σ(z)=11+ez

    画出函数图像:

    import numpy as np
    import matplotlib.pyplot as plt
    
    def sigmoid(x):
        return 1.0/(1.0+np.exp(-x))
    
    x = np.linspace(-8,8,200)
    y = sigmoid(x)
    
    plt.plot(x,y)
    plt.show()


    这里写图片描述

    sigmoid 函数导数

    对 sigmoid 函数求导,可以得到如下表达式:

    σ(z)=ez(1ez)2=1(1ez)(111ez)=σ(z)(1σ(z))

    画出其导数图形,如下:

    def pre_sigmoid(z):
        return sigmoid(z)*(1-sigmoid(z))
    y_sigmoid_pre = pre_sigmoid(x)
    plt.plot(x, y_sigmoid_pre)


    这里写图片描述

    tanh 函数

    tanh 函数表达式

    函数表达式如下:

    tanh(z)=1e2z1+e2z=2σ(2z)1

    画出函数图像,如下所示:

    def tanh(x):
        return 2*sigmoid(2*x)-1
    
    y1 = tanh(x)
    plt.plot(x,y1)


    这里写图片描述

    tanh 函数导数

    tanh(z)=4σ(2z)
    def pre_tanh(z):
        return 4*pre_sigmoid(2*z)
    
    y_tanh_pre = pre_tanh(x)
    plt.plot(x, y_tanh_pre)


    这里写图片描述

    ReLU 函数

    ReLU 函数表达式

    ReLU(z)=max(z,0)

    函数图像如下所示:

    def relu(z):
        return np.maximum(0,z)
    y2 = relu(x)
    plt.plot(x,y2)


    这里写图片描述

    ReLU 函数的导数

    注意到,ReLU 函数在 z=0 处不可导,我们可以指定 z=0 处的导数为 0 或者 1。

    def pre_relu(z):
        result = []
        for i in z:
            if i >= 0: result.append(1)
            else: result.append(0)
        return result
    y_relu_pre = pre_relu(x)
    plt.plot(x, y_relu_pre)


    这里写图片描述

    小结

    首先,定义对任何函数求导的函数:

    def derivative(f, z, eps=0.0001):
        return (f(z+eps)-f(z-eps))/(2*eps)

    然后,将上述三个激活函数画在一起:

    x = np.linspace(-3,3,200)
    plt.plot(x, sigmoid(x), color="red")
    plt.plot(x, tanh(x), color="green")
    plt.plot(x, relu(x), color="blue")
    plt.legend(["sigmoid", "tanh", "relu"], loc="best")
    plt.grid()
    • plt.legend() 用来标示图注
    • plt.grid() 用来打开网格线


    这里写图片描述

    然后将三个激活函数的导数图像画在一起:

    plt.plot(x, derivative(sigmoid, x), color="red")
    plt.plot(x, derivative(tanh, x), color="green")
    plt.plot(x, derivative(relu, x), color="blue")
    plt.legend(["sigmoid", "tanh", "relu"], loc="best")
    plt.grid()


    这里写图片描述

    我的个人博客

    欢迎访问我的个人博客: www.wangs0622.com

    展开全文
  • 神经网络最全激活函数,包括sigmoid,tanh,ReLU,ELU,PReLU,softplus,liner等激活函数,应有尽有
  • 神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout) 常规 sigmoid 和 tanh sigmoid 特点:可以解释,比如将0-1之间的取值解释成一个神经元的激活率(firing rate) 缺陷...

    神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)

    常规 sigmoid 和 tanh

    sigmoid

    这里写图片描述

    这里写图片描述

    特点:可以解释,比如将0-1之间的取值解释成一个神经元的激活率(firing rate)

    缺陷:

    1. 有饱和区域,是软饱和,在大的正数和负数作为输入的时候,梯度就会变成零,使得神经元基本不能更新。
    2. 只有正数输出(不是zero-centered),这就导致所谓的zigzag现象:

    这里写图片描述

    详细说明:

    这里写图片描述

    3 . 计算量大(exp)

    tanh

    tanh函数定义如下:

    这里写图片描述

    激活函数形状:

    这里写图片描述

    tanh和sigmoid函数是具有一定的关系的,可以从公式中看出,它们的形状是一样的,只是尺度和范围不同。

    tanh是zero-centered,但是还是会饱和。

    ReLU 大家族

    ReLU

    这里写图片描述

    CNN中常用。对正数原样输出,负数直接置零。在正数不饱和,在负数硬饱和。relu计算上比sigmoid或者tanh更省计算量,因为不用exp,因而收敛较快。但是还是非zero-centered。

    relu在负数区域被kill的现象叫做dead relu,这样的情况下,有人通过初始化的时候用一个稍微大于零的数比如0.01来初始化神经元,从而使得relu更偏向于激活而不是死掉,但是这个方法是否有效有争议。

    LeakyReLU

    这里写图片描述

    为了解决上述的dead ReLU现象。这里选择一个数,让负数区域不在饱和死掉。这里的斜率都是确定的。

    PReLU

    parametric rectifier:

    f(x) = max(ax,x)

    但是这里的a不是固定下来的,而是可学习的。

    ELU

    这里写图片描述

    具有relu的优势,且输出均值接近零,实际上prelu和LeakyReLU都有这一优点。有负数饱和区域,从而对噪声有一些鲁棒性。可以看做是介于relu和LeakyReLU之间的一个东西。当然,这个函数也需要计算exp,从而计算量上更大一些。

    大一统:Maxout

    maxout是通过分段线性函数来拟合所有可能的凸函数来作为激活函数的,但是由于线性函数是可学习,所以实际上是可以学出来的激活函数。具体操作是对所有线性取最大,也就是把若干直线的交点作为分段的界,然后每一段取最大。

    maxout可以看成是relu家族的一个推广。

    缺点在于增加了参数量。

    更多相关见以前整理的一篇:深度学习中的各种tricks_2.0_maxout

    2018年04月22日21:53:22

    展开全文
  • 神经网络激活函数汇总 神经网络激活函数汇总Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout 阅读量,收藏均比较高 (机器学习)-激活函数的使用 激活函数(ReLU, Swish, Maxout) 小白都能看懂的softmax...
  • 神经网络激活函数和损失函数的选择 python深度学习.pdf 参考: https://blog.csdn.net/lxiao428/article/details/88651767
  • 神经网络激活函数的作用是什么
  • 神经网络激活函数:sigmoid、tanh、ReLU、softmax发布时间:2018-10-07 21:32,浏览次数:874, 标签:sigmoidtanhReLUsoftmax激活函数作用:将权值结果转化成分类结果。常用于* 逻辑回归(Logistic Regression)* 神经...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,313
精华内容 3,325
关键字:

神经网络激活函数