Sigmoid函数以及传统线性函数

参考:https://www.jianshu.com/p/68d44a4295d1

在ReLU激活函数出现之前,神经网络训练都是勇Sigmoid作为激活函数。其中Sigmoid函数主要分为Logistic-Sigmoid和Tanh-Sigmoid,这两者被视为神经网络的核心所在。

因为Sigmoid函数具有限制性,输出数值在0~1之间,符合概率输出的定义。并且非线性的Sigmoid函数在信号的特征空间映射上,对信号的中央区的信号增益比较大,对两侧的信号增益小。从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。从这点来看Sigmoid函数要比更加早期的线性激活函数(y=x),以及阶梯激活函数的效果要好上不少。

但是当神经网络层数较多的时候,Sigmoid函数在反向传播中梯度值会逐渐减小,在经过多层的反向传递之后,梯度值在传递到神经网络的头几层的时候就会变得非常小,这样的话根据训练数据的反馈来更新神经网络的参数会变得异常缓慢,甚至起不到任何作用。这种情况我们一般称之为梯度弥散(Gtadient Vanishment),而ReLU函数的出现很大一部分程度上解决了梯度弥散的问题。

近似生物神经激活函数:Softplus & ReLu

2001年,神经科学家Dayan、Abott从生物学角度,模拟出了脑神经元接受信号更精确的激活模型。

这个模型对比Sigmoid系主要变化有三点:①单侧抑制 ②相对宽阔的兴奋边界 ③稀疏激活性(重点,可以看到红框里前端状态完全没有激活)
这种模式非常类似于人脑的阈值响应机制。信号在超过某一个阈值之后,神经元才会进入兴奋和激活的状态,平时则往往处于抑制状态。ReLU可以很好的传递梯度,经过多次的反向传播,梯度依旧不会大幅度的减小,适合适应训练很深的神经网络。

Softplus虽然具有单侧异质性,但是却没用稀疏激活性。这里指出神经元编码的工作方式是具有稀疏性的,推测大脑同时被激活的神经元只有1%~4%。神经元只会对输入信号有少部分选择性响应,大量的不相关信号被屏蔽了,这样可以更有效率的提取重要的特征。

下面的参考:

https://mp.weixin.qq.com/s?__biz=MzU0NTAyNTQ1OQ==&mid=2247487619&idx=1&sn=d19b52eef236d5ffa8d64e7730820e15&chksm=fb726c5fcc05e549a3d15166078a6eed1db20b46c298fcd8832ee96fe81139181f60f7839c31&mpshare=1&scene=1&srcid=&key=04b8de3bb21a153bdf746c3180176863a98b6fdd46641f3a75e879e754c5f8d9537368d5ea95902248174fd3e2c505f017e83a82d1423469d01ccc7b7e58d7c1098c005db11b5af5edfb98c5ef157f06&ascene=1&uin=MjIzODAyMTI0MA%3D%3D&devicetype=Windows+10&version=62060833&lang=zh_CN&pass_ticket=ptf7kzpegCKbMC%2FZlS1sKZ%2BR4smD8iBMwHHu22%2BK7J1syHvbv%2BkRt%2B32F0%2FFqgiN

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少深,输出都是输入的线性组合,这种情况就是最原始的感知机。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。一般激活函数有如下一些性质:

  • 非线性:

    当激活函数是线性的,两层的神经网络就可以基本上逼近所有的函数。但如果激活函数是恒等激活函数的时候,即f(x)=x,就不满足这个性质,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的;

  • 可微性: 
    当优化方法是基于梯度的时候,就体现了该性质;

  • 单调性: 
    当激活函数是单调的时候,单层网络能够保证是凸函数;

  • f(x)≈x: 
    当激活函数满足这个性质的时候,如果参数的初始化是随机的较小值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要详细地去设置初始值;

  • 输出值的范围: 
    当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的Learning Rate。

那接下来,我们就开始讲讲激活函数。

ReLU

今天主要说的就是ReLU激活函数,其全名叫修正线性单元(Rectified linear unit)。

