写在最前面

本篇文章用于记录神经网络中激活函数相关的知识,主要包括:激活函数的含义用处分类选择等。

参考内容如下:

详解激活函数(Sigmoid/Tanh/ReLU/Leaky ReLu等)

美!最常用的10个激活函数!

人工神经网络的驱动者:激活函数是什么?

什么是激活函数

激活函数(Activation-Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。

在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。也就是说,激活函数决定了神经网络每一层节点的输出值,不同的激活函数可以得到不同的输出值曲线,以适应不同的需求

神经网络的传播流程

在介绍具体的激活函数之前,我们需要先了解一下神经网络的传播流程,以确定激活函数在这个传播过程中的实施位置,从全局的角度进行理解。

上图给出了神经网络的前向传播流程,或者说是神经网络其中一个节点的传播流程。神经网络是由很多节点构成的,每一个节点的实现都是相同的,所以我们这里只需要了解单独一个节点的传播流程即可。

可以将此节点的传播流程分为两个部分:

  • 值的计算:输入值与权值的乘积和+偏置项
  • 激活函数:将上值作为自变量输入到激活函数而后将映射值作为输出即可。

每一个节点的输出都是下一层节点的一个输入。

激活函数的原理

前面介绍激活函数时提到:激活函数可以帮助网络学习数据的复杂模式,但是到底是如果帮助的呢

激活函数是向神经网络中引入非线性因素,通过激活函数神经网络就可以拟合各种曲线

为什么需要加入非线性因素

因为我们使用到的绝大多数数据集都是非线性分布的,而神经网络中值的计算:v=wx+b显然是线性的。在神经网络中,如果网络的每层都是线性映射,那么这些层组合起来依然是线性的。因此,多层的线性映射复合后实际上只是起到了一层的效果,这样就算增加神经网络层数也无法提高模型的表达能力
为了使网络的映射不是线性的,所有层的输出都要传递到非线性函数中,如 ReLU 函数Tanh函数等,这样作用之后就成为了非线性的。这些非线性函数就是激活函数

通过一张图简要看一下激活函数的作用

如图所示,前两层为加入激活函数后的模型效果,第三层线性模型的效果。

常用的几个激活函数

Sigmoid函数

函数图像与映射关系

函数表达式如下:

函数介绍

Sigmoid 函数的输出范围是0到1。由于输出值限定在0到1,因此它对每个神经元的输出进行了归一化

适用场景

用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适。常用于二分类问题中。将输出压缩到[0,1]范围内。大部分时候都与二元交叉熵损失一起使用。

飞桨实现

函数界面

SoftMax函数

函数图像与映射关系

函数表达式如下:

函数介绍

对于长度为 K 的任意实向量,Softmax可以将其压缩为长度为K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。

适用场景

多分类中经常使用,使网络输出的是有效的概率分布。这意味着所有值都在 [0,1] 范围内,且总和为 1。可与多元交叉熵损失一起使用。

飞桨实现

函数介绍界面

Tanh / 双曲正切激活函数

函数图像与映射关系

函数表达式如下:

函数介绍

tanh 是一个双曲正切函数。tanh 函数和 sigmoid 函数的曲线相对相似。但是它比 sigmoid 函数更有一些优势。

适用场景

在一般的二元分类问题中,tanh函数用于隐藏层,而sigmoid函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。

飞桨实现

函数界面

ReLU函数

函数图像与映射关系

函数表达式如下:

函数介绍

ReLU 函数是深度学习中较为流行的一种激活函数,相比于 sigmoid 函数tanh 函数,它具有如下优点

  • 输入为正时,不存在梯度饱和问题。
  • 计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比 sigmoid 和 tanh 更快

当然也有缺点

  • Dead ReLU 问题。当输入为负时,ReLU完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,sigmoid 函数和 tanh 函数也具有相同的问题;
  • 我们发现 ReLU 函数的输出为0或正数,这意味着ReLU函数不是以0为中心的函数。

飞桨实现

函数界面

Leaky ReLU函数

函数图像与映射关系

函数表达式如下:

函数介绍

它是一种专门设计用于解决 Dead ReLU 问题的激活函数,leak 有助于扩大 ReLU 函数的范围,通常 a 的值为 0.01 左右;

飞桨实现

函数界面

ELU函数

函数图像与映射关系

函数表达式如下:

函数介绍

ELU的提出也解决了ReLU的问题。与ReLU相比,ELU有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度

飞桨实现

函数界面