深度学习知识及资源分享,学习交流,共同进步~
关于激活函数,首先要搞清楚的问题是,激活函数是什么,有什么用?不用激活函数可不可以?答案是不可以。
激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。 那么激活函数应该具有什么样的性质呢?
从目前来看,常见的激活函数多是分段线性和具有指数形状的非线性函数
如图所示:
sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。
然而,sigmoid也有其自身的缺陷,最明显的就是饱和性。从上图可以看到,其两侧导数逐渐趋近于0。
具有这种性质的称为软饱和激活函数。具体的,饱和又可分为左饱和与右饱和。与软饱和对应的是硬饱和, 即
sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。
具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个 f′(x)因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f′(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。
此外,sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
tanh也是一种非常常见的激活函数。与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数。然而,从途中可以看出,tanh一样具有软饱和性,从而造成梯度消失。
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,不采用正则。
融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快。在 ImageNet上,不加 Batch Normalization 30 层以上的 ReLU 网络会无法收敛,PReLU网络在MSRA的Fan-in (caffe )初始化下会发散,而 ELU 网络在Fan-in/Fan-out下都能收敛。
在我看来,这个激活函数有点大一统的感觉,因为maxout网络能够近似任意连续函数,且当w2,b2,…,wn,bn为0时,退化为ReLU。Maxout能够缓解梯度消失,同时又规避了ReLU神经元死亡的缺点,但增加了参数和计算量。
本文主要介绍了一些常见的激活函数,将他们用于深度学习的研究之中,将产生意想不到的结果。后续会再更新,关于深度学习损失函数的介绍,请看我的另一篇博客~
您的支持,是我不断创作的最大动力~
欢迎点赞,关注,留言交流~
深度学习,乐此不疲~
文章浏览阅读4.3k次。概念 无模型自适应控制(MFAC)在1994年被提出,是一种基于数据驱动的控制方法,该方法是通过引入的伪偏导数或伪梯度参数,在每个动态工作点处建立等价的动态线性化数据模型,只利用被控对象的输入量和输出量就可以直接设计控制器,不需要过分依赖于数学模型,使得它在处理非线性的问题上拥有独特的优势。 常用的MFAC动态线性化方法包含紧格式的MFAC控制方法(CFDL-MFAC)和偏格式的MFAC控制方法(PFDL-MFAC)以及全格式的MFAC控制方法(FFDL-MFAC) CFDL方法是把_无模型自适应控制
文章浏览阅读7.1k次,点赞18次,收藏24次。Vue Router 嵌套路由中, 子路由path路径带 ‘/’ 与不带的区别示例代码:const routes = [ { path: '/layout', component: () => import(/* webpackChunkName: "Layout" */ '@/views/layout/Layout.vue'), children: [ { path: 'home', component: () => _path: '/
文章浏览阅读536次。环境java 1.8 Scala 2.11知识数组var arr = new Array[String](3)Scala数组是一个所有对象都共享相同类型的可变序列List1、共享相同类型的不可变对象序列。但是可以使用:::的方法实现叠加功能。 (其实就是创建了一个新的数组返回回来) 2、List[String]、List[Int] 等等tuple(元组)1、和List相比可以包含不同数据类型。_scala 不使用科学计数法
文章浏览阅读1.2k次。3D打印(3D printing),即快速成型技术的一种,它是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术。3D打印通常是采用数字技术材料打印机来实现的。过去其常在模具制造、工业设计等领域被用于制造模型,现正逐渐用于一些产品的直接制造,已经有使用这种技术打印而成的零部件。该技术在珠宝、鞋类、工业设计、建筑、工程和施工(AEC)、汽车,航空航天、牙科_pronterface 下载
文章浏览阅读504次。0.SpringBoot定时任务及Cron表达式详解2017年12月25日 14:01:02 fujiawei3710 阅读数:2364更多个人分类: springBoot从零开始 一、定时任务概述后台项目开发中经常会用到定时任务,现在实现定时任务都方式也是多种多样。下面列举几种常见的定时任务实现方式:1.Quartz:Quartz的使用相当广泛,它是一个功能..._springboot cron 定时任务时间点
文章浏览阅读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年受金融大环境的影响,众多企业不可避免的进入了行业低迷期,这一年对我们来说,也是无比艰难,困难重重。为了尽快走出困境,公司只能开源节流,降低各项成本与开支。结合公司现状,也考虑到总体行业不景气,再就业困难等实际情况,公司领导做出了非常艰..._公司说开源节流 不涨工资
文章浏览阅读1.7k次。C语言面试题大汇总,个人觉得还是比较全地!!!发布之前先申明两点:1 所有资料来自网络(主要是CSDN),本人只是收集和转发。2 所有问题解答(尤其是代码)只是参考,不保证正确。先发基本问题,再发编程问题…4. static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?引用必须被初始化,指针不必。引用初始化以后不能被改变,指针可以改变所指的对象。不存在指向空值的引用,但是存在指向空值的指针。描述实时系统的基本特性_c语言面试题
文章浏览阅读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
文章浏览阅读4.1k次,点赞2次,收藏10次。介绍一下one class classification以及用SVDD(support vector domain description)做one class classification。one class classification 和多类 classification 的思路还是有很大差别。 classification问题一般都是 2 类及 2 类以上的,典型的_oc-svm
文章浏览阅读5.7k次。director,builder,product.使用场景当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。解决的问题当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象。 例如我们现在有如下一个类计算机类Computer,其中cpu与ram是必填参数,而其他3个是可选参数,那么我们如何构造这个类的实例呢,通常有两种常用的方式:public class Computer { private String cpu_在本次实验中,我们需要设计四个类:builder、concretebuilder、director和product
文章浏览阅读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音乐歌手信息