一. 激活函数
激活函数(Activation Function)是人工神经网络中至关重要的组成部分,它负责在神经元节点上对输入信号进行非线性转换。在神经网络模型的计算过程中,激活函数被应用于每个神经元的输出以引入非线性特性,使得网络模型可以逼近任意函数, 从而提升网络对复杂问题的拟合能力,这对于解决复杂、非线性的问题至关重要。
二. 激活函数的基本作用
-
非线性映射:如果神经网络中没有激活函数,每一层都只是执行矩阵乘法和加法等线性操作,无论堆叠多少层,整个网络都无法学习到非线性的模式,其表达能力将仅限于线性函数的组合。激活函数允许网络通过组合多个非线性变换来近似任何复杂的函数关系。
-
特征空间的扩展:通过应用非线性激活函数,神经网络可以将输入数据从原始特征空间映射到更高维度的特征空间,在这个新空间中,数据可能更容易被分类或预测。
-
梯度传播:激活函数的选择还影响着反向传播算法中的梯度流动。不同的激活函数有不同的梯度特性,这会直接影响训练效率和模型性能,例如是否会导致梯度消失或梯度爆炸问题。
三. 4个基础的激活函数
人工神经网络中4个基础的激活函数分别为:Sigmoid函数、tanh函数、ReLU函数和Softmax函数,下面将简单介绍下它们的特性以及在使用中的常见问题。
1.Sigmoid函数
(1) 函数表达式
(2)特性
结合上面的函数图像及其导数图像,可以看出:
- 函数以0.5为中心,值域为(0,1),导数的最大值为0.25;
- 输入值(加权和)在 [-3, 3] 之间才会有比较好的效果;
- 输入值(加权和)在(-∞,-6)和(6,+∞)的区间上会发生梯度消失/弥散(饱和问题);
(3)应用
- Sigmoid函数一般只用于二分类(是否问题)的输出层;
- 在机器学习中用于逻辑回归,把线性方程的预测值转换为概率值。
2. Tanh(双曲正切)函数
(1)函数表达式
(2)特性
- 函数以0为中心,值域(-1,1),导数最大值为1 ;
- 输入值(加权和)在 [-3, 3] 之间输出值才会有明显差异;
- 输入值(加权和)在(-∞,-3)和(3,+∞)的区间上会发生梯度消失;
- 相比Sigmoid,梯度更大,收敛速度更快,可以减少迭代次数;
(3)应用
- 当需要在神经网络的隐藏层中使用指数形式的激活函数时,选择tanh激活函数 ;
- 相比于sigmoid函数,tanh函数解决了饱和区间的零中心化问题,因此在网络训练过程中梯度消失的问题可能会少一些,尤其是在深层网络中;
- 因其输出值位于-1到1之间且接近0均值,tanh函数经常应用于循环神经网络(RNNs)的隐藏层中,这有助于保持内部状态的动态范围相对紧凑;
- 当预测值需要限制在一个有界区间内时,tanh函数可用于回归问题,将其输出约束在(-1, 1)范围内。
2.5 关于梯度消失现象的说明
梯度消失(Gradient Vanishing)和梯度爆炸(Gradient Explosion)是深度学习训练中遇到的两个重要问题,它们都与反向传播算法在处理深层神经网络时的梯度计算有关。
梯度消失指的是在训练深度神经网络时,通过反向传播计算的梯度值变得非常小以至于几乎接近于零的现象。
这是因为随着信号在网络中的多层传递,每一层都会乘以该层激活函数的导数值。对于上面提到的Sigmoid和Tanh函数,当输入值落在某个区间之外时,其梯度变得极小,权重更新也会变得极其微小,从而影响模型的学习效率,尤其是对靠近输入层的参数更新极为不利,造成这些层难以学习到有用的特征,使得整个网络的训练速度变慢或者无法有效收敛。
相反地,梯度爆炸是指梯度值在反向传播过程中变得极大,甚至可能达到无穷大,这会导致模型参数在每次更新时发生剧烈变化,进而使得训练过程不稳定。
这种情况通常发生在初始化权重过大、网络结构设计不合理或没有采取合适的正则化措施的情况下。一旦梯度过大,模型权重的更新可能会超出合理范围,使网络进入发散状态,不再能够学到有意义的模式,严重时甚至可能导致数值溢出错误。
解决梯度消失问题的方法之一就是选择具有更好梯度性质的激活函数,例如ReLU函数及其变种,它们都可以有效地缓解梯度消失问题。
3. ReLU函数
(1)函数表达式
(2)特性
- 将小于 0 的值映射为 0,而大于 0 的值则保持不变;
- ReLU 函数能够在x>0时保持梯度不衰减,而不存在饱和问题;
- 可能出现“神经元死亡”现象:部分输入落在小于0区域时,会导致对应权重无法更新;这一特性的好处是可以缓解神经网络的过拟合问题,但当出现大面积神经元死亡时,就会对神经网络整体造成不利影响 ;
(3)应用
- ReLU几乎适用于任何需要添加非线性以提高模型表达能力的神经网络架构,特别是那些倾向于构建深层结构的任务 ;
- ReLU在卷积神经网络(CNNs)的隐藏层中被广泛应用,尤其是图像识别、图像分类和目标检测任务;
- 为了优化上面提到的“神经元死亡”问题,ReLU函数发展除了很多变体,如Leaky ReLU、PReLU、ELU等。
4. Softmax函数
(1)函数表达式
(2)特性
- Softmax函数接收一个任意实数张量,并将其转换为一个概率分布,即将所有输出值映射到[0, 1]区间内,并且这些输出值的总和为1。这意味着每个输出可以解释为对应类别出现的概率;
- 由于Softmax输出的是概率分布,因此非常适合解决多类别分类问题;
- Softmax通过将每个输入先通过指数函数
进行转换,然后再除以所有元素经过指数函数转换后的总和,这样即使原始输入差距非常大,也能确保输出结果之间有稳定的相对大小关系;
- 相比于Sigmoid或Tanh函数在多分类问题上可能出现的梯度饱和问题,Softmax函数在训练深层神经网络时更有可能维持梯度的有效性,有助于模型收敛;
(3)应用
- 用在多类别分类任务的输出层,将神经网络模型最后一层的线性输出转化为各个类别的预测概率。
4.5 关于Softmax函数中对输入值进行e指数函数转换的说明
上面提到,Softmax函数会将输入值(加权和,logits)转换为[0,1]区间内的概率值,这一步使用了 指数函数对原数据进行转换,这样做相比不转换或者用其他函数进行转换有以下几点好处:
- 确保输出值
中的所有元素都是非负的;
- e 的指数函数能够很好地平衡不同输入值之间的相对大小关系,并将其转换成易于解释的概率形式;
- 相比于其他可能的基底,如2或10,e 能够提供更加平滑的增益曲线,使得输出对于输入的小变化更敏感,有助于训练过程中的优化。