精华内容
下载资源
问答
  • 出自cs231n第四讲(介绍神经网络):

    出自cs231n第四讲(介绍神经网络):
    这里写图片描述

    展开全文
  • 深度神经网络引入非线性单元,使训练问题不再是一个凸优化问题,虽然我们很难得到最优解,但是可以通过梯度下降去寻找局部最小值。 增强模型的拟合能力,理论上只要有足够的神经元,一层隐藏层就可以表达任意函数。 ...
        

    图片描述

    作用

    深度神经网络引入非线性单元,使训练问题不再是一个凸优化问题,虽然我们很难得到最优解,但是可以通过梯度下降去寻找局部最小值。

    • 增强模型的拟合能力,理论上只要有足够的神经元,一层隐藏层就可以表达任意函数。

    性质

    • 可微(多元函数):函数可微保证使用梯度下降优化的可计算性。
    • 单调性:保证梯度方向相对稳定。
    • 输出值范围:当输出有限,由于特征表示受有限权值影响,基于梯度的优化方法会更加稳定;当输出无限,特征表示不受影响,但由于高梯度需要小学习率。
    • 非饱和性:

    当激活函数满足如下要求,称为右饱和:
    clipboard.png
    当激活函数满足如下要求,称为左饱和:
    clipboard.png
    激活函数饱和会造成梯度值接近0,导致梯度消失使模型无法收敛。

    sigmoid

    sigmoid函数,导函数图像:

    clipboard.png

    sigmoid激活函数具有“连续可微”,“单调性”,“输出值有限”。通过查看导函数图像,sigmoid激活函数最大的问题就是两端饱和,造成梯度消失(解决办法:使用relu激活函数,BN等),此外输出不以0中心(以0中心的好处是可以加快模型收敛)。
    目前sigmoid激活函数多使用在二分类问题(对于大于二分类问题,如果类别之间存在相互关系使用sigmoid,反之使用softmax),门控机制的判断等。

    import tensorflow as tf
    tf.enable_eager_execution()
    
    sigmoid_test=tf.nn.sigmoid([-3.,-2.,-1.,0.0,1.,2.,3.],name='sigmoid_op')
    
    print(sigmoid_test)

    输出:

    tf.Tensor(
    [0.04742587 0.11920292 0.26894143 0.5        0.7310586  0.880797
     0.95257413], shape=(7,), dtype=float32)

    tanh

    tanh函数,导函数图像:

    clipboard.png

    tanh激活函数输出区间[-1,1],输出值以0为中心,与sigmoid激活函数相比具有更大的梯度值,再加上输出值以0为中心,模型收敛更快。不过它依然存在两端饱和,梯度消失问题还是存在,tanh激活函数在RNN模型中应用较多。

    import tensorflow as tf
    tf.enable_eager_execution()
    
    tanh_test=tf.nn.tanh([-3.,-2.,-1.,0.0,1.,2.,3.],name='tanh_op')
    
    print(tanh_test)

    输出:

    tf.Tensor(
    [-0.9950547 -0.9640276 -0.7615942  0.         0.7615942  0.9640276
      0.9950547], shape=(7,), dtype=float32)

    relu

    relu函数,导函数图像:

    clipboard.png

    relu与线性单元的区别是在其一半的定义域上输出为0,这使得它易于优化,计算。通过图像可得,relu激活函数的梯度不仅大,而且一致,更重要的是它没有sigmoidtanh激活函数的饱和性,有效缓解了梯度消失问题。目前,relu激活函数是神经网络隐藏层的首选。
    但是,它最大的问题是当输入小于0时,输出值为0,此时神经元将无法学习。

    import tensorflow as tf
    tf.enable_eager_execution()
    
    relu_test=tf.nn.relu([-3.,-2.,-1.,0.0,1.,2.,3.],name='relu_op')
    tf.nn.relu
    print(relu_test)

    输出:

    tf.Tensor([0. 0. 0. 0. 1. 2. 3.], shape=(7,), dtype=float32)

    leakyrelu

    leakyrelu函数,导函数图像:

    clipboard.png

    leakyrelu激活函数是relu的衍变版本,主要就是为了解决relu输出为0的问题。如图所示,在输入小于0时,虽然输出值很小但是值不为0。
    leakyrelu激活函数一个缺点就是它有些近似线性,导致在复杂分类中效果不好。

    import tensorflow as tf
    tf.enable_eager_execution()
    
    # alpha: Slope of the activation function at x < 0
    leaky_relu_test=tf.nn.leaky_relu([-3.,-2.,-1.,0.0,1.,2.,3.],alpha=0.2,name='leaky_relu_op')
    print(leaky_relu_test)

    输出:

    tf.Tensor([-0.6 -0.4 -0.2  0.   1.   2.   3. ], shape=(7,), dtype=float32)

    elu

    elu函数,导函数图像:

    clipboard.png

    elurelu的区别在负区间,relu输出为0,而elu输出会逐渐接近,更具鲁棒性。elu激活函数另一优点是它将输出值的均值控制为0(这一点确实和BN很像,BN将分布控制到均值为0,标准差为1)。

    import tensorflow as tf
    tf.enable_eager_execution()
    
    elu_relu_test=tf.nn.elu([-10000,-100.,-3.,-2.,-1.,0.0,1.,2.,3.],name='elu_relu_op')
    print(elu_relu_test)

    输出:

    tf.Tensor(
    [-1.         -1.         -0.95021296 -0.86466473 -0.63212055  0.
      1.          2.          3.        ], shape=(9,), dtype=float32)

    softmax

    softmax单元常作为网络的输出层,它很自然地表示了具有 k 个可能值的离散型随机变量的概率分布。

    clipboard.png

    softmax将向量等比例压缩到[0,1]之间,且保证所有元素之和为1。

    import tensorflow as tf
    tf.enable_eager_execution()
    
    softmax_test=tf.nn.softmax([-3.,-2.,-1.,0.0,1.,2.,3.],name='softmax_op')
    print(softmax_test)
    softmax_test_sum=tf.reduce_sum(softmax_test)
    print(softmax_test_sum)

    输出:

    tf.Tensor(
    [0.0015683  0.00426308 0.01158826 0.03150015 0.0856263  0.23275642
     0.6326975 ], shape=(7,), dtype=float32)
    tf.Tensor(1.0, shape=(), dtype=float32)

    总结

    激活函数的选择还要根据项目实际情况,考虑不同激活函数的优缺点。

    展开全文
  • 因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。 下图为激活函数的计算过程 y=h(b+w1x1+w2x2)y=h(b+w_{1}x_{1}+w_{2}x_{2})y=h(b+w1​x1​+w2​x2​),我们将该式拆开可以...

    激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。

    下图为激活函数的计算过程
    在这里插入图片描述

    y=h(b+w1x1+w2x2)y=h(b+w_{1}x_{1}+w_{2}x_{2}),我们将该式拆开可以写为:a=b+w1x1+w2x2a=b+w_{1}x_{1}+w_{2}x_{2}y=h(a)y=h(a)即为右侧圆圈中所示。

    一、Sigmoid激活函数形式为:f(x)=11+exf(x)=\frac{1}{1+e^{-x}},由基本的微积分知识可以推导出,该函数的导数形式为:f(x)=f(x)(1f(x))f^{\prime}(x)=f(x)(1-f(x))。该函数的图像如下所示
    在这里插入图片描述
    从图像中不难看出,Sigmoid函数会出现梯度消失和梯度爆炸的情况,这是因为该函数将输入和输出映射到(0,1),当自变量很大或者很小的时候,该函数的导数f(x)=f(x)(1f(x))f^{\prime}(x)=f(x)(1-f(x))的值都会趋向于0,造成梯度消失的情况。

    二、Tanh激活函数的形式为:f(z)=tanh(z)=ezezez+ezf(z)=tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}
    其对应的导数形式为:f(z)=1(f(z))2f^{\prime}(z)=1-(f(z))^2,其图像如下图所示
    在这里插入图片描述
    从图像中不难看出Tanh就是Sigmoid函数的平移,从函数表达式来看,tanh(x)=2sigmoid(2x)1tanh(x)=2sigmoid(2x)-1,因此Tanh函数也会由于相同的原因导致梯度消失的情况。

    三、ReLu激活函数的形式为:f(x)=max(0,x)f(x)=max(0,x)或者h(x)={x(x>0)0(x0)h(x)=\left\{\begin{array}{ll}x & (x>0) \\0 & (x \leqslant 0)\end{array}\right.,其对应的导数形式为:h(x)={1(x>0)0(x0)h(x)=\left\{\begin{array}{ll}1 & (x>0) \\0 & (x \leqslant 0)\end{array}\right.,其图像如下图所示
    在这里插入图片描述
    四、ReLu函数相比于Sigmoid函数和Tanh函数的优势在于
    1.ReLu函数是利用阈值来进行因变量的输出,因此其计算复杂度会比剩下两个函数低(后两个函数都是进行指数运算)
    2.ReLu函数的非饱和性可以有效地解决梯度消失的问题,提供相对宽的激活边界。
    3.ReLU的单侧抑制提供了网络的稀疏表达能力。

    五、ReLu函数相比于Sigmoid函数和Tanh函数的劣势在于
    1.ReLU的局限性在于其训练过程中会导致神经元死亡的问题。这是由于函数f(x)=max(0,x)f(x)=max(0,x)导致负梯度在经过该ReLU单元时被置为0,且在之后也不被任何数据激活,即流经该神经元的梯度永远为0,不对任何数据产生响应。在实际训练中,如果学习率(Learning Rate)设置较大,会导致超过一定比例的神经元不可逆死亡,进而参数梯度无法更新,整个训练过程失败。
    鉴于此,人们设计了ReLu函数的变体即Leaky ReLu(LReLu),其表达式为:
    f(x)={x(x>0)ax(x0)f(x)=\left\{\begin{array}{ll}x & (x>0) \\ax & (x \leqslant 0)\end{array}\right.,其图像如下图示(假设a的值为0.01):
    在这里插入图片描述
    LReLU与ReLU的区别在于, 当z<0时其值不为0,而是一个斜率为a的线性函数,一般a为一个很小的正常数, 这样既实现了单侧抑制,又保留了部分负梯度信息以致不完全丢失。但另一方面,a值的选择增加了问题难度,需要较强的人工先验或多次重复训练以确定合适的参数值。
    基于此,参数化的PReLU(Parametric ReLU)应运而生。它与LReLU的主要区别是将负轴部分斜率a作为网络中一个可学习的参数,进行反向传播训练,与其他含参数网络层联合优化。而另一个LReLU的变种增加了“随机化”机制,具体地,在训练过程中,斜率a作为一个满足某种分布的随机采样;测试时再固定下来。Random ReLU(RReLU)在一定程度上能起到正则化的作用。

    展开全文
  • 深度学习常见激活函数总结

    一.激活函数概览

    基本上,入门深度学习的第一件事情就是了解”神经元”的构造,激活函数算是最基本的一个”部件”了吧.那激活函数到底有什么用呢?为什么需要激活函数?激活函数的定义是什么呢?
    下面这篇论文提供了激活函数的定义以及常见的”饱和”的定义,以及对于激活函数的一些思考.大家可以参考一下.

    Noisy Activation Functions
    引用这篇论文的定义:激活函数就是映射这里写图片描述,且函数几乎处处可导.
    那为什么需要激活函数呢?一般认为,激活函数的作用是给神经网络加入非线性的因素.激活函数一般都是非线性函数,要是没有了激活函数,那么神经网络难以对于生活中常见的非线性的数据建模.所以,神经网络中激活函数是不可缺少的.

    二.常见的激活函数

    这里仅仅列出经常见到的,常用的激活函数,更多的新的激活函数类型可以跟踪最新的paper,
    这里的激活函数的所有代码及绘图可在我的GitGub找到:
    MachineLearningCode/NeuralNet/ActivationFunction/
    好了,开始正式总结了.

    Ⅰ.sigmoid

    这里写图片描述
    老朋友了,但是还是要介绍一下,sigmod算是”曾经”使用最广的激活函数了,简单,良好的非线性映射,但是也有致命的问题,就是梯度消失.所以现代的神经网络架构很少用他了.
    这里写图片描述

    Ⅱ.tanh

    这里写图片描述
    这里写图片描述

    Ⅲ.ReLU

    修正线性单元(Rectified linear unit)
    这里写图片描述
    也常常表示为
    这里写图片描述
    线性修正单元应当是现在用的最广的激活函数了,要是你不知道用什么激活函数,就用ReLU先试一下吧.
    这里写图片描述

    Ⅳ.LReLU,PReLU,RReLU

    这三个都是对于ReLU的改进,三个的函数的写法可以近似的认为是一样的.细节上有一些差别.
    这里写图片描述
    其中a可以看做是斜率,也就是说,这个激活函数多引进了一个参数.
    这里写图片描述
    对于LReLU来说,a是固定的,你可以通过各种验证方式选出一个合适的a值.
    PReLU是对于LReLU的改进,可以自适应的学习参数而不是固定的,原论文中建议初始化为0.25.
    RReLU的a是一个给定范围内的随机变量,随机选择的,在一定程度上可以起到正则化的作用.
    给出一张总结的图
    这里写图片描述

    Ⅴ.ELU

    Exponential Linear Units的缩写,函数形式为
    这里写图片描述
    其中a>0.
    这里写图片描述

    右侧的线性部分能够缓解梯度消失,左侧的软饱和能够对于输入变化鲁棒.而且收敛速度更快.

    Ⅵ.softplus

    这里写图片描述
    这里写图片描述

    Ⅶ.softsign

    这里写图片描述
    这里写图片描述

    展开全文
  • 一,什么的激活函数 激活函数是神经网络中对数据做非线性变换的函数。如下所示: 输入的x值,经过权值相乘合并之后再经过‘激活函数’得到一个映射值。 二,激活函数的作用 因为线性的数据表达过于单一,若...
  • 1、为什么使用激活函数?  如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。 如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近...
  • 深度学习激活函数

    2018-04-03 18:54:08
    欢迎关注我们的网站:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识!...常见激活函数都有哪些?以及如何选择合适的激活函数?本节我们将重点对上述问题进行讨论。 线性...
  • 一、关于激活函数 设置激活函数是为了使之能拟合更多的情况,如果仅仅是线性加权那么无论多少层仍然相当于是线性组合,拟合效果十分有限。...二、常见激活函数介绍 1、Sigmoid 数学表达式: 几何图像: ...
  • 深度学习中常用的激活函数和损失函数 对于激活函数跟损失函数做一下记录,后面再看时也方便,可能有些图片搬运的各位大佬的,还请见谅。 激活函数 激活函数有很多,主要记录常用的和比较经典的一些,例如sigmoid、...
  • 上一篇文章介绍了激活函数的作用,就想一并整理一下深度学习领域中常见激活函数。在深度学习中,常见激活函数有三种:sigmoid函数,tanh函数,ReLU函数。我们可以在LSTM网络中同时见到tanh函数和sigmoid函数,...
  • 深度学习(一)~常见激活函数常见激活函数1. Sigmoid型函数1. Logistic函数2. Tanh函数3. Hard-Logistic函数和Hard-Tanh函数2. ReLU函数(1). Leaky ReLU(2). 带参数的ReLU(即PReLU)(3). ELU函数(4). Softplus函数3. ...
  • 深度学习常见激活函数总结

    千次阅读 2018-07-07 23:20:17
    深度学习常见激活函数总结 本文这里介绍了深度学习常见激活函数,因为深度学习在训练时利用反向传播的思 想, 需要计算激活函数的导数。针对以下四种激活, 介绍其特点: 1. sigmoid activation function...
  • 常见激活函数特点

    2020-09-30 17:16:40
    深度学习常见激活函数的特点
  • 常见深度学习激活函数及优缺点比较 1、什么是激活函数2、为什么要用3、都有什么激活函数4、sigmoid,Relu,softmax1. 什么是激活函数如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个...
  • 一:深度学习常见激活函数以及用途 1.背景,为什么需要激活函数? 答:当输入激励达到一定强度,神经元就会被激活,产生输出信号。模拟这一细胞激活过程的函数,就叫激活函数。 1)神经网络中如果不加非线性变换...
  • 常见激活函数包括:sigmoid, tanh, relu等。https://blog.csdn.net/u013250416/article/details/80991831 损失函数:度量神经网络的输出的预测值,与实际值之间的差距的一种方式。常见的损失函数包括:最小二乘...
  • 深度学习里,Sigmoid函数是常见激活函数。特别注意的是,当使用Sigmoid做激活函数的时候,损失函数不能选择MSE。 因为Sigmoid的导数为f(x)(1−f(x))。假设当预测值为f(x)=1而真实值为0的时候,此时虽然(yi−y˜...
  • 激活函数、损失函数、优化函数都分别是什么?有什么作用? 下面,就以激活函数、损失函数、优化函数在神经网络中的作用,浅析一二。 利用神经网络进行分类、检测、分割等任务的关键,...常见激活函数包括:sigm...
  • 本文主要介绍损失函数、优化器、反向传播、链式求导法则、激活函数、批归一化。 1 经典损失函数 1.1交叉熵损失函数——分类 (1)熵(Entropy)  变量的不确定性越大,熵也就越大,把它搞清楚所需要的信息量也...
  • 一、常见激活函数总结 激活函数:就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。 常见的激活函数包括 Sigmoid TanHyperbolic(tanh) ReLu softplus softmax ELU PReLU  这些函数有...
  • 参考资料: 深度学习中几种常见激活函数理解与总结
  • 当我们初学深度学习时,对于激活函数和损失函数的选择并不了解,这里提出一些建议 问题类型 最后一层激活 损失函数 二分类问题 sigmoid binary_crossentropy 多分类、单标签问题 softmax categorical_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 382
精华内容 152
关键字:

深度学习常见激活函数