relu神经元死亡的一种角度解释

2024-04-03 22:48

本文主要是介绍relu神经元死亡的一种角度解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在阅读 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 of activation functions like ReLU due to vanishing gradients.

翻译成中文:

神经网络接受异于常值范围的输入时,在反向传播过程中会产生大的梯度。这种大的梯度,会因梯度消失而永久关闭诸如 ReLU 的激活函数。

我感到有些疑惑。ReLU 正是为了解决梯度消失问题而设计的。为什么这里会提到「因梯度消失而永久关闭诸如 ReLU 的激活函数」呢?

此篇来讨论这个问题。

ReLU 函数

ReLU 的全称是 Rectified Linear Unit,即:线性整流单元。对于输入 xx,它有输出

 

y=max(0,x).y=max(0,x).

相应地,有导数

 

y′={10x>0,x<0.y′={1x>0,0x<0.

由于 ReLU 在 x>0x>0 时,导数恒为 1。因此在反向传播的过程中,不会因为导数连乘,而使得梯度特别小,以至于参数无法更新。在这个意义上,ReLU 确实避免了梯度消失问题。

异常输入杀死神经元

一个典型的神经元

上图是一个典型的神经元。

现在假设,这个神经元已经经过若干次迭代,其参数 (w⃗ ,b)(w→,b) 已经迭代得趋于稳定。现在,神经元接收到了一个异常的输入 x⃗ x→。比方说,它的某一维特征 xixi 与对应的权重 wiwi 的乘积 wixiwixi 非常大。一般来说,这意味着 xixi 的绝对值非常大。于是,ReLU 的输入就会很大,对应 ReLU 的输出 yy 也就会很大。好了,假设这个 ReLU 神经元期望的输出(ground truth)是 y^y^,这个时候损失就会很大——损失一般是 |y−y^||y−y^| 的增函数,记为 f(|y−y^|)f(|y−y^|)。

于是,在反向传播过程中,传递到 ReLU 的输入时的梯度就是 g=f(|y−y^|)g=f(|y−y^|)。考虑对于偏置 bb 有更新

 

b←b−gη.b←b−gη.

考虑到 gg 是一个很大的正数,于是 bb 可能被更新为一个很小的负数。此后,对于常规输入来说,ReLU 的输入大概率是个负数。这也就是说,ReLU 大概率是关闭的。这时,梯度无法经 ReLU 反向传播至 ReLU 的输入函数。也就是说,这个神经元的参数再也不会更新了。这就是所谓的「神经元死亡」。

如此看来,尽管 ReLU 解决了因激活函数导数的绝对值小于 1,在反向传播连乘的过程中迅速变小消失至 0 的问题,但由于它在输入为负的区段导数恒为零,而使得它对异常值特别敏感。这种异常值可能会使 ReLU 永久关闭,而杀死神经元。

梯度消失?

梯度消失(gradient vanishing)是深度神经网络中的一种现象。导致它的原因有很多。由于激活函数导数连乘导致的梯度消失问题最为出名。因此,在很多人心里(包括我过去也是),梯度消失指得就是这种现象。故而对原文的表述有困惑。这种理解实际上是一种不完全的、很偷懒的做法。因此,对概念的理解要着重深入到实际情况中去,而不能囫囵吞枣。

共勉。

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。

 

转载自:https://liam.page/2018/11/30/vanishing-gradient-of-ReLU-due-to-unusual-input/

这篇关于relu神经元死亡的一种角度解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/874178

相关文章

计算绕原点旋转某角度后的点的坐标

问题: A点(x, y)按顺时针旋转 theta 角度后点的坐标为A1点(x1,y1)  ,求x1 y1坐标用(x,y)和 theta 来表示 方法一: 设 OA 向量和x轴的角度为 alpha , 那么顺时针转过 theta后 ,OA1 向量和x轴的角度为 (alpha - theta) 。 使用圆的参数方程来表示点坐标。A的坐标可以表示为: \[\left\{ {\begin{ar

Go 三色标记法:一种高效的垃圾回收策略

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO系列: 记录博主学习GO语言的笔

matlab fspecial 用法解释

fspecial 函数用于建立预定义的滤波算子,其语法格式为: h = fspecial(type) h = fspecial(type , para) 其中 type 指定算子的类型, para 指定相应的参数; type 的类型有: 1 、 'average' averaging filter 为均值滤波,参数为 hsize 代表模板尺寸

【论文复现|智能算法改进】一种基于多策略改进的鲸鱼算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】 2.改进点 混沌反向学习策略 将混沌映射和反向学习策略结合,形成混沌反向学习方法,通过该方 法生成鲸鱼算法的初始种群。混沌序列采用 Tent 混沌映射: x i + 1 = { δ x i 0 < x i < 0.5

从函数逼近角度理解神经网络、残差连接与激活函数

概述 最近思考激活函数的时候,突然想到神经网络中残差连接是不是和函数的泰勒展开很像,尤其是在激活函数 f ( x ) = x 2 f(x)=x^2 f(x)=x2时(这个激活函数想法来源于 f ( x ) = R e L U 2 ( x ) [ 3 ] f(x)=ReLU^2(x)[3] f(x)=ReLU2(x)[3]),所以验证了一下就顺便写下来了,本文抛砖引玉,如果有建议或更好的想法可以写

深度学习常见概念解释(四)——损失函数定义,作用与种类(附公式和代码)

损失函数 前言定义作用种类1. 均方误差损失(Mean Squared Error Loss,MSE)公式特点和优点缺点使用场景示例代码在机器学习框架中的使用总结 2. 交叉熵损失(Cross-Entropy Loss)公式特点和优点使用场景示例代码在机器学习框架中的使用总结 总结 前言 在机器学习和深度学习中,损失函数(Loss Function)起着至关重要的作用。它是模型

「Debug R」有一种报错叫做Windows专享

今天在R里面用Rsamtools 读取BAM文件时遇到了下面的报错 [W::bam_hdr_read] bgzf_check_EOF: No error[E::bgzf_read] Read block operation failed with error -1 after 55 of 167 bytes 这个错误在网上搜了很久,发现很多人都遇到了,但是在这些人的提问后面都没有给出确切的

Linux学习笔记-目录解释、添加删除用户、更新密码

vim hello.c  --编写c程序 gcc hello.c  --编译c程序 ./a.out      --运行c程序 root 存放root用户的相关文件 是一级目录 home 存放普通用户的相关文件 是二级目录 bin 存放常用命令的目录 sbin 存放的是要有一定的权限才可以使用的命令 mnt 默认挂载光驱和软驱的目录 boot 存放引导相关的文件的目录 etc 存放配置相关的

hash算法的具体解释

这个问题有点难度,不是很好说清楚. 我来做一个比喻吧.  我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分成100个小猪圈.  然后把每个小猪,按照体重赶进各自的猪圈里,记录档案. 好了,如果我们要找某个小猪怎么办呢?我们需要每个猪圈,每个小猪的比对吗?  当然不需要了. 我们先看看要找的这个小猪的体重,然后就找到了对应的猪

Unity 字体创建时候容易导致字体文件不正确的一种情况

上面得到了两种字体格式,一种是TextMeshPro的,另一种是Unity UI系统中默认使用的字体资源。其原因是创建的位置不同导致的。 1.下面是TextMeshPro字体创建的位置 2:下面是Unity UI系统中默认使用的字体资源