• 一、ReLU(Rectified Linear Activation Function)
    • 1、优点
    • 2、缺点
    • 3、补充
      • 1.Leaky ReLUs
      • 2.参数化修正线性单元(PReLU)
      • 3.随机纠正线性单元(RReLU)
  • 二、Sigmoid
    • 1、优点
    • 2、缺点
  • 三、Tanh(hyperbolic tangent)
  • 四、Sigmoid 和 Tanh 激活函数的局限性
  • 五、softmax(归一化指数函数)
    • 1、将预测结果转化为非负数
    • 2、各种预测结果概率之和等于1
    • 3、例子
  • 六、pipeline

激活函数的引入是为了增加神经网络模型的非线性,没有激活函数每层就相当于矩阵相乘。每一层输出都是上层的输入的线性函数,无论神经网络多少层,输出都是输入的线性组合,就是最原始的感知机.
加入激活函数,给神经元引入非线性因素,神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

一、ReLU(Rectified Linear Activation Function)

ReLU全名Rectified Linear Unit,意思是修正线性单元。Relu激活函数是常用的神经激活函数。
ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。
如图:

1、优点

①ReLu具有稀疏性,可以使稀疏后的模型能够更好地挖掘相关特征,拟合训练数据;
②在x>0区域上,不会出现梯度饱和、梯度消失的问题;
③计算复杂度低,不需要进行指数运算,只要一个阈值就可以得到激活值。

2、缺点

输出不是0对称。
②由于小于0的时候激活函数值为0,梯度为0,所以存在一部分神经元永远不会得到更新。

3、补充

为了弥补sigmoid函数和tanh函数的缺陷所以出现了ReLU激活函数。

这些激活函数的出现有一个历史先后问题, sigmoid函数出现的早, ReLU是晚辈;其次,不存在绝对的说法让ReLU完胜其它任何方案,因为在很多时候,不试一试别的方案,谁都不敢拍胸脯说这个网络已经没法提升了, 这就是神经网络的特点。

ReLU激活函数求导不涉及浮点运算,所以速度更快。在z大于零时梯度始终为1;在z小于零时梯度始终为0;z等于零时的梯度可以当成1也可以当成0,实际应用中并不影响。
对于隐藏层,选择ReLU作为激活函数,能够保证z大于零时梯度始终为1,从而提高神经网络梯度下降算法运算速度。

1.Leaky ReLUs

ReLU是将所有的负值都设为零,相反,Leaky ReLU是给所有负值赋予一个非零斜率。Leaky ReLU激活函数是在声学模型(2013)中首次提出的。以数学的方式我们可以表示为:

ai是(1,+∞)区间内的固定参数。

2.参数化修正线性单元(PReLU)

PReLU可以看作是Leaky ReLU的一个变体。在PReLU中,负值部分的斜率是根据数据来定的,而非预先定义的。作者称,在ImageNet分类(2015,Russakovsky等)上,PReLU是超越人类分类水平的关键所在。

3.随机纠正线性单元(RReLU)

“随机纠正线性单元”RReLU也是Leaky ReLU的一个变体。在RReLU中,负值的斜率在训练中是随机的,在之后的测试中就变成了固定的了。RReLU的亮点在于,在训练环节中,aji是从一个均匀的分布U(I,u)中随机抽取的数值。形式上来说,我们能得到以下结果:

下图是ReLU、Leaky ReLU、PReLU和RReLU的比较:

  1. PReLU中的ai是根据数据变化的;
  2. Leaky ReLU中的ai是固定的;
  3. RReLU中的aji是一个在一个给定的范围内随机抽取的值,这个值在测试环节就会固定下来。

二、Sigmoid

Sigmoid 激活函数 , 也被称为 Logistic函数神经网络,传统上是一个非常受欢迎的神经网络激活函数。函数的输入被转换成介于0.0和1.0之间的值。大于1.0的输入被转换为值1.0,同样,小于0.0的值被折断为0.0。所有可能的输入函数的形状都是从0到0.5到1.0的 s 形。在很长一段时间里,直到20世纪90年代早期,这是神经网络的默认激活方式。
其作用就是引入非线性。
其函数原型如图:

