334 激活函数
主要内容
1、神经网络和神经元的概念
2、激活函数的概念
3、常用的激活函数
神经网络和神经元的概念
人工神经网络是一种模拟人的大脑神经网络的一种模型,以能够实现人工智能为目的的机器学习技术。人脑中的神经网络是一个非常复杂的组织,成人的大脑中估计有1000亿个神经元。
下图为人的大脑的单个神经元结构,一个神经元通常具有多个树突,主要用来接收其它神经元传入的信息。轴突只有一条,轴突尾端有多个轴突末梢,这个末梢和其它神经元的树突连接,可以给其它多个神经元传递信息。

1943年,心理学家McCulloch和数学家Pitts参考了生物神经元的结构,发表了抽象的神经模型,如下图。该模型包含多个输入,2个计算功能,以及一个输出。输入可以类比为神经元的树突,输出可以类比为神经元的轴突,计算可类比为细胞核。

这里的非线性函数即为激活函数。
激活函数的概念
激活函数(Activation Function)是一种添加到人工神经网络中的函数。神经网络模拟了人类神经元的工作机理,类似于人类大脑中基于神经元的模型。在神经元中,输入的数据经过一系列加权求和后作用于另一个函数,这个函数就是激活函数。激活函数最终决定了是否传递信号以及要发射给下一个神经元的内容。
激活函数可以分为线性激活函数(线性方程控制输入到输出的映射,在数学上,线性函数关系是直线)以及非线性激活函数(非线性方程控制输入到输出的映射,在数学上,非线性函数关系是非直线,包括各种曲线、拆线、不连续的线等)
因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入非线性激活函数之后,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。
常用的激活函数
一般来说,在神经元中,激活函数是很重要的一部分,为了增强网络的表示能力和学习能力,神经网络的激活函数都是非线性的,通常具有以下几点性质:
- 连续并可导(允许少数点上不可导),可导的激活函数可以直接利用数值优化的方法来学习网络参数;
- 激活函数及其导数要尽可能简单一些,太复杂不利于提高网络计算率;
- 激活函数的导函数值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。
下面介绍常用的激活函数
1. Sigmoid函数
Sigmoid函数也叫Logistic函数,是一个十分常见的激活函数,函数的表达式如下:

Sigmoid函数的取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。图像类似一个S形曲线:

Sigmoid函数的优点:
- 1. 由于输出值限定在 0 到1,因此它对每个神经元的输出进行了归一化;
- 2. 用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适;
- 3. 梯度平滑,避免「跳跃」的输出值;
- 4. 明确的预测,即非常接近 1 或 0。
Sigmoid函数的缺点:
- 1. 梯度消失:注意:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。
- 2. 不以零为中心:Sigmoid 输出不以零为中心的,,输出恒大于0,非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢。
- 3. 计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂,计算机运行起来速度较慢。
2. ReLU函数
ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,公式及函数图像如下:


ReLU 函数是深度学习中较为流行的一种激活函数,相比于 sigmoid 函数,它具有如下优点:
- 1. 当输入为正时,导数为1,一定程度上改善了梯度消失问题,加速梯度下降的收敛速度;
- 2. 计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比 sigmoid 更快。
- 3. 被认为具有生物学合理性(Biological Plausibility),比如单侧抑制、宽兴奋边界(即兴奋程度可以非常高)
ReLU函数的缺点:
- 1. Dead ReLU 问题。当输入为负时,ReLU 完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零。
- 2. ReLU神经元在训练时比较容易“死亡”。在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU 神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。这种现象称为死亡ReLU问题,并且也有可能会发生在其他隐藏层
- 3. 不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心,ReLU 函数的输出为 0 或正数,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。
3. Softmax激活函数
Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。函数表达式如下:


Softmax 与 max 函数不同:max 函数仅输出最大值,但 Softmax 确保较小的值具有较小概率,并且不会直接丢弃。
Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。
Softmax 激活函数的不足:
- 1. 在零点不可微;
- 2. 负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。