本博客旨在描述梯度消失问题,并解释使用Sigmoid函数导致其发生的原因

sigmoid函数是开发深度神经网络时最常用的激活函数之一。由于使用sigmoid函数会导致梯度消失问题,这限制了深度神经网络的训练。这会导致神经网络以较慢的速度学习或在某些情况下根本不学习。本博客旨在描述梯度消失问题,并解释sigmoid函数的使用导致了这个问题。
Sigmoid函数
Sigmoid函数在神经网络中经常用于激活神经元。它是一个具有特征S形状的对数函数。函数的输出值介于0和1之间。Sigmoid函数用于激活二元分类问题中的输出层。计算方法如下:

下面的图表显示了sigmoid函数本身及其导数之间的比较。Sigmoid函数的一阶导数是钟形曲线,值的范围从0到0.25。

了解神经网络如何进行前向传播和反向传播对理解梯度消失问题至关重要。

前向传播
神经网络的基本结构是一个输入层、一个或多个隐藏层和一个单一的输出层。在前向传播过程中,网络的权重被随机初始化。输入特征与隐藏层的每个节点对应的权重相乘,然后在每个节点的净和上加入偏置。然后使用激活函数将此值转换为节点的输出。为了生成神经网络的输出,隐藏层输出与权重加偏置值相乘,然后使用另一个激活函数进行转换。这将是神经网络对于给定输入值的预测值。

反向传播
当网络生成输出时,损失函数(C)指示它预测输出的好坏程度。网络执行反向传播来最小化损失。反向传播方法通过调整神经网络的权重和偏置来最小化损失函数。在此方法中,计算损失函数相对于网络中每个权重的梯度。
在反向传播中,节点的新权重(w new )是使用旧权重(w old )和学习率(ƞ)与损失函数梯度的乘积计算出来的。


通过偏导数的链式法则,我们可以将损失函数的梯度表示为每个节点的激活函数的梯度与其权重的乘积。因此,网络中节点的更新权重取决于每个节点的激活函数的梯度。
对于具有sigmoid激活函数的节点,我们知道sigmoid函数的偏导数达到最大值0.25。当网络中存在更多层时,导数的乘积值会减小,直到某个点上损失函数的偏导数接近于零,偏导数消失。我们称之为梯度消失问题。
在浅层网络中,sigmoid函数可以用作激活函数,因为梯度的小值不会成为问题。但是在深层网络中,梯度消失可能会对性能产生重大影响。当导数消失时,网络的权重保持不变。在反向传播期间,神经网络通过更新其权重和偏置来减少损失函数而学习。在梯度消失的网络中,权重无法更新,因此网络无法学习。结果,网络的性能将下降。
克服问题的方法
梯度消失问题是由用于创建神经网络的激活函数的导数引起的。解决问题的最简单方法是替换网络的激活函数。使用ReLU等激活函数代替sigmoid。
修正线性单元(ReLU)是一种激活函数,当应用于正输入值时,它会生成正线性输出。如果输入为负数,则函数将返回零。

ReLU函数的导数在大于零的输入上被定义为1,在负的输入上被定义为0。下面共享的图表显示了ReLU函数的导数

如果在神经网络中使用ReLU函数作为激活函数,而不是使用Sigmoid函数,则损失函数的偏导数将具有0或1的值,这可以防止梯度消失。因此,使用ReLU函数可以防止梯度消失。使用ReLU的问题在于当梯度的值为0时。在这种情况下,节点被视为死节点,因为权重的旧值和新值保持不变。可以通过使用泄漏ReLU函数来避免这种情况,以防止梯度降至零值。
<p避免梯度消失问题的另一种技术是权重初始化。这是在神经网络中给权重分配初始值的过程,以便在反向传播过程中,权重永远不会消失。
总之,梯度消失问题源于用于创建神经网络的激活函数的偏导数的本质。使用Sigmoid激活函数的深度神经网络中的问题可能更严重。使用ReLU和泄漏ReLU等激活函数可以显着减少该问题。
Tina Jacob热衷于数据科学,并相信无论生活带来什么,学习和成长都是生命中的重要部分。