精华内容
下载资源
问答
  • 激励函数

    2018-09-18 12:20:08
    什么是激励函数激励函数作用? 激励函数也成激活函数。不使用激励函数的话,神经网络的每层都只是做线性变换,多层输入叠加后也还是线性变换。因为线性模型的表达能力不够,激励函数可以引入非线性因素   常见...

    什么是激励函数?激励函数作用?

    激励函数也成激活函数。不使用激励函数的话,神经网络的每层都只是做线性变换,多层输入叠加后也还是线性变换。因为线性模型的表达能力不够,激励函数可以引入非线性因素

     

    常见的激励函数?

     

    如何选择激励函数?

    1.可以创造自己的激励函数来处理自己的问题, 不过要确保的是这些激励函数必须是可以微分的, 因为在 backpropagation 误差反向传递的时候, 只有这些可微分的激励函数才能把误差传递回去.

    2.想要恰当使用这些激励函数, 还是有窍门的. 比如当你的神经网络层只有两三层, 不是很多的时候, 对于隐藏层, 使用任意的激励函数, 随便掰弯是可以的, 不会有特别大的影响. 不过, 当你使用特别多层的神经网络, 不得随意选择利器. 因为这会涉及到梯度爆炸, 梯度消失的问题. 

    3.深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。 

    4.少量的层结构,可以任意选择;卷积神经网络,一般选择  RELU ; RNN 中  一般选择  relu 或 tanh

     

    激励函数的扩展阅读

    https://blog.csdn.net/hyman_yx/article/details/51789186 

    https://blog.csdn.net/tyhj_sf/article/details/79932893

    展开全文
  • 常用激活函数(激励函数)理解与总结

    万次阅读 多人点赞 2018-05-13 23:07:19
    学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数、tanh函数、Relu函数。那么我们就来详细了解下激活函数方方面面的知识。本文的内容包括几个部分: 什么是...

    引言

    学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数、tanh函数、Relu函数。那么我们就来详细了解下激活函数方方面面的知识。本文的内容包括几个部分:

    1. 什么是激活函数?
    2. 激活函数的用途(为什么需要激活函数)?
    3. 有哪些激活函数,都有什么性质和特点?
    4. 应用中如何选择合适的激活函数?

    如果你对以上几个问题不是很清楚,下面的内容对你是有价值的。

    什么是激活函数?

    首先要了解神经网络的基本模型。(不熟悉的同学请去看本人另外一篇介绍:人工神经网络基本原理
    单一神经元模型如下图所示。
    这里写图片描述
    神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

    激活函数的用途(为什么需要激活函数)?

    如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。

    有哪些激活函数,都有什么性质和特点?

    早期研究神经网络主要采用sigmoid函数或者tanh函数,输出有界,很容易充当下一层的输入。
    近些年Relu函数及其改进型(如Leaky-ReLU、P-ReLU、R-ReLU等)在多层神经网络中应用比较多。下面我们来总结下这些激活函数:

    Sigmoid函数

    Sigmoid 是常用的非线性的激活函数,它的数学形式如下:
    f(z)=11+e−z f(z)=\frac{1}{1+e^{-z}}f(z)=1+ez1
    Sigmoid的几何图像如下:
    这里写图片描述
    特点:
    它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
    缺点:
    sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些 缺点。
    缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。首先来看Sigmoid函数的导数,如下图所示:
    这里写图片描述
    如果我们初始化神经网络的权值为 [0,1][0,1][0,1] 之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 (1,+∞)(1,+∞)(1,+) 区间内的值,则会出现梯度爆炸情况。
    详细数学分析见文章:http://neuralnetworksanddeeplearning.com/chap5.html 中文译文:深度神经网络为何很难训练
    缺点2:Sigmoid 的 output 不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如x>0, f=wTx+bx>0, \ f= w^Tx+bx>0, f=wTx+b,那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的梯度消失问题相比还是要好很多的。
    缺点3:其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。

    tanh函数

    tanh函数解析式:
    tanh(x)=ex−e−xex+e−xtanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}tanh(x)=ex+exexex
    tanh函数及其导数的几何图像如下图:
    tanh(x)及其导数的几何图像
    tanh读作Hyperbolic Tangent,它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

    Relu函数

    Relu函数的解析式:
    Relu=max(0,x)Relu=max(0,x)Relu=max(0,x)
    Relu函数及其导数的图像如下图所示:
    这里写图片描述
    ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient,如上图所示。ReLU虽然简单,但却是近几年的重要成果,有以下几大优点:
    1) 解决了gradient vanishing问题 (在正区间)
    2)计算速度非常快,只需要判断输入是否大于0
    3)收敛速度远快于sigmoid和tanh

    ReLU也有几个需要特别注意的问题:
    1)ReLU的输出不是zero-centered
    2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

    尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!

    Leaky ReLU函数(PReLU)

    函数表达式:f(x)=max(αx,x)f(x)=max(\alpha x,x)f(x)=max(αx,x)
    Leaky Relu函数及其导数的图像如下图所示:
    (有同学在评论中反映下图有误,其实没有错误,左半边直线斜率非常接近0,所以看起来像是平的。就不改了,α=0.01\alpha=0.01α=0.01看起来就是这样的。感谢大家提意见 ^ _ ^)
    这里写图片描述
    人们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为αx\alpha xαx而非0,通常α=0.01\alpha=0.01α=0.01。另外一种直观的想法是基于参数的方法,即ParametricReLU:f(x)=max⁡(αx,x)Parametric ReLU:f(x) = \max(\alpha x, x)ParametricReLU:f(x)=max(αx,x),其中α\alphaα
    可由方向传播算法学出来。理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

    ELU (Exponential Linear Units) 函数

    函数表达式:
    f(x)={x,if x>0α(ex−1),otherwisef(x)= \begin{cases}x,& \text{if } x > 0\\ \alpha(e^x - 1), & \text{otherwise} \end{cases}f(x)={x,α(ex1),if x>0otherwise
    函数及其导数的图像如下图所示:
    这里写图片描述

    ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及:

    不会有Dead ReLU问题
    输出的均值接近0,zero-centered
    

    它的一个小问题在于计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。

    MaxOut函数

    这个函数可以参考论文《maxout networks》,Maxout是深度学习网络中的一层网络,就像池化层、卷积层一样等,我们可以把maxout 看成是网络的激活函数层,我们假设网络某一层的输入特征向量为:X=(x1,x2,……xd),也就是我们输入是d个神经元。Maxout隐藏层每个神经元的计算公式如下:
    这里写图片描述

    上面的公式就是maxout隐藏层神经元i的计算公式。其中,k就是maxout层所需要的参数了,由我们人为设定大小。就像dropout一样,也有自己的参数p(每个神经元dropout概率),maxout的参数是k。公式中Z的计算公式为:

    这里写图片描述

    权重w是一个大小为(d,m,k)三维矩阵,b是一个大小为(m,k)的二维矩阵,这两个就是我们需要学习的参数。如果我们设定参数k=1,那么这个时候,网络就类似于以前我们所学普通的MLP网络。
    我们可以这么理解,本来传统的MLP算法在第i层到第i+1层,参数只有一组,然而现在我们不这么干了,我们在这一层同时训练n组的w、b参数,然后选择激活值Z最大的作为下一层神经元的激活值,这个max(z)函数即充当了激活函数。

    应用中如何选择合适的激活函数?

    这个问题目前没有确定的方法,凭一些经验吧。
    1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。
    2)如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.
    3)最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.

    参考资料

    1.聊一聊深度学习的activation function—夏飞
    2.http://blog.csdn.net/cyh_24/article/details/50593400
    3.http://www.cnblogs.com/tornadomeet/p/3428843.html
    4.《maxout networks》

    展开全文
  • 激励函数的意义和类比 在学习神经网络的时候,接触到的第一个晦涩的概念就是激励函数这个名词。所以小编就查了好多资料来理解这个概念,

    激励函数的意义和分类

    激励函数的理解

    在学习神经网络的时候,接触到的第一个晦涩的概念就是激励函数这个名词。所以小编就查了好多资料来理解这个概念。
    百度百科给出的定义是:神经网络中的每个节点接受输入值,并将输入值传递给下一层,输入节点会将输入属性值直接传递给下一层(隐层或输出层)。在神经网络中,隐层和输出层节点的输入和输出之间具有函数关系,这个函数称为激励函数。
    小编通俗的理解是,输入与输出有一种关系,这种关系需要一个函数来表示,也就是激励函数。

    常见激励函数

    1、Sigmoid
    Sigmoid是一个非线性激励函数,定义为:
    在这里插入图片描述
    函数图形为:

    在这里插入图片描述

    展开全文
  • PyTorch 激励函数

    2020-02-09 16:33:43
    文章目录非线性方程激励函数常用选择Torch 中的激励函数 非线性方程 把整个网络简化成这样一个式子. Y = Wx, W 就是我们要求的参数, y 是预测值, x 是输入值. 用这个式子, 我们很容易就能描述刚刚的那个线性问题, ...

    非线性方程

    在这里插入图片描述
    在这里插入图片描述
    把整个网络简化成这样一个式子. Y = Wx, W 就是我们要求的参数, y 是预测值, x 是输入值. 用这个式子, 我们很容易就能描述刚刚的那个线性问题, 因为 W 求出来可以是一个固定的数. 不过这似乎并不能让这条直线变得扭起来 , 激励函数作用可以掰弯它

    激励函数

    在这里插入图片描述
    AF 就是指的激励函数.
    AF其实就是另外一个非线性函数. 比如说relu, sigmoid, tanh. 将这些掰弯利器嵌套在原有的结果之上, 强行把原有的线性结果给扭曲了. 使得输出结果 y 也有了非线性的特征. 举个例子, 比如我使用了 relu 这个掰弯利器, 如果此时 Wx 的结果是1, y 还将是1, 不过 Wx 为-1的时候, y 不再是-1, 而会是0.

    可以创造自己的激励函数来处理自己的问题, 不过要确保的是这些激励函数必须是可以微分的, 因为在 backpropagation 误差反向传递的时候, 只有这些可微分的激励函数才能把误差传递回去.

    常用选择

    在这里插入图片描述
    恰当使用这些激励函数, 比如当你的神经网络层只有两三层, 不是很多的时候, 对于隐藏层, 使用任意的激励函数, 随便掰弯是可以的, 不会有特别大的影响. 不过, 当你使用特别多层的神经网络, 在掰弯的时候, 不得随意选择利器. 因为这会涉及到梯度爆炸, 梯度消失的问题。

    在具体的例子中, 我们默认首选的激励函数是哪些. 在少量层结构中, 我们可以尝试很多种不同的激励函数. 在卷积神经网络 CNN的卷积层中, 推荐的激励函数是 relu. 在循环神经网络中 recurrent neural networks, 推荐的是 tanh 或者是 relu

    Torch 中的激励函数

    平时要用到的就这几个. relu, sigmoid, tanh, softplus.

    import torch
    import torch.nn.functional as F
    from torch.autograd import Variable
    import matplotlib.pylab as plt
    
    #fake data
    x=torch.linspace(-5,5,200)#从-5到5分成200个点线段数据
    x=Variable(x)
    x_np=x.data.numpy()#torch用matplotlib无法识别 所以还要转化成numpy
    
    # 几种常用的 激励函数
    y_relu = F.relu(x).data.numpy()
    y_sigmoid = F.sigmoid(x).data.numpy()
    y_tanh = F.tanh(x).data.numpy()
    y_softplus = F.softplus(x).data.numpy()
    #y_softmax=F.softmax(x).data.numpy()
    #softmax不是做线图的是做概率图的
    
    
    plt.figure(1, figsize=(8, 6))
    #num:图像编号或名称,数字为编号 ,字符串为名称
    #figsize:指定figure的宽和高,单位为英寸;
    plt.subplot(221)#由三个整型数值构成,第一个代表行数,第二个代表列数,第三个代表索引位置
     # 第一行的左图
    plt.plot(x_np, y_relu, c='red', label='relu')
    plt.ylim((-1, 5))
    #设置y轴的数值显示范围。
    plt.legend(loc='best')
    #设置图例
    
    plt.subplot(222)
    plt.plot(x_np, y_sigmoid, c='red', label='sigmoid')
    plt.ylim((-0.2, 1.2))
    plt.legend(loc='best')
    
    plt.subplot(223)
    plt.plot(x_np, y_tanh, c='red', label='tanh')
    plt.ylim((-1.2, 1.2))
    plt.legend(loc='best')
    
    plt.subplot(224)
    plt.plot(x_np, y_softplus, c='red', label='softplus')
    plt.ylim((-0.2, 6))
    plt.legend(loc='best')
    
    plt.show()
    

    在这里插入图片描述

    展开全文
  • 神经网络常用激励函数

    千次阅读 2017-11-03 10:24:30
    激励函数
  • TensorFlow激励函数

    千次阅读 2019-01-03 09:52:31
    激励函数 三种激励 relu sigmoid tanh 本次利用relu激励进行离散点拟合 # 激励函数 # 三种激励 relu sigmoid tanh # 多层神经网络时 激励选择需慎重 会导致梯度消失或梯度爆炸 import tensorflow as tf import...
  • 通俗理解神经网络之激励函数(Activation Function)

    万次阅读 多人点赞 2016-06-30 11:56:56
    通俗理解神经网络激励函数
  • 这下子的解释牛逼了,我之前一直在想,你这个激励函数有什么用呢,看完下面一段话好像明白了一些.......... 当我们提到线性方程的时候,我们会不得不想到非线性方程,在这个时候我们可以假设,女生长得越漂亮,越多的...
  • TensorFlow中的激励函数

    2020-07-24 21:56:30
    目录什么是激励函数选择激励函数TensorFlow中的激励函数 以下文字引用自莫烦PYTHON 什么是激励函数 激励函数是一个非线性函数. 比如说relu, sigmoid, tanh. 将这些激励函数嵌套在原有的结果之上, 强行把原有的线性...
  • 激励函数选择注意

    2019-06-27 09:56:41
    常见激励函数 对于两三层的神经网络,激励函数在选择时可多种尝试 卷积神经网络的卷积层:可使用relu激励函数;在循环神经网络中,使用relu/tanh 对于多层神经网络,激励函数选择时需注意,不然易造成梯度...
  • 1、激励函数的作用 不使用激励函数的话,神经网络的每层都只是做线性变换,多层输入叠加后也还是线性变换。因为线性模型的表达能力不够,激励函数可以引入非线性因素。 2、Torch中的激励函数 import torch ...
  • 神经网络 激励函数

    千次阅读 2018-10-04 18:06:20
    激励函数:作用是提供规模化的非线性化能力,使得神经网络可以任意逼近任何非线性函数,模拟神经元被激发的状态变化。如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的...
  • 本图片中系统总结了机器学习中的常见激励函数,及其图像、求导结果、定义域、值域等信息。非常适合查阅使用
  • tensorflow 激励函数

    2018-09-04 19:50:32
    当神经网络层数较少时,各种通用激励函数都行 卷积神经网络:relu 循环神经网络:relu 或tanh
  • TensorFlow的激励函数

    2018-10-23 15:21:54
    到现在我们已经了解了TensorFlow的特点和基本操作(见文章:快速掌握TensorFlow(一)),以及TensorFlow计算图、会话的操作...激励函数是所有神经网络算法的必备神器,通过加入激励函数可实现张量计算的非线性化...
  • 激励函数-Activation Funciton

    千次阅读 2017-02-28 23:20:30
    一、什么是激励函数 激励函数一般用于神经网络的层与层之间,上一层的输出通过激励函数的转换之后输入到下一层中。神经网络模型是非线性的,如果没有使用激励函数,那么每一层实际上都相当于矩阵相乘。经过非线性的...
  • 神经网络的激励函数

    2019-02-14 17:25:47
    首先要了解的是激励函数其实就是一个非线性方程,往往非线性问题所需要的非线性方程就是用 激励函数X线性方程得到的。 上图中的y=wx就是一个线性方程,AF(activation function)为非线性方程 激励函数一般为relu.....
  • ML 激励函数 Activation Function(整理
  • 什么是激活函数? 激活函数的用途(为什么需要激活函数)?...在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。 激励函数作用:  &.
  • 莫烦 Python 激励函数

    2018-09-09 12:35:47
    什么是激励函数 (Activation Function) 作者: 莫烦 编辑: 莫烦 2016-11-03 学习资料: Theano 激励函数 教程 Tensorflow 激励函数 教程 PyTorch 激励函数 教程 今天我们会来聊聊现代神经网络中 必不可少...
  • 神经网络激励函数

    2017-06-06 20:14:00
    常用激励函数 每一次输入和权重w线性组合之后,都会通过一个激励函数(也可以叫做非线性激励函数),经非线性变换后输出。实际的神经网络中有一些可选的激励函数,我们一一说明一下最常见的几种: 1 sigmoid ...
  • 目录什么是激励函数非线性方程激励函数激励函数什么是 ActivationTorch 中的激励函数torch.linspace 什么是激励函数 非线性方程 激励函数也就是为了解决我们日常生活中 不能用线性方程所概括的问题. 那么. 什么是...
  • 为降低电子传输能耗在电力供应总量中所占比重,设计基于激励函数的综合能源能耗控制系统。在电力能源感知器的协调范围内,设置电能服务器与综合控制主机,实现综合能源能耗控制系统的硬件运行环境搭建。通过定义激励...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,185
精华内容 874
关键字:

激励函数