深度学习-常用激活函数详细介绍_深度学习激活函数详解-程序员宅基地

技术标签: 深度学习  relu  激活函数  

个人微信公众号:AI研习图书馆,欢迎关注~

深度学习知识及资源分享,学习交流,共同进步~

1. 引言

关于激活函数,首先要搞清楚的问题是,激活函数是什么,有什么用?不用激活函数可不可以?答案是不可以。

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

  1. 可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
  2. 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
  3. 输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate

从目前来看,常见的激活函数多是分段线性和具有指数形状的非线性函数

2. 常用激活函数

2.1 sigmoid

如图所示:
在这里插入图片描述
在这里插入图片描述
sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。

然而,sigmoid也有其自身的缺陷,最明显的就是饱和性。从上图可以看到,其两侧导数逐渐趋近于0。
在这里插入图片描述
具有这种性质的称为软饱和激活函数。具体的,饱和又可分为左饱和与右饱和。与软饱和对应的是硬饱和, 即
在这里插入图片描述
sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。

具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个 f′(x)因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f′(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。

此外,sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。

2.2 tanh

在这里插入图片描述
tanh也是一种非常常见的激活函数。与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数。然而,从途中可以看出,tanh一样具有软饱和性,从而造成梯度消失。

2.3 ReLU,P-ReLU, Leaky-ReLU

在这里插入图片描述
ReLU的全称是Rectified Linear Units,是一种后来才出现的激活函数。 可以看到,当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。

然而,随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。与sigmoid类似,ReLU的输出均值也大于0,偏移现象和 神经元死亡会共同影响网络的收敛性。

针对在x<0的硬饱和问题,我们对ReLU做出相应的改进,使得
在这里插入图片描述
这就是Leaky-ReLU, 而P-ReLU认为,α也可以作为一个参数来学习,原文献建议初始化a为0.25,不采用正则。

2.4 ELU

在这里插入图片描述
融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快。在 ImageNet上,不加 Batch Normalization 30 层以上的 ReLU 网络会无法收敛,PReLU网络在MSRA的Fan-in (caffe )初始化下会发散,而 ELU 网络在Fan-in/Fan-out下都能收敛。

2.5 Maxout

在这里插入图片描述
在我看来,这个激活函数有点大一统的感觉,因为maxout网络能够近似任意连续函数,且当w2,b2,…,wn,bn为0时,退化为ReLU。Maxout能够缓解梯度消失,同时又规避了ReLU神经元死亡的缺点,但增加了参数和计算量。

本文主要介绍了一些常见的激活函数,将他们用于深度学习的研究之中,将产生意想不到的结果。后续会再更新,关于深度学习损失函数的介绍,请看我的另一篇博客~

您的支持,是我不断创作的最大动力~

欢迎点赞关注留言交流~

深度学习,乐此不疲~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44222014/article/details/103270812

智能推荐

无模型自适应控制-程序员宅基地

文章浏览阅读4.3k次。概念 无模型自适应控制(MFAC)在1994年被提出,是一种基于数据驱动的控制方法,该方法是通过引入的伪偏导数或伪梯度参数,在每个动态工作点处建立等价的动态线性化数据模型,只利用被控对象的输入量和输出量就可以直接设计控制器,不需要过分依赖于数学模型,使得它在处理非线性的问题上拥有独特的优势。 常用的MFAC动态线性化方法包含紧格式的MFAC控制方法(CFDL-MFAC)和偏格式的MFAC控制方法(PFDL-MFAC)以及全格式的MFAC控制方法(FFDL-MFAC) CFDL方法是把_无模型自适应控制

Vue Router 嵌套路由中, 子路由path路径带 ‘/‘ 与不带的区别_path: '/-程序员宅基地

文章浏览阅读7.1k次,点赞18次,收藏24次。Vue Router 嵌套路由中, 子路由path路径带 ‘/’ 与不带的区别示例代码:const routes = [ { path: '/layout', component: () => import(/* webpackChunkName: "Layout" */ '@/views/layout/Layout.vue'), children: [ { path: 'home', component: () => _path: '/

Scala不完整学习笔记1_scala 不使用科学计数法-程序员宅基地

文章浏览阅读536次。环境java 1.8 Scala 2.11知识数组var arr = new Array[String](3)Scala数组是一个所有对象都共享相同类型的可变序列List1、共享相同类型的不可变对象序列。但是可以使用:::的方法实现叠加功能。 (其实就是创建了一个新的数组返回回来) 2、List[String]、List[Int] 等等tuple(元组)1、和List相比可以包含不同数据类型。_scala 不使用科学计数法

在pcDuino上安装3D打印机控制软件_pronterface 下载-程序员宅基地

文章浏览阅读1.2k次。3D打印(3D printing),即快速成型技术的一种,它是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术。3D打印通常是采用数字技术材料打印机来实现的。过去其常在模具制造、工业设计等领域被用于制造模型,现正逐渐用于一些产品的直接制造,已经有使用这种技术打印而成的零部件。该技术在珠宝、鞋类、工业设计、建筑、工程和施工(AEC)、汽车,航空航天、牙科_pronterface 下载

SpringBoot定时任务及Cron表达式详解_springboot cron 定时任务时间点-程序员宅基地

文章浏览阅读504次。0.SpringBoot定时任务及Cron表达式详解2017年12月25日 14:01:02 fujiawei3710 阅读数:2364更多个人分类: springBoot从零开始 一、定时任务概述后台项目开发中经常会用到定时任务,现在实现定时任务都方式也是多种多样。下面列举几种常见的定时任务实现方式:1.Quartz:Quartz的使用相当广泛,它是一个功能..._springboot cron 定时任务时间点

配置ssh使用socks代理-程序员宅基地

文章浏览阅读362次。配置ssh使用socks代理 ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' username@server posted on 2017-08-13 11:55 黄尚 阅读(...) 评论(...) 编辑 收藏...

随便推点

程序员吐槽:公司开源节流要求降薪,网友:一石三鸟啊!_公司说开源节流 不涨工资-程序员宅基地

文章浏览阅读377次。一公司领导通知员工公司准备对全体员工做出降薪30%的决定,对此该公司员工表示不同意,一名程序员发帖怒怼:为了不让领导做如此艰难的决定,所以本人表示拒绝。2018年受金融大环境的影响,众多企业不可避免的进入了行业低迷期,这一年对我们来说,也是无比艰难,困难重重。为了尽快走出困境,公司只能开源节流,降低各项成本与开支。结合公司现状,也考虑到总体行业不景气,再就业困难等实际情况,公司领导做出了非常艰..._公司说开源节流 不涨工资

C 语言面试题大汇总_c语言面试题-程序员宅基地

文章浏览阅读1.7k次。C语言面试题大汇总,个人觉得还是比较全地!!!发布之前先申明两点:1 所有资料来自网络(主要是CSDN),本人只是收集和转发。2 所有问题解答(尤其是代码)只是参考,不保证正确。先发基本问题,再发编程问题…4. static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?引用必须被初始化,指针不必。引用初始化以后不能被改变,指针可以改变所指的对象。不存在指向空值的引用,但是存在指向空值的指针。描述实时系统的基本特性_c语言面试题

统计信息及DBMS_STATS.GATHER_TABLE_STATS学习-程序员宅基地

文章浏览阅读1.3w次。一、统计信息的收集Gather_stats_job 调用 dbms_stats.gather_database_stats_job_proc 过程来收集statistics的信息。该过程收集对象statistics 的条件如下:(1)对象的统计信息之前没有收集过。(2)当对象有超过10%的 rows 被修改,此时对象的统计信息也称为stale statistics。select j_dbms_stats.gather_table_stats

机器学习 之 OCCSVM 模型_oc-svm-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏10次。介绍一下one class classification以及用SVDD(support vector domain description)做one class classification。one class classification 和多类 classification 的思路还是有很大差别。 classification问题一般都是 2 类及 2 类以上的,典型的_oc-svm

设计模式-05.建造者模式 再次理解director,builder,product._在本次实验中,我们需要设计四个类:builder、concretebuilder、director和-程序员宅基地

文章浏览阅读5.7k次。director,builder,product.使用场景当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。解决的问题当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象。 例如我们现在有如下一个类计算机类Computer,其中cpu与ram是必填参数,而其他3个是可选参数,那么我们如何构造这个类的实例呢,通常有两种常用的方式:public class Computer { private String cpu_在本次实验中,我们需要设计四个类:builder、concretebuilder、director和product

python爬虫入门——QQ音乐歌手照片及歌曲列表爬取_爬取qq音乐歌手信息-程序员宅基地

文章浏览阅读982次。#程序功能:输入歌手名称后,程序会生成一个Word文件,Word文件里包括歌手名称、照片和所有歌曲列表!import requests, timeimport mathfrom docx import Documentfrom docx.shared import Inchesfrom PIL import Imageimport urllib.parsesession = requests.session()doc=Document()doc.add_heading("歌手简介",0) _爬取qq音乐歌手信息

推荐文章

热门文章

相关标签