都2021年了,不会还有人连深度学习都不了解吧(一)- 激活函数篇
一、前言
本人目前研一,研究方向为基于深度学习的医学图像分割,转眼间已接触深度学习快1年,研一生活也即将结束,期间看了大量的英文文献,做了大量的实验,也算是对深度学习有了一个初步的了解吧。接下来的一段时间,我会以总结的形式来记录研一期间学到的关于深度学习的基础知识,其中穿插着大量的个人作深度学习方面工作的经验,写这个系列的初衷一方面是为了记录研一的学习成果,另一方面也是为了帮助更多的人了解到深度学习这一大热领域,最后,大喊一声:深度学习yyds!
二、激活函数介绍
在接触激活函数之前,我们需要大致了解一下什么是感知机。
上图中的感知机接受x1和x2两个输入信号,输出为y。若用数学公式来表达图中的感知机,则:
b是称为偏置,用于控制神经元被激活的容易程度;而w1和w2是表示各个信号的权重的参数,用于控制各个信号的重要性。感知机将x1、x2、1(偏置,图中未画出)三个信号作为神经元的输入,将其和各自的权重相乘后,传送至下一个神经元。在下一个神经元中,计算这些加权信号的总和。如果这个总和超过0,则输出1,否则输出0。
我们将上述公式写为更简洁的形式:
输入的总和会被函数A转换,转换后的值就是输出y。在输入总和超过0时返回1,否则返回0。从公式中可以看出,该步骤可以分为2个阶段,先计算输入信号的总和,然后用激活函数转换。因此,可以将上述公式改写为:
刚才登场的A(x)会将输入信号转换为输出信号,这种函数称为激活函数(activation function)。激活函数的作用在于决定如何来激活输入信号的总和。至此,相信大家已经对激活函数有了一个大致的了解,明确激活函数的任务是什么,下面我们介绍一下常用的激活函数有哪些。
三、常用的激活函数
3.1 阶跃函数
从图中可以清晰地看出,阶跃函数以0为界,输出从0切换为1(或者从1切换为0)。它的值呈阶梯式变化,所以称为阶跃函数。
3.2 Sigmoid函数
Sigmoid函数定义为:
Sigmoid函数图像如下图所示:
Note:(Sigmoid函数和阶跃函数的比较)
- 1.首先注意到的是“平滑性”的不同。sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。sigmoid函数的平滑性对神经网络的学习具有重要意义。
- 2.另一个不同点是,相对于阶跃函数只能返回0或1,sigmoid函数可以返回0.731 …、0.880 …等实数(这一点和刚才的平滑性有关)。也就是说,感知机中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号。
- 3.共同点:实际上,两者的结构均是“输入小时,输出接近0(为0);随着输入增大,输出向1靠近(变成1)”。也就是说,当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。还有一个共同点是,不管输入信号有多小,或者有多大,输出信号的值都在0到1之间。
3.3 tanh函数
tanh是双曲函数中的一个,tanh()为双曲正切。
tanh函数定义为:
图像如下所示:
Note(很重要):
Sigmoid函数和tanh函数作为常用的激活函数,必定有其的优势所在,但是两者都存在致命的缺陷,尤其是在越来越深的网络表现得愈加明显。首先,我们需要了解为什么深度神经网络收敛慢的原因。
这是因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因。
也可以通过两者得图像可以看到,当输入大于2时,梯度会变得越来越小(更加详细的解读请移步详细解读BN的本质),这会导致深度神经网络出现梯度弥散的问题,以至于深度神经网络模型不能收敛。而之后提出的ReLU函数很好的解决了这个问题。
3.4 ReLU函数
3.4.1 ReLU介绍
ReLU函数定义如下式所示:
ReLU图像如下图所示:
3.4.2 使用ReLU的优势
第一个优点是 ReLU 函数计算简单,可以提升模型的运算速度,加快模型的收敛速度;第二个是如果网络很深,会出现梯度消失的问题,使得模型会出现不会收敛或者是收敛速度慢的问题,而使用 ReLU函数可以有效的解决模型收敛速度慢的问题。
四、 为什么使用激活函数
首先,我们需要明确一点是神经网络的中激活函数必须使用非线性函数。为什么不能使用线性函数呢?因为使用线性函数的话,加深网络层数就没有什么意义了。线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络”。为了具体地理解这一点,我们来思考下面这个简单的例子。这里我们考虑把线性函数 h(x) = cx 作为激活函数,把y(x) = h(h(h(x)))的运算对应3层经网络A。这个运算会进行y(x) = c × c × c × x的乘法运算,但是同样的处理可以由y(x) = ax(注意,a = c**3)这一次乘法运算(即没有隐藏层的神经网络)来表示。如本例所示,使用线性函数时,无法发挥多层网络带来的优势。因此,为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。
五、激活函数的一些变体
这里只介绍现代神经网络中最常用的ReLU函数的几种变体,变体有很多,包括Leaky ReLU、PReLU、ELU等等,说实话,我在这接近一年研究深度学习的工作中,从未用过ReLU的任何变体,而且同门师兄弟也没听说谁用过,所以在这里只是简单的介绍。
5.1 Leaky ReLU
为什么提出了Leaky ReLU?这需要从ReLU说起,ReLU函数对正数样本原样输出,负数直接置零。在正数不饱和,在负数硬饱和,ReLU在负数区域被Kill(即直接置0这一操作)的现象叫做dead relu。为了解决上述的dead ReLU现象。这里选择一个数,让负数区域不在饱和死掉。这里的斜率都是确定的,即Leaky ReLU。Leaky ReLU的定义及图像如下所示:
5.2 PReLU
PReLU与Leaky ReLU类似,只不过ReLU的参数是一个可学习的参数,而Leaky ReLU的参数是一个定值。PReLU的定义如下:
原文献建议初始化alpha,alpha为0.25,不采用正则,但是这要根据具体数据和网络,通常情况下使用正则可以带来性能提升。与Relu比起来,PRelu收敛速度更快。
参考文献
《深度学习入门-基于Python的理论与实现》
《ImageNet Classification with Deep ConvolutionalNeural Networks》
计划 – 深度学习系列
都2021年了,不会还有人连深度学习还不了解吧?(一)-- 激活函数篇
都2021年了,不会还有人连深度学习还不了解吧?(二)-- 卷积篇
都2021年了,不会还有人连深度学习还不了解吧?(三)-- 损失函数篇
都2021年了,不会还有人连深度学习还不了解吧?(四)-- 上采样篇
都2021年了,不会还有人连深度学习还不了解吧?(五)-- 下采样篇
都2021年了,不会还有人连深度学习还不了解吧?(六)-- Padding篇
都2021年了,不会还有人连深度学习还不了解吧?(七)-- 评估指标篇
都2021年了,不会还有人连深度学习还不了解吧?(八)-- 优化算法篇
都2021年了,不会还有人连深度学习还不了解吧?(九)-- 注意力机制篇
都2021年了,不会还有人连深度学习还不了解吧?(十)-- 数据归一化篇
觉得写的不错的话,欢迎点赞+评论+收藏,这对我帮助很大!
都2021年了,不会还有人连深度学习都不了解吧(一)- 激活函数篇相关推荐
- 都2021年了,不会还有人连深度学习都不了解吧(五)-- 下采样篇
导读 该篇文章重点介绍CNN中下采样方式,下采样是CNN中必不可少的阶段之一,CNN中常用的下采样方式有平均池化和最大池化,同时平均池化和最大池化也是注意力机制的重要组件. 目前深度学习系列已经更新了 ...
- 都2021年了,不会还有人连深度学习都不了解吧(三)- 损失函数篇
一.前言 深度学习系列文章陆陆续续已经发了两篇,分别是激活函数篇和卷积篇,纯干货分享,想要入门深度学习的童鞋不容错过噢!书接上文,该篇文章来给大家介绍" 选择对象的标准 "-- 损 ...
- 都2021年了,不会还有人连深度学习都不了解吧(二)- 卷积篇
一.前言 上篇文章详细阐述了激活函数是什么.常用的激活函数有哪些以及为什么要使用激活函数,相信大家对此有了一定的了解.在此基础上,我们趁热打铁,继续学习深度学习其它必须的知识.该篇文章讲述卷积操作及其 ...
- 都2021年了,不会还有人连深度学习还不了解吧(六)-- Padding篇
导读 本篇文章主要介绍CNN中常见的填充方式Padding,Padding在CNN中用的很多,是CNN必不可少的组成部分,使用Padding的目的主要是为了调整输出的大小,是必须搞清楚的知识点.如果你 ...
- 都2021年了不会还有人用门禁卡吧!(手把手教你用手机代替门禁卡)
目录 一.软硬件准备 NFC Tool 蓝牙版读卡器 安卓NFC手机 二.大致流程 三.详细步骤 0x01 NFC Tool 破解母卡获取Dump文件 0x02 NFC Tool 读取母卡卡号,写入非 ...
- 都2021年了,你还在考虑电赛飞行器赛题,备赛是否有必要用基于TI处理芯片的飞控问题?
无名创新售后群问题节选 @无名小哥 能问下今年国赛会不会指定某一款飞控呀? 答:都2021年了,你还在考虑电赛飞行器赛题备赛是否有必要用基于TI处理芯片的飞控问题? 暂不论官方是否会限定TI芯片的飞控 ...
- 劲爆!有人不用深度学习做强AI?道翰天琼认知智能机器人平台API接口大脑为您揭秘
劲爆!有人不用深度学习做强AI?道翰天琼认知智能机器人平台API接口大脑为您揭秘 认知智能是计算机科学的一个分支科学,是智能科学发展的高级阶段,它以人类认知体系为基础,以模仿人类核心能力为目标,以信息 ...
- Java培训深度学习都要学什么
java的知识点有很多,如果是有java基础的同学,进行深度学习是非常有必要的,比较职场技能更新迭代非常的快,那么java培训深度学习都要学什么呢?来看看下面的详细介绍. Java培训深度学习都要学什 ...
- 开源后5个月,Google的深度学习都有哪些改变?
开源后5个月,Google的深度学习都有哪些改变? 发布时间: 2016-4-17 13:37:05 2016年4月14日,Google发布了分布式TensorFlow.Google的博文介绍了T ...
最新文章
- HDU1269(强连通分量)
- C指针原理(30)-C语言-LINUX/UNIX环境下调试
- 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?
- 小程序返回上一页并传参
- wpf将文字转化为图形_将创新转化为实际应用
- oracle 在所有表中查某个值,oracle需要查询某个字段的值在其他某个表中有没的值有相同...
- 5寸屏,智能之外也可以当数码相框
- linux man命令 0-8,Linux命令Man解释:SUDO(8):以root身份执行指令
- “630”落幕 光伏何去何从?
- Ruby设计模式透析之 —— 组合(Composite)
- Atitit.nosql api 标准化 以及nosql数据库的实现模型分类差异
- WordPress中文插件 Erphpdown vip会员+推广提成+收费下载/查看内容+前端个人中心 银联/支付宝/微信支付/财付通/贝宝paypal[更新至v9.6.1]
- POP模式,提示密码错误的问题(密码是对的)
- 死锁和哲学家就餐问题
- 部分双机热备软件详细介绍-行云管家
- 图形验证码 java
- 使用Mysql Navcat导出查询数据excel时出现数据丢失
- Android apps 拍立知-功能实现2(相机/选择相册及图像识别调用)
- java对接portal协议_Portal协议分析
- 邦纳光电开关MIAD9R
热门文章
- jmeter中生成UUID作为唯一标识符
- 【LuoguP33294123】[ZJOI2011]最小割[CQOI2016]不同的最小割
- leetcode刷题之树(2)
- Python中if __name__ == '__main__':作用
- JVM-程序计数器02
- 土地利用转移矩阵图怎么做_肺癌骨转移有哪些早期症状?做什么检查可以发现?怎么治疗?...
- 二叉搜索树(BFS)总结
- 将自己数据集转化为lmdb格式
- [云炬创业管理笔记]第十章商业计划书答辩测试2
- [云炬ThinkPython阅读笔记]2.9 术语表