FakeOrange
预计阅读时间:2分钟3秒

浅谈由异常输入导致的 ReLU 神经元死亡的问题

关于ReLU激活函数运作的更多细节

0
0

前言



本文属于搬运修改内容,原作者:Liam Huang,原文链接著名与文章末尾。


最近在阅读 Airbnb 的论文《Applying Deep Learning to Airbnb Search》时,注意到作者在谈及特征归一化的必要性时提到:


Feeding values that are outside the usual range of features can cause large gradients to back propagate. This can permanently shut off activation functions like ReLU due to vanishing gradients.


翻译为中文:


输入超出特征常规范围的值,可能导致反向传播中出现较大的梯度。这种梯度会因梯度消失而永久关闭诸如 ReLU 的激活函数。


对此表述,我感到有些疑惑。ReLU 本身的设计初衷正是为了解决梯度消失问题。为什么这里会提到“因梯度消失而永久关闭诸如 ReLU 的激活函数”呢?本文将对此问题展开讨论。



ReLU 函数简介



ReLU 是 Rectified Linear Unit(线性整流单元)的缩写。其定义如下:


对于输入 x,输出为:


f(x)=max⁡(0,x)


相应的导数为:


data/78df2c1f-e442-415d-a382-fa7925af0c4b/4a5b6e21-e0bd-434d-bd98-73f89949d8cbimage.png


由于 ReLU 在 x>0 时,导数恒为 1,因此在反向传播过程中不会因导数连乘而使梯度快速减小到近乎 0,导致参数无法更新。从这一点看,ReLU 确实解决了传统激活函数中因导数值小于 1 而引起的梯度消失问题。



异常输入如何导致神经元死亡?



以下是一个典型的神经元结构:


假设该神经元经过多次迭代后,参数 data/78df2c1f-e442-415d-a382-fa7925af0c4b/b164a19c-0286-4e32-a00e-4e0117f1fd68image.png 已趋于稳定。这时,神经元接收到一个异常输入 x,其中某一维特征 data/78df2c1f-e442-415d-a382-fa7925af0c4b/c31f5a2b-6ad7-4009-a0e7-c56ea211bf03image.png 的值与对应权重  data/78df2c1f-e442-415d-a382-fa7925af0c4b/70f5754d-ac96-480d-a03c-4ee6744be5f0image.png的乘积 data/78df2c1f-e442-415d-a382-fa7925af0c4b/14a12528-a8fd-4225-b2e2-75270fbb47e4image.png​ 非常大。通常,这意味着 data/78df2c1f-e442-415d-a382-fa7925af0c4b/cbb46cae-1ac1-4bc9-9a7a-7d4c335262e3image.png 的绝对值极大,从而导致 ReLU 的输入值极大,对应的输出 f(x) 也很大。


假设该神经元的期望输出(即真实值)为 yyy,此时损失函数(例如平方损失)会很大。记损失函数为 LLL,反向传播时的梯度为:


data/78df2c1f-e442-415d-a382-fa7925af0c4b/5764c276-3348-4254-a9d1-b5fa7b8ef335image.png


对于偏置 b 的更新公式为:

data/78df2c1f-e442-415d-a382-fa7925af0c4b/14d05fba-0cfd-4af0-b590-0bc9991e2446image.png


由于 data/78df2c1f-e442-415d-a382-fa7925af0c4b/046909dd-1129-40a8-8b42-3453d2ec5a3eimage.png​ 的值可能很大,偏置 b 被更新为一个很小的负值。此后,对于常规输入来说,ReLU 的输入大概率为负值,这意味着该神经元的输出将长期为 0。此时,梯度无法继续通过 ReLU 反向传播至更早的网络层,导致该神经元的参数不再更新,即所谓的“神经元死亡”。



梯度消失与神经元死亡的关系



梯度消失(Gradient Vanishing)是深度神经网络中的一种现象,其成因多样。最常见的是因激活函数导数值较小,导致反向传播过程中梯度连乘后迅速趋于 0。然而,ReLU 本身设计初衷是为了解决这种问题,但它在输入为负时导数恒为 0,使得其对异常输入非常敏感。


这种异常输入可能导致 ReLU 的长期关闭,进而“杀死”神经元。从某种意义上看,这也是一种特殊的梯度消失现象。然而,认为神经元“永久死亡”或“不可逆”并不完全准确。



死亡神经元是否真的“永久死亡”?



事实上,ReLU 神经元并非永远无法恢复。假设一个 ReLU 神经元在整个数据集上均未被激活,即对所有样本 x,输出 data/78df2c1f-e442-415d-a382-fa7925af0c4b/81d20831-6da6-4fa4-8e85-677307e5afefimage.png


在这种情况下:

  1. 该神经元的权重 Wjk 确实不会更新。
  2. 然而,前一层的激活值 σj 和对应权重 Wij 仍有可能通过与其他激活神经元的连接而得到更新。
  3. 随着 Wij 的分布发生变化,σk=ReLU(∑jWjkσj) 有可能从 0 跳出,重新被激活。

因此,所谓的“死亡神经元”并非完全不可恢复,而是可能在后续训练中重新激活。



总结



尽管 ReLU 在解决传统梯度消失问题上表现优异,但其在负区间的导数恒为 0,使得其对异常输入格外敏感。这种特性可能导致部分神经元在训练中长时间不被激活,形成“死亡神经元”。然而,通过网络中其他参数的调整,这些“死亡神经元”也有可能重新被激活。

对于这一问题,我们需要对异常输入保持警惕,同时通过适当的数据归一化、正则化等手段减小其影响,从而提高模型的鲁棒性。



原文链接

评论
Copyright Created by DataER | 沪ICP备2024052789号-5 | 沪公网安备31010402336337号