Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度学习中常见的激活函数总结(摘自我写的书)

深度学习中常见的激活函数总结(摘自我写的书)

作者头像
黄鸿波
发布于 2020-04-14 09:29:35
发布于 2020-04-14 09:29:35
1.4K00
代码可运行
举报
文章被收录于专栏:AI的那些事儿AI的那些事儿
运行总次数:0
代码可运行
2018年我出版了《TensorFlow进阶指南 基础、算法与应用》这本书,今天我将这里面关于激活函数的部分摘取出来,以此帮助有需要的人。

Sigmoid函数

Sigmoid函数,也称S曲线函数,是使用范围最广的一类激活函数,具有指数函数形状,在物理意义上最为接近生物神经元,在生物学中也是常见的S型函数,又称为S型生长曲线,是神经网络中最常用的激活函数之一。Sigmoid函数由下列公式定义:

其函数图像如图:

Sigmoid函数由于单增及反函数单增等性质,常被用作神经网络的阈值函数,将变量映射到0,1之间。

一般来讲,在训练神经网络的过程中,对于求导、连续求导、处理二分类问题,一般使用Sigmoid激活函数,因为Sigmoid函数可以把实数域光滑的映射到[0,1]空间。函数值恰好可以解释为属于正类的概率(概率的取值范围是0~1)。另外,Sigmoid函数单调递增,连续可导,导数形式非常简单。但是对于多分类问题,Sigmoid函数就显得心有余而力不足了。

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

根据上面的结论,我们来总结一下Sigmoid函数的优缺点:

优点