sigmoid函数的函数曲线以及其导数曲线如下图所示:

 Sigmoid的特点就是将输出映射到[0,1]之内,可以和概率轻易对应起来,很容易用来反映二分类结果的概率。事实上逻辑回归就是使用sigmoid函数作为输出概率的,后面可能会整理逻辑回归,同时谈一谈sigmoid和softmax的关系。但是显然sigmoid可以和类别概率对应起来,但是也仅仅能和二分类概率对应起来,对于多分类问题无能为力。
  另一个特点就是反向传播的计算比较简单,因为这个函数有一个特性,f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f’(x),根据这个公式可以很快速的计算出反向传播的导数值。但是这个函数的计算本身就有点不容易,要计算指数还要计算除法。
  还有一点不足之处就是,这个函数由于具有软饱和性,训练的时候,对于绝对值较大的数,计算出来的梯度非常小,如果多层的梯度相乘,导致计算出来的最终梯度非常小,使得参数几乎无法更新,训练无法正常进行下去,这就是所谓的梯度消失问题。
  我们可以从函数图像很直观的看到,sigmoid函数是==不以0为中心的,==对所有的参数求导后,发现值是同正同负的,使得所有的参数更新时,只能朝一个方向,这样梯度下降的时候,下降的不够自由,就只能Z字形下降,会减慢收敛速度,具体的细节请大家自行研究。

当z的值从-∞向+∞过渡时,sigmoid函数的取值范围为(0, 1),这正好是概率的取值范围,当z=0时,sigmoid(0)的值为0.5。因此,模型就可以将sigmoid的输出值 p 作为正例的概率,而 1-p 作为负例的概率。以阈值0.5作为两个分类的阈值,就是看 p 与 1-p 哪个类别的概率值更大,预测的结果就为哪个类别。

1、优点

1、 值域在0和1之间;

2 、 函数具有非常好的对称性。

3、sigmoid的优点在于输出范围有限,所以数据在传递的过程中不容易发散。当然也有相应的缺点,就是饱和的时候梯度太小。

4、求导容易。

2、缺点

见第四节

三、Tanh(hyperbolic tangent)

Tanh的诞生比Sigmoid晚一些,sigmoid函数我们提到过有一个缺点就是输出不以0为中心,使得收敛变慢的问题。而Tanh则就是解决了这个问题。Tanh就是双曲正切函数。等于双曲余弦除双曲正弦。函数表达式和图像见下图。这个函数是一个奇函数。
双曲正切函数 ,简称 tanh,是一个形状类似的非线性激活函数,输出值介于-1.0和1.0之间。在20世纪90年代后期和21世纪初期,由于使用 tanh 函数的模型更容易训练,而且往往具有更好的预测性能,因此 tanh 函数比 Sigmoid激活函数更受青睐。
如图:

对tanh函数求导需要一定的数学基础,这里直接给出结果。tanh’(x)=1-tanh2(x),这个函数同样是根据函数求导数很容易,但是函数值的计算比较复杂。

同样可以很轻易的证明这个函数两边趋于无穷极限是饱和的,函数图像和sigmoid函数非常像,其实就是直接在竖直方向拉伸两倍,然后在y轴向下平移了1个单位,使得函数的中心回到了0,然后在水平方向上拉伸两倍。tanh(x)=2sigmoid(2X)−1。解决了sigmoid函数收敛变慢的问题,相对于sigmoid提高了收敛速度。

其他特点都是类似的,根据函数值求导数值简单,但是指数的计算复杂。梯度消失的特点依旧保留,因为两边的饱和性使得梯度消失,进而难以训练。
  尽管tanh函数和sigmoid函数存在梯度消失的问题,但是与之类似,如果函数的梯度过大又会导致梯度爆炸的问题,显然tanh和sigmoid的导函数非常有界,根据导数公式,很容易得出tanh’(x)∈[0,1],所以完全不用担心因为使用激活函数而产生梯度爆炸的问题。

四、Sigmoid 和 Tanh 激活函数的局限性

一个神经网络由层节点组成,并学习将输入的样本映射到输出。对于给定的节点,将输入乘以节点中的权重,并将其相加。此值称为节点的summed activation。然后,经过求和的激活通过一个激活函数转换并定义特定的输出或节点的“activation”。

最简单的激活函数被称为线性激活,其中根本没有应用任何转换。 一个仅由线性激活函数组成的网络很容易训练,但不能学习复杂的映射函数。线性激活函数仍然用于预测一个数量的网络的输出层(例如回归问题)。

非线性激活函数是更好的,因为它们允许节点在数据中学习更复杂的结构 。两个广泛使用的非线性激活函数是sigmoid 函数和双曲正切 激活函数。

**Sigmoid和 tanh 函数的一个普遍问题是它们值域饱和了 。**这意味着,大值突然变为1.0,小值突然变为 -1或0。此外,函数只对其输入中间点周围的变化非常敏感。

无论作为输入的节点所提供的求和激活是否包含有用信息,函数的灵敏度和饱和度都是有限的。一旦达到饱和状态,学习算法就需要不断调整权值以提高模型的性能。

