Hi,大家好,我是半亩花海。本文主要介绍神经网络中必要的激活函数的定义、分类、作用以及常见的激活函数的功能。
目录
一、激活函数定义
二、激活函数分类
三、常见的几种激活函数
1. Sigmoid 函数
(1)公式
(2)图像
(3)优点与不足
2. Tanh 函数
(1)公式
(2)图像
(3)优点与不足
3. ReLU 函数
(1)公式
(2)图像
(3)优点与不足
4. Softmax 函数
(1)公式
(2)图像
(3)特点与不足
一、激活函数定义
激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端,旨在帮助网络学习数据中的复杂模式。
激活函数是神经网络中的一种非线性变换,它定义在每个神经元上,将神经元输入信号转换为输出信号。在深度学习中,激活函数非常重要,因为它们使神经网络能够捕捉到非线性关系,从而能够更好地逼近复杂的函数或映射。
下图展示了一个神经元是如何输入激活函数以及如何得到该神经元最终的输出:
二、激活函数分类
激活函数可以分成两类——饱和激活函数和非饱和激活函数。
- 饱和激活函数: Sigmoid、 Tanh...
- 非饱和激活函数: ReLU 、Leaky Relu 、ELU、PReLU、RReLU...
了解一下饱和:
假设 h(x) 是一个激活函数。
- 当我们的 n 趋近于正无穷,激活函数的导数趋近于 0,那么我们称之为右饱和。
- 当我们的 n 趋近于负无穷,激活函数的导数趋近于 0,那么我们称之为左饱和。
当一个函数既满足左饱和又满足右饱和的时候我们就称之为饱和,典型的函数有 Sigmoid、Tanh 函数。
- 反之,不满足以上条件的函数则称为非饱和激活函数。
- Sigmoid 函数需要一个实值输入压缩至 [0,1] 的范围。
- tanh 函数需要讲一个实值输入压缩至 [-1, 1] 的范围。
相对于饱和激活函数,使用非饱和激活函数的优势在于两点:
- 非饱和激活函数能解决深度神经网络(层数非常多)带来的梯度消失问题。
- 使用非饱和激活函数能加快收敛速度。
三、常见的几种激活函数
在深度学习中,最常用的激活函数包括 Sigmoid函数、ReLU函数(Rectified Linear Unit)、Tanh 函数、Softmax 函数等。这些激活函数不同的特点和优缺点,应根据具体的问题选择合适的激活函数。
例如:Sigmoid 函数在输出处的值域为 [0,1],可以将输出解释为概率,因此常用于二分类问题;ReLU 函数在输入为负数时输出为 0,可以有效地解决梯度消失问题,因此广泛应用于卷积神经网络中。
1. Sigmoid 函数
(1)公式
Sigmoid 激活函数的数学表达式为:
导数表达式为:
(2)图像
(3)优点与不足
Sigmoid 优点:
- 值域为 [0, 1],非常适合作为模型的输出函数用于输出一个 (0,1) 范围内的概率值,可用于将预测概率作为输出的模型,比如用于表示二分类的类别或者用于表示置信度。
- Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到 1,因此它对每个神经元的输出进行了归一化。
- 该函数是连续可导的(即可微),可以提供非常平滑的梯度值,防止模型训练过程中出现突变的梯度(即避免“跳跃”的输出值)。
Sigmoid 不足:
- 从其导数的函数图像上可以看到,其导数的最大值只有 0.25,而且当 x 在 [-5, 5] 的范围外时其导数值就已经几乎接近于 0 了。这种情况会导致训练过程中神经元处于一种饱和状态,反向传播时其权重几乎得不到更新,从而使得模型变得难以训练,这种现象被称为梯度消失问题。
- 其输出不是以 0 为中心而是都大于 0 的(这会降低权重更新的效率),这样下一层的神经元会得到上一层输出的全正信号作为输入,所以 Sigmoid 激活函数不适合放在神经网络的前面层而一般是放在最后的输出层中使用。
- 需要进行指数运算(计算机运行得较慢),计算量大及计算复杂度高,训练耗时;指数的越大其倒数就越小,容易产生梯度消失。
2. Tanh 函数
(1)公式
Tanh 激活函数的数学表达式为:
导数表达式为:
(2)图像
(3)优点与不足
Tanh 优点:
- 在分类任务中,双曲正切函数(Tanh)逐渐取代 Sigmoid 函数作为标准的激活函数,其具有很多神经网络所钟爱的特征。它是完全可微分的,反对称,对称中心在原点。
- 输出是 S 型曲线,具备打破网络层与网络层之间的线性关系,可以把网络层输出非线形地映射到 (−1,1) 区间里。负输入将被强映射为负,而零输入被映射为接近零;Tanh 的输出间隔为 1 且值域是以 0 为中心的 [-1,1](可以解决 Sigmoid 激活函数输出不以 0 为中心的问题。)
- 在一般的二元分类问题中,Tanh 函数一般用于隐藏层,而 Sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。
Tanh 不足:
- 当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新。
- Tanh 函数也需要进行指数运算,所以其也会存在计算复杂度高且计算量大的问题。
- 当神经网络的层数增多的时候,由于在进行反向传播的时候,链式求导,多项相乘,函数进入饱和区(导数接近于零的地方)就会逐层传递,这种现象被称为梯度消失。
3. ReLU 函数
(1)公式
ReLU 激活函数的数学表达式为:
导数表达式为:
(2)图像
(3)优点与不足
① ReLU 优点:
- ReLU 函数在正输入时是线性的,收敛速度快,计算速度快,同时符合恒等性的特点。当输入为正时,由于导数是1,能够完整传递梯度,不存在梯度消失的问题(梯度饱和问题)。
- 计算速度快。ReLU 函数中只存在线性关系且无论是函数还是其导数都不包含复杂的数学运算,因此它的计算速度比 Sigmoid 和 Tanh 更快。
- 当输入大于0时,梯度为1,能够有效避免链式求导法则梯度相乘引起的梯度消失和梯度爆炸;计算成本低。
- 它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为零,从而允许基于梯度的学习(尽管在 x=0 的时候,导数是未定义的)。当输入为负值的时候,ReLU 的学习速度可能会变得很慢,甚至使神经元直接无效。因为此时输入小于零而梯度为零,从而其权重无法得到更新,在剩下的训练过程中会一直保持静默。
② ReLU 不足:
- ReLU 的输入值为负的时候,输出始终为 0,其一阶导数也始终为 0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。为了解决 ReLU 函数这个缺点,在 ReLU 函数的负半区间引入一个泄露(Leaky)值,所以称为 Leaky ReLU 函数。
- 与 Sigmoid 一样,其输出不是以 0 为中心的(ReLU 的输出为 0 或正数)。
- ReLU 在小于 0 的时候梯度为零,导致了某些神经元永远被抑制,最终造成特征的学习不充分;这是典型的 Dead ReLU 问题,所以需要改进随机初始化,避免将过多的负数特征送入ReLU。
4. Softmax 函数
(1)公式
Softmax 激活函数的数学表达式为:
这里使用梯度无法求导,所以导函数图像是一个 y=0 的直线。
(2)图像
(3)特点与不足
① Softmax 特点:
- 在零点不可微,负输入的梯度为零。这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。
- 将预测结果转化为非负数、预测结果概率之和等于1。
- 经过使用指数形式的 Softmax 函数能够将差距大的数值距离拉的更大。在深度学习中通常使用反向传播求解梯度进而使用梯度下降进行参数更新的过程,而指数函数在求导的时候比较方便.
② Softmax 不足:
使用指数函数,当输出值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出。