(1)Sigmoid函数的输出映射在(0,1)(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。

(2)求导容易。

缺点

(1)由于其软饱和性,容易产生梯度消失,导致训练出现问题。

(2)其输出并不是以0为中心的。

由于在TensorFlow框架中已经封装好了Sigmoid函数的方法,因此在TensorFlow中我们可以直接调用tf.sigmoid()方法使用Sigmoid函数。

下面,通过一段代码片段来感受下Sigmoid函数在TensorFlow的具体应用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf
A = tf.Variable([[1, 2], [3, 4]], dtype = tf.float32, name=A)
B = tf.Variable([[1, 1], [1, 1]], dtype = tf.float32, name=B)
y = tf.matmul(A, B)
z = tf.sigmoid(y)

上面这段代码是在TensorFlow1.x上运行的代码,但是在TensorFlow2.x上,建议将tf.matmul(A,B)改成tf.linalg.matmul(A,B)。

在这段代码中,我们创建了一个矩阵A,然后又创建了一个矩阵B,再将矩阵AB相乘,相乘后,矩阵的阶就会变得很高,为了方便下一步的使用,调用了tf.sigmoid()这个函数,对所得的结果y使用sigmoid函数进行了激活。

tanh函数

tanh也是一种非常常见的激活函数。它实际上是sigmoid函数的一种变形。tanh函数由下列公式定义:

但是无论是中学课本还是百度百科,都会发现,tanh函数的公式是:

那么,现在就由教科书上的公式向深度学习里面的公式做一个推导,让大家彻底地明白是怎么来的:

tanh的函数图像如图。

可以把tanh函数看作sigmoid函数的升级版,但是这并不意味着tanh函数在任何情况下都要比sigmoid函数好。

一般来讲,tanh函数会在特征相差明显时效果好,在循环过程中会不断扩大特征,效果就显示出来了,但是在特征相差比较复杂或是相差不是特别大时,需要更细微的分类判断的时候,sigmoid效果就不太好了。

下面总结一下tanh函数的优缺点。

优点

(1)tanh函数的输出均值是0,因此收敛速度要比sigmoid快;

(2)迭代次数相对较少。

缺点

(1)与sigmoid函数相同,tanh函数同样具有软饱和性;

(2)还是没有改变sigmoid函数的最大问题——由于饱和性产生的梯度消失。

由于在TensorFlow框架中也已经封装好了tanh函数的方法,因此在TensorFlow中可以直接调用tf.tanh()方法使用tanh函数。

ReLU函数

ReLU的全称是Rectified Linear Units,是一种后来才出现的激活函数。与sigmoid函数相比,ReLU函数的收敛速度会更快,并且只需要一个阈值就可以得到激活值,而不是进行一大堆复杂的运算。ReLU函数的取值是max(0,x),因为神经网络是不断反复计算的,实际上变成了它在尝试不断试探如何用一个大多数为0的矩阵来尝试表达数据特征,结果因为稀疏特性的存在,反而这种方法变得运算得又快效果又好了。ReLU函数的定义公式是:

其函数图像如图所示。此处需要特别说明的是,当x<=0的时候,x会一直在x轴横坐标持续向左,在y轴上永远保持为0。

可以看到,当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无须依赖无监督的逐层预训练。然而,随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。针对于x<0的硬饱和现象,我们一般会对ReLU函数做出相应的改进,改进后的函数表达式为:

这里的a是一个很小的常数,其存在的目的在于既修正了数据,又保留了部分负轴的值,使得负轴的信息不会全部丢失,这样的变体函数被称为Leaky-ReLU函数。其函数图像如图:

下面总结一下ReLU函数的优缺点。

优点

(1)相比Sigmoid函数和tanh函数,ReLU函数能够快速收敛。

(2)Sigmoid和tanh涉及了很多很高阶的操作(比如指数),ReLU函数可以更加简单地实现。

(3)ReLU函数可以有效地缓解梯度消失问题;

(4)在没有无监督预训练的时候也能有较好的表现。

缺点

(1)随着训练的进行,可能会出现神经元死亡、权重无法更新的情况;

(2)偏移现象和神经元的死亡会大大影响收敛性;

在TensorFlow中,也封装好了ReLU函数,可以调用tf.nn.relu()方法来使用ReLU函数。

Softplus函数

Softplus函数可以看作ReLU函数的平滑形式。Softplus函数也是sigmoid函数的原函数,也就是说,如果对Softplus函数进行求导的话,得到的函数就是sigmoid函数。Softplus函数的表达式为:

其函数图像如图:

Softplus和ReLu更加接近脑神经元的激活模型,而神经网络正是基于脑神经科学发展而来的,这两个激活函数的应用促成了神经网络研究的新浪潮。

下面简单列举Softplus函数的优点:

(1)相比sigmoid函数而言,采用Softplus函数在进行指数运算时,计算量相对小得多;

(2)在进行反向传播求误差梯度时,当求导涉及除法,计算量相对小得多;

(3)对于深层次网络,Softplus函数不会像sigmoid函数那样很容易就会出现梯度消失的情况,从而会使训练变得更加容易;

在TensorFlow框架中,使用tf.nn.softplus()方法来调用Softplus函数。

Softmax函数

Softmax函数也是深度学习的常用激活函数,常用于神经网络的最后一层,并作为输出层进行多分类运算。在强化学习中,常用Softmax函数作为激活函数,并被用于将某个值转化为激活概率。Softmax回归模型的函数表达式为:

对于softmax回归模型可以用下图来解释,对于输入的xs加权求和,再分别加上一个偏置量,最后再输入到softmax函数中。

如果把它写成一个等式,则可以得到Softmax数学表达式:

也可以用矩阵乘法和向量相加来表示这个计算过程,有助于提高计算效率。(也是一种更有效的思考方式):

Softmax矩阵表达式

最后,我们把它写成一个数学公式,可简化为:

再拿Softmax函数和Sigmoid函数做一个对比:

(1)Sigmoid函数主要针对的是二分类问题,而Softmax函数解决的是多分类问题,它们的针对点有所不同,也可以将Sigmoid函数看作Softmax函数的一个特例。

(2)Softmax函数基于多项式分布,而Sigmoid函数则基于伯努利分布;

(3)Softmax函数回归进行多分类时,类与类之间是互斥的,而Sigmoid函数输出的类别并不是互斥的。

在TensorFlow中,可调用tf.nn.softmax()方法来实现Softmax函数。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI的那些事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习基础入门篇四:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
汀丶人工智能
2023/04/12
14.9K1
干货 | 深度学习之损失函数与激活函数的选择
关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 前言 在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结。其中使用的损失函数是均方差,而激活函数是Sigmoid。实际上DNN可以使用的损失函数和激活函数不少。这些损失函数和激活函数如何选择呢?以下是本文的内容。 MSE损失+Sigmoid激活函数的问题 先来看看均方差+Sigmoid的组合有什么问题。回顾下Sigmoid激活函数的表达式为:
昱良
2018/04/08
2.6K0
干货 | 深度学习之损失函数与激活函数的选择
一文概览深度学习中的激活函数
生物神经网络启发了人工神经网络的发展。但是,ANN 并非大脑运作的近似表示。不过在我们了解为什么在人工神经网络中使用激活函数之前,先了解生物神经网络与激活函数的相关性是很有用处的。
小小詹同学
2019/09/17
7410
深度学习基础知识(一)--激活函数
在神经网络中加入激活函数存在的意义就是为网络增加非线性因素,比如全卷积神经网络,不加入激活函数,就是一堆线性操作矩阵运算,对于复杂任务仅用线性操作而不用复杂的函数表示肯定效果不会好。
languageX
2022/05/04
4.7K1
Task 1_补充 深度学习概念
这些Layer都是由一个个神经元组成,每个神经元都接受多个输入,并产生一个输出,就好像人的神经元突触一样。神经元在接收输入时,会各自乘以一定的权重(有时候还会加上一个bias),并根据自己的激活函数产生输出。权重大则说明神经网络认为它的信息比较重要,权重小则认为神经网络认为它的信息不那么重要。
平凡的学生族
2019/05/25
3850
【深度学习】神经网络为何非激活函数不可?
激活函数是神经网络中一个至关重要的概念,决定了某个神经元是否被激活,判断该神经元获得的信息是否有用,并决定该保留还是该去掉此神经元。
zenRRan
2020/02/18
1.2K0
A.深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,最终的输出都是输入的线性组合。 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数。
汀丶人工智能
2023/04/17
1.4K0
A.深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习500问——Chapter03:深度学习基础(2)
超参数:在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
JOYCE_Leo16
2024/03/19
1680
深度学习500问——Chapter03:深度学习基础(2)
深度学习中的激活函数完全指南:在数据科学的诸多曲线上进行现代之旅
原文:Towards Data Science deephub翻译组:zhangzc
deephub
2020/05/09
1.2K0
深度学习中的激活函数完全指南:在数据科学的诸多曲线上进行现代之旅
深度学习中常见激活函数的原理和特点
前面一些分享文章提到了激活函数,这篇文章将介绍各种激活函数,下一篇将分享我和同事在业务中对激活函数的一些思考与应用。
自学气象人
2023/06/20
1.3K0
深度学习中常见激活函数的原理和特点
深度学习中常用激活函数的详细总结
本文总结了几个在深度学习中比较常用的激活函数:Sigmoid、ReLU、LeakyReLU以及Tanh,从激活函数的表达式、导数推导以及简单的编程实现来说明。
触摸壹缕阳光
2020/02/17
2.3K0
深度学习中常用激活函数的详细总结
TensorFlow2.0(7):4种常用的激活函数
激活函数是深度学习,亦或者说人工神经网络中一个十分重要的组成部分,它可以对神经元的接收信息进行非线性变换,将变换后的信息输出到下一层神经元。激活函数作用方式如下公式所示:
Ai学习的老章
2019/12/23
1.4K0
TensorFlow2.0(7):4种常用的激活函数
AI知识点(1)--激活函数
激活函数是神经网络中非常重要的一个内容,神经网络是受到生物神经网络的启发,在生物神经网络中也存在着激活函数,而且激活函数决定了神经元之间是否要传递信号,而在人工的神经网络中,激活函数的作用则主要是给网络添加非线性因素,使得网络可以逼近任意复杂的函数,一个简单的神经元如下图所说,其中 f 表示的就是激活函数。
kbsc13
2019/12/31
1.3K0
AI知识点(1)--激活函数
Tensorflow ActiveFunction激活函数解析
输入参数:● features: 一个Tensor。数据类型必须是:float32,float64,int32,int64,uint8,int16,int8。● name: (可选)为这个操作取一个名字。
演化计算与人工智能
2020/08/14
1.3K0
Tensorflow ActiveFunction激活函数解析
常用激活函数比较
本文结构: 什么是激活函数 为什么要用 都有什么 sigmoid ,ReLU, softmax 的比较 如何选择 ---- 1. 什么是激活函数 如下图,在神经元中,输入的 inputs 通过加权,求
杨熹
2018/04/03
1.7K0
常用激活函数比较
【激活函数合集】盘点当前最流行的激活函数及选择经验
在阅读DarkNet源码的时候发现作者定义了大量从古至今流行的损失函数,本着科普的态度我打算做一个全面的总结,所以就有了这篇文章。
BBuf
2020/02/26
2.9K0
人工智能|神经网络中的激活函数
激活函数是深度学习,也是人工神经网络中一个十分重要的学习内容,对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有非常重要的作用。那么,激活函数的作用应该如何来理解呢?
算法与编程之美
2020/05/25
2.1K0
人工智能|神经网络中的激活函数
非零均值?激活函数也太硬核了!
若网络中不用激活函数,那么每一层的输出都是输入的线性组合。无论神经网络有多少层,网络的输出都是输入的线性组合,这种网络就是原始的感知机(
灿视学长
2021/05/28
2.7K0
一文讲透神经网络的激活函数
原理上来说,神经网络模型的训练过程其实就是拟合一个数据分布(x)可以映射到输出(y)的数学函数,即 y= f(x)。
算法进阶
2022/06/02
7760
一文讲透神经网络的激活函数
8个深度学习中常用的激活函数
当在隐藏层和输出层中实现时,激活函数的选择非常关键。模型的准确性和损失很大程度上依赖于激活函数。此外,必须根据您对模型的期望来选择它们。例如,在二值分类问题中,sigmoid函数是一种最优选择。
deephub
2021/07/01
6960
推荐阅读
相关推荐
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验