最后,随着硬件能力的提高,通过 gpu 的非常深的神经网络使用Sigmoid 和 tanh 激活函数不容易训练。在大型网络深层使用这些非线性激活函数不能接收有用的梯度信息。错误通过网络传播回来,并用于更新权重。每增加一层,错误数量就会大大减少。这就是所谓的**消失梯度问题,**它能有效地阻止深层(多层)网络的学习。

虽然非线性激活函数的使用允许神经网络学习复杂的映射函数,但它们有效地阻止了学习算法与深度网络的工作。在2000年代后期和2010年代初期,通过使用诸如波尔兹曼机器和分层训练或无监督的预训练等替代网络类型,这才找到了解决办法

五、softmax(归一化指数函数)

它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。下图展示了softmax的计算方法:

首先,我们知道概率有两个性质:1)预测的概率为非负数;2)各种预测结果概率之和等于1。

softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。

1、将预测结果转化为非负数

下图为y=exp(x)的图像,我们可以知道指数函数的值域取值范围是零到正无穷。softmax第一步就是将模型的预测结果转化到指数函数上,这样保证了概率的非负性。

2、各种预测结果概率之和等于1

为了确保各个预测结果的概率之和等于1。我们只需要将转换后的结果进行归一化处理。==方法就是将转化后的结果除以所有转化后结果之和,可以理解为转化后结果占总数的百分比。==这样就得到近似的概率。

3、例子

下面为大家举一个例子,假如模型对一个三分类问题的预测结果为-3、1.5、2.7。我们要用softmax将模型结果转为概率。步骤如下:

1)将预测结果转化为非负数

y1 = exp(x1) = exp(-3) = 0.05

y2 = exp(x2) = exp(1.5) = 4.48

y3 = exp(x3) = exp(2.7) = 14.88

2)各种预测结果概率之和等于1

z1 = y1/(y1+y2+y3) = 0.05/(0.05+4.48+14.88) = 0.0026

z2 = y2/(y1+y2+y3) = 4.48/(0.05+4.48+14.88) = 0.2308

z3 = y3/(y1+y2+y3) = 14.88/(0.05+4.48+14.88) = 0.7666

总结一下softmax如何将多分类输出转换为概率,可以分为两步:

1)分子:通过指数函数,将实数输出映射到零到正无穷。

2)分母:将所有结果相加,进行归一化。

下图为斯坦福大学CS224n课程中最softmax的解释:

参考链接

六、pipeline

最近在看深度学习论文,和技术文章,Pipeline是很常见的单词,但理解一直很模糊,查询了资料,做一些笔记。

pipeline,中文意为管线,意义等同于流水线。

一个生动的形容
Pipeline,你 土味一点 你把它 翻译成 一条龙服务
专业一点,叫 它 综合解决方案,就行。

例子1,最典型的就是Gpu渲染管线,它指渲染一个画面需要经过多少到工序。
例子2,爬虫框架里面。它就是指某个项目或者框架里面需要用到流水线的设计来简化设计,降低复杂度并提高性能。是一种设计方法,是我们将现实中的社会分工借鉴并运用到计算机编程的例子。
例子3,算法或者大数据分析里的指可重复使用,针对新的数据,直接输入数据,可以得到结果的过程。

例子4,回到深度学习模型框架的Pipeline ,和前面三个例子类似,现在的深度学习模型也由很多组件步骤链接起来的。

一个基础的 深度学习的Pipeline 主要包含了下述 5 个步骤:

- 数据读取
- 数据预处理
- 创建模型(具体到模型也有相应的Pipeline,比如模型的具体构成部分:比如GCN+Attention+MLP的混合模型)
- 评估模型结果
- 模型调参

上5个步骤可以抽象为一个包括多个步骤的流水线式工作,从数据收集开始至输出我们需要的最终结果。

总之,深度学习的Pipeline就是模型实现的步骤。深度学习现在的Pipeline 一般都比较强调模型的组件构成流程。