f(x)=max(0,x)

优点: 
使用 ReLU得到的SGD的收敛速度会比 sigmoid/tanh 快。这是因为它是linear,而且ReLU只需要一个阈值就可以得到激活值,不用去计算复杂的运算。

缺点:

训练过程该函数不适应较大梯度输入,因为在参数更新以后,ReLU的神经元不会再有激活的功能,导致梯度永远都是零。

细说ReLU

上图就是ReLU的可视化图,其实ReLU还是可以将其归为线性函数,如果更加准确的话,那就是分段线性函数。如果输入的值小于等于0的时候,输出全部给予0值,而大于0输入,就按照正常线性处理。

该处理形式被称为单侧抑制机制,这种机制可就厉害啦!

  • 第一,采用sigmoid、Tanh等激活函数时,计算激活函数时计算量教大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多;

  • 第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练;

  • 第三,ReLu会使一部分神经元的输出为0,这样就使网络稀疏,且减少了参数的相互依存关系,缓解了过拟合问题的发生。

为啥ReLU的激活函数形式要这样书写,不可以镜面反转之类的吗?不又成新的一种激活函数?

其实很简单,这里激活函数主要核心是单侧抑制,所以不管你是在哪个象限内进行抑制操作,最后目的都是一样。无论是镜面反转还是180度翻转,最终神经元的输出也只是相当于加上了一个常数项系数,并不影响模型的训练结果。

ReLU激活函数还有一大好处就是稀疏了参数,这个作用对于深度网络来说就是神来之笔。稀疏有何作用呢?接下来我引用偏执的眸一段比如,简单太形象的解释了这个问题。

?

当看名侦探柯南的时候,我们可以根据故事情节进行思考和推理,这时用到的是我们的大脑左半球;而当看蒙面唱将时,我们可以跟着歌手一起哼唱,这时用到的则是我们的右半球。左半球侧重理性思维,而右半球侧重感性思维。也就是说,当我们在进行运算或者欣赏时,都会有一部分神经元处于激活或是抑制状态,可以说是各司其职。再比如,生病了去医院看病,检查报告里面上百项指标,但跟病情相关的通常只有那么几个。与之类似,当训练一个深度分类模型的时候,和目标相关的特征往往也就那么几个,因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。

实验比较

本次试验在playground界面进行实验,想必很多同学对这个小平台有很深入的理解。以2分类解释:

第一种情况:使用Sigmoid函数,进行训练:

当运行了部分时间后,发现分界面依然模糊不清,还要继续训练,如下图:

当运行了528Epoch,才全部分开,如下图:

第二种情况:使用Tanh函数,进行训练:

第三种情况:使用ReLU函数,进行训练:

综上,可以明显发现ReLU效果最好而且速度最快。

  • 就会有同学问:为什么通常Relu比sigmoid和tanh强,有什么不同?

其实之前已经回答了,主要是因为它们gradient特性不同。sigmoid和tanh的gradient在饱和区域非常平缓,接近于0,很容易造成vanishing gradient的问题,减缓收敛速度。vanishing gradient在网络层数多的时候尤其明显,是加深网络结构的主要障碍之一。相反,Relu的gradient大多数情况下是常数,有助于解决深层网络的收敛问题。Relu的另一个优势是在生物上的合理性,它是单边的,相比sigmoid和tanh,更符合生物神经元的特征;而提出sigmoid和tanh,主要是因为它们全程可导;还有表达区间问题,sigmoid和tanh区间是0到1,或着-1到1,在表达上,尤其是输出层的表达上有优势。ReLU更容易学习优化。因为其分段线性性质,导致其前传,后传,求导都是分段线性。而传统的sigmoid函数,由于两端饱和,在传播过程中容易丢弃信息。

