ReLU激活函数的缺点

训练的时候很”脆弱”,很容易就”die”了,训练过程该函数不适应较大梯度输入,因为在参数更新以后,ReLU的神经元不会再有激活的功能,导致梯度永远都是零。

例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.

如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

原因:

假设有一个神经网络的输入W遵循某种分布,对于一组固定的参数(样本),w的分布也就是ReLU的输入的分布。假设ReLU输入是一个低方差中心在+0.1的高斯分布。

在这个场景下:

  • 大多数ReLU的输入是正数,因此
  • 大多数输入经过ReLU函数能得到一个正值(ReLU is open),因此
  • 大多数输入能够反向传播通过ReLU得到一个梯度,因此
  • ReLU的输入(w)一般都能得到更新通过随机反向传播(SGD)

现在,假设在随机反向传播的过程中,有一个巨大的梯度经过ReLU,由于ReLU是打开的,将会有一个巨大的梯度传给输入(w)。这会引起输入w巨大的变化,也就是说输入w的分布会发生变化,假设输入w的分布现在变成了一个低方差的,中心在-0.1高斯分布。

在这个场景下:

  • 大多数ReLU的输入是负数,因此
  • 大多数输入经过ReLU函数能得到一个0(ReLU is close),因此
  • 大多数输入不能反向传播通过ReLU得到一个梯度,因此
  • ReLU的输入w一般都得不到更新通过随机反向传播(SGD)

发生了什么?只是ReLU函数的输入的分布函数发生了很小的改变(-0.2的改变),导致了ReLU函数行为质的改变。我们越过了0这个边界,ReLU函数几乎永久的关闭了。更重要的是ReLU函数一旦关闭,参数w就得不到更新,这就是所谓的‘dying ReLU’。

(译者:下面有一段关于神经元死亡后能够复活的讨论,未翻译)

从数学上说,这是因为ReLU的数学公式导致的

r(x)=max(x,0)r(x)=max(x,0)

导数如下

Δxr(x)=1(x>0)Δxr(x)=1(x>0)

所以可以看出,如果在前向传播的过程中ReLU is close,那么反向传播时,ReLU也是close的。

参考:

https://www.zhihu.com/question/59031444

https://www.jianshu.com/p/22d9720dbf1a

https://blog.csdn.net/disiwei1012/article/details/79204243

原文地址:https://www.cnblogs.com/Time-LCJ/p/9235711.html

时间: 2024-10-11 23:58:09

ReLU激活函数的缺点的相关文章

tensorflow Relu激活函数

1.Relu激活函数 Relu激活函数(The Rectified Linear Unit)表达式为:f(x)=max(0,x). 2.tensorflow实现 #!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf input_data = tf.constant( [[0, 10, -10],[-1,2,-3]] , dtype = tf.float32 ) output = tf.nn.relu(input

Relu激活函数的优点

Relu优点: 1.可以使网络训练更快. 相比于sigmoid.tanh,导数更加好求,反向传播就是不断的更新参数的过程,因为其导数不复杂形式简单. 2.增加网络的非线性. 本身为非线性函数,加入到神经网络中可以是网格拟合非线性映射. 3.防止梯度消失. 当数值过大或者过小,sigmoid,tanh的导数接近于0,relu为非饱和激活函数不存在这种现象. 4.使网格具有稀疏性. 由于小于0部分为0,大于0部分才有值,所以可以减少过拟合. softmax作用: 将神经网络的输出变为概率分布. 1.

ReLu激活函数

起源:传统激活函数.脑神经元激活频率研究 传统神经网络中最常用的两个激活函数,Sigmoid系(Logistic-Sigmoid.Tanh-Sigmoid)被视为神经网络的核心所在. 从数学上来看,非线性的Sigmoid函数对中央区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果. 从神经科学上来看,中央区区域酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区. 无论是哪种解释,其实都比早期的线性激活函

神经网络中的激活函数具体是什么?为什么Relu要好过与tanh和sigmoid function

为什么要引入激活函数? 如果不用激活函数(其实相当于激励函数是f(x)=x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机了. 正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是是输入的线性组合,可以逼近任意函数).最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入.激活函数的作用是为了增加神经网络模型的非线性.否则你想

[转]激活函数ReLU、Leaky ReLU、PReLU和RReLU

"激活函数"能分成两类--"饱和激活函数"和"非饱和激活函数". sigmoid和tanh是"饱和激活函数",而ReLU及其变体则是"非饱和激活函数".使用"非饱和激活函数"的优势在于两点:    1.首先,"非饱和激活函数"能解决所谓的"梯度消失"问题.    2.其次,它能加快收敛速度.    Sigmoid函数需要一个实值输入压缩至[0,1]

注意力机制下的激活函数:自适应参数化ReLU

本文在综述传统激活函数和注意力机制的基础上,解读了一种注意力机制下的激活函数,即自适应参数化修正线性单元(Adaptively Parametric Rectifier Linear Unit,APReLU),希望对大家有所帮助. 1. 激活函数 激活函数是现代人工神经网络的重要组成部分,其作用是实现人工神经网络的非线性化.我们首先来介绍几种最常见的激活函数,即Sigmoid激活函数.Tanh激活函数和ReLU激活函数,分别如下图所示. Sigmoid激活函数和Tanh激活函数的梯度取值范围分别

[转]神经网络-激活函数

神经网络之激活函数(Activation Function) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 更多相关博客请猛戳:http://blog.csdn.net/cyh_24 如需转载,请附上本文链接:http://blog.csdn.net/cyh_24/article/details/50593400 日常 coding 中,我们会很自然的使用一些激活函数,比如:sigmoid.ReLU等等.不过好像忘了问自己一(n)件事: 为什么需要激

激活函数()(转)

神经网络之激活函数(Activation Function) 转载::http://blog.csdn.net/cyh_24 :http://blog.csdn.net/cyh_24/article/details/50593400 日常 coding 中,我们会很自然的使用一些激活函数,比如:sigmoid.ReLU等等.不过好像忘了问自己一(n)件事: 为什么需要激活函数? 激活函数都有哪些?都长什么样?有哪些优缺点? 怎么选用激活函数? 本文正是基于这些问题展开的,欢迎批评指正! (此图并

干货 | 深入理解深度学习中的激活函数

理解深度学习中的激活函数 在这个文章中,我们将会了解几种不同的激活函数,同时也会了解到哪个激活函数优于其他的激活函数,以及各个激活函数的优缺点. 1. 什么是激活函数? 生物神经网络是人工神经网络的起源.然而,人工神经网络(ANNs)的工作机制与大脑的工作机制并不是十分的相似.不过在我们了解为什么把激活函数应用在人工神经网络中之前,了解一下激活函数与生物神经网络的关联依然是十分有用的. 一个典型神经元的物理结构由细胞体.向其他神经元发送信息的轴突以及从其他神经元接受信号或信息的树突组成. ? 图