ReLU,Sigmoid,Tanh,softmax,pipeline【基础知识总结】相关推荐

  1. Linear Regression、Logistic Regression、激励函数activation function(relu,sigmoid, tanh, softplus)

    1.5.2.Linear Regression 1.5.2.1.Linear Regression 1.5.2.1.1.案例1 1.5.2.1.2.案例2 1.5.2.1.3.案例3源码(带有保存模型 ...

  2. 【Python--torch(激活函数说明+代码讲解)】激活函数(sigmoid/softmax/ELU/ReLU/LeakyReLU/Tanh)

    [Python–torch]激活函数(sigmoid/softmax/ELU/ReLU/LeakyReLU/Tanh) 文章目录 [Python--torch]激活函数(sigmoid/softmax ...

  3. 【学习经验分享NO.16】超全代码-python画Sigmoid,ReLU,Tanh等十多种激活函数曲线及其梯度曲线(持续更新)

    文章目录 前言 1. Sigmoid 2. tanh 3. ReLU 4. Leaky ReLU 5. ELU 6.PReLU 7. Softmax 8. Swish 9. Maxout 10. So ...

  4. 花书+吴恩达深度学习(二)非线性激活函数(ReLU, maxout, sigmoid, tanh)

    目录 0. 前言 1. ReLU 整流线性单元 2. 绝对值整流线性单元 3. 渗漏整流线性单元 4. 参数化整流线性单元 5. maxout 单元 6. logistic sigmoid 单元 7. ...

  5. 激活函数详解(ReLU/Leaky ReLU/ELU/SELU/Swish/Maxout/Sigmoid/tanh)

    神经网络中使用激活函数来加入非线性因素,提高模型的表达能力. ReLU(Rectified Linear Unit,修正线性单元) 形式如下: ReLU公式近似推导:: 下面解释上述公式中的softp ...

  6. 常用的激活函数汇总-Sigmoid, tanh, relu, elu

    激活函数(又叫激励函数,后面就全部统称为激活函数)是模型整个结构中的非线性扭曲力,神经网络的每层都会有一个激活函数.那他到底是什么,有什么作用?都有哪些常见的激活函数呢? 深度学习的基本原理就是基于人 ...

  7. DL之DNN优化技术:采用三种激活函数(sigmoid、relu、tanh)构建5层神经网络,权重初始值(He参数初始化和Xavier参数初始化)影响隐藏层的激活值分布的直方图可视化

    DL之DNN优化技术:采用三种激活函数(sigmoid.relu.tanh)构建5层神经网络,权重初始值(He参数初始化和Xavier参数初始化)影响隐藏层的激活值分布的直方图可视化 目录

  8. ML/DL之激活函数/求导函数:ML中常用的AF激活函数(step_function、sigmoid、softmax、ReLU等)求导函数等代码实现之详细攻略

    ML/DL之激活函数/求导函数:ML中常用的AF激活函数(step_function.sigmoid.softmax.ReLU等)&求导函数等代码实现之详细攻略 目录 AF函数&求导函 ...

  9. 激活函数总结sigmoid,tanh,relu,Leaky ReLU,RRelu,ELU,PRelu,SELU,swish

    本文总结深度学习的损失函数及其优缺点. 激活函数是深度学习模型的重要成分,目的是将线性输入转换为非线性.常见的激活函数有sigmoid,tanh,ReLU等 1.sigmoid Sigmoid 非线性 ...

最新文章

  1. Live回顾 | 松鼠AI智适应教育首席科学家崔炜:人工智能如何变革教育产业
  2. WebDriver中的元素状态检测表
  3. linux每日命令(5):mkdir命令
  4. 无锁队列设计思路以及简要代码
  5. 探测与响应是各企业机构在2017年的首要安全事务
  6. PAT乙级(1006 换个格式输出整数)
  7. 春招 | 风控独角兽 数美科技 NLP、ASR算法工程师 - 25k-35k/月
  8. HCNE---succeed,HCSE---Learning!!!
  9. Failed to recurse into submodule path 'third_party/onnx'
  10. xdg-open命令
  11. Channel 9视频整理【6】
  12. 最贴心的2016赏樱攻略,错过一次,又等一年!
  13. Eloquent: 修改器
  14. 反斜杆e,Linux下五彩斑斓的命令行输出
  15. html如何控制图片自动放缩,如何用js控制图片放大缩小
  16. 软件测试需要学什么?零基础如何入门软件测试?
  17. AcWing 1017 怪盗基德的滑翔翼
  18. 计算机课情感态度与价值观,浅谈信息技术课中情感态度价值观的培养
  19. 企企通:企业供应商风险管理,如何用采购管理软件赋能?
  20. python 圆周率代码_基于Python计算圆周率pi代码实例

热门文章

  1. 手机app有了证件识别功能会怎样?
  2. android 下载多个图片不显示不出来,RecyclerView中图片显示不出来的两种种可能解决方法...
  3. HDFS命令指南-03
  4. CAD标注:折弯标注的使用技巧
  5. 创业公司的市场如何做?
  6. 流量卡之家:中国5G手机或提前进入价格战 新机不足四千元
  7. Pytorch手写数字识别LeNet模型
  8. 数据结构(4)树形结构——二叉树(概述、前序、中序、后序、层序遍历JAVA实现)
  9. 老板说,35岁以上的简历不用看了
  10. 用python实现Minecraft