Sigmoid函数以及传统线性函数相关推荐

  1. sigmoid函数_机器学习面试常考知识之激活函数

    神经网络的知识 激活函数 y=f(Wx+b) 常用的激活函数有sigmoid.tanh.ReLu.LeakyReLU等 ​ 为什么需要激活函数(这里说的激活函数一般指非线性激活),假设不用激活函数(相 ...

  2. sigmoid函数_常用的激活(激励)函数——深度学习笔记(建议收藏)

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

  3. relu函数为分段线性函数,为什么会增加非线性元素

    relu函数为分段线性函数,为什么会增加非线性元素 我们知道激活函数的作用就是为了为神经网络增加非线性因素,使其可以拟合任意的函数.那么relu在大于的时候就是线性函数,如果我们的输出值一直是在大于0 ...

  4. sigmoid函数解决溢出_常见激活函数优缺点与dead relu problem

    转载自: G-kdom:温故知新--激活函数及其各自的优缺点​zhuanlan.zhihu.com 1.什么是激活函数? 所谓激活函数(Activation Function),就是在人工神经网络的神 ...

  5. 机器学习入门(03)— 激活函数分类(阶跃函数和 sigmoid 函数的理论、实现、显示以及区别、非线性函数、ReLU 函数、tanh 函数)

    各种激活函数介绍,请参考下面链接: https://en.wikipedia.org/wiki/Activation_function 1. 阶跃函数 1.1 理论 式(3.3)表示的激活函数以阈值为 ...

  6. 深度学习入门(三)------- 阶跃函数和Sigmoid函数

    引入了一个新概念叫阶跃函数,阶跃函数以0为界,输出从0切换为1(或者从1切换为0),它的值呈阶梯式变化,所以称为阶跃函数. 它的图形代码就是: import numpy as np import ma ...

  7. 激活函数之logistic sigmoid函数介绍及C++实现

    logistic sigmoid函数: logistic sigmoid函数通常用来产生Bernoulli分布中的参数ø,因为它的范围是(0,1),处在ø的有效取值范围内.logisitic sigm ...

  8. 神经网络的反向传播(BP)是什么?sigmoid函数的导数是什么,有什么形式优势、优缺点?

    神经网络的反向传播(BP)是什么?sigmoid函数的导数是什么,有什么形式优势? 目录

  9. 计算 sigmoid 函数的导数

    计算 sigmoid 函数的导数 回想一下,sigmoid 函数有一个完美的导数,我们可以在下面的计算中看到.这将使我们的反向传播步骤更加简洁.

最新文章

  1. 在C#中Java的最终版本相当于什么?
  2. python3 多级目录建立 os.makedirs()
  3. Grad-CAM (CNN可视化) Python示例
  4. 让你的应用程序支持高对比度模式
  5. NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容—利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类
  6. XML Tree(树形结构)
  7. SpringBoot 使用AOP功能
  8. numpy 矩阵与向量相乘_有人把NumPy画成了花,生动又形象
  9. python写传奇脚本,Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...
  10. vue 代码快捷键_你可能不知道的19种运行JavaScript代码工具
  11. 基于设备树的TQ2440 DMA学习(3)—— DMA控制器驱动
  12. 移动端媒体尺寸_网络推广外包浅析提升移动端网站建设效率有哪些网络推广外包技巧...
  13. linux下svn常用命令集锦
  14. 华为路由器NAT经典配置
  15. MATLAB解二元二次方程+画图 = 画隐式方程的图像
  16. 拼多多推广位备案方法(2021.5.5)
  17. Day03 数据类型转换
  18. redis主从配置及主从切换
  19. kali --之 Maltego ce 的使用教程
  20. 华为人才在线加入HCIA班级

热门文章

  1. python获取图像的长和宽_tensorflow之读取jpg图像长和宽实例
  2. 【MacOS 配置网络访问公司内网】
  3. CDH kudu Unable to load consensus metadata for tablet
  4. 涂鸦智能产品接入与米家产品接入对比
  5. 智能电视和网络电视有什么区别
  6. python脚本windows环境下权限问题处理
  7. 世联行董事长、财务总监等辞职:大横琴“上位”,业绩暴雷持续
  8. wifidog认证接口
  9. 用于RF收发器的简单基带处理器
  10. 世界第一台民用计算机,世界上第一台计算机