当前位置: 首页> 体育健身> 体育> 正文

relu函数取值范围(relu函数含义)

  • 灬蓝色调灬灬蓝色调灬
  • 体育
  • 2023-03-20 05:03:01
  • -
理解神经网络 从神经元到RNN CNN 深度学习

Relu激励函数

因为Sigmod函数的梯度有可能会下降很慢。甚至梯度消失。在分类的时候很多都使用这个Relu激励函数,尤其是深度学习中。

线性整流函数(Rectified Linear Unit, ReLU),Relu激励函数,也称“热鲁”激励函数。是一种人工神经网络中常见的激活函数。相比于Sigmoid函数,

Relu函数的优点:

梯度不饱和。梯度计算公式为:1{x0}。因此在反向传播过程中,减轻了梯度弥散的问题,神经网络前几层的参数也可以很快的更新。

计算速度快。正向传播过程中,sigmoid和tanh函数计算激活值时需要计算指数,而Relu函数仅需要设置阈值。如果x0,f(x)=0,如果x0,f(x)=x。加快了正向传播的计算速度。

f(x)=max(o,x)

在神经元中输出为:

是不是很简单。

[激活函数]什么是 ReLU

参考资料: 算法基础---ReLU激活函数及其变种

1、什么是 ReLU

ReLU 是修正线性单元(rectified linear unit),在 0 和 x 之间取最大值。

2、为什么要引入 ReLU

因为 sigmoid 和 tanh 容易导致梯度消失,而 ReLU 是非饱和激活函数,不容易发生梯度消失

3、ReLU 的函数表达式和导数表达式

ReLU 的函数表达式:

当 x = 0 时,ReLU = 0

当 x 0 时,ReLU = x

ReLU 的导数表达式:

当 x= 0 时,导数为 0

当 x 0 时,导数为 1

4、ReLU 的函数图像和导数图像

ReLU 的函数图像:

ReLU 的导数图像:

5、ReLU 的优点

① 有效缓解过拟合的问题,因为 ReLU 有可能使部分神经节点的输出变为 0,从而导致神经节点死亡,降低了神经网络的复杂度

②  不会发生梯度消失或梯度爆炸,当 x 大于 0 时,ReLU 的梯度恒为 1,不会随着网路深度的加深而使得梯度在累乘的时候变得越来越小或者越来越大,从而不会发生梯度消失或梯度爆炸

③ 计算简单,ReLU 本质上就是计算一次在两个值中取最大值

6、ReLU 的缺点

① 会导致神经元死亡,当一个神经元在某次的激活值为 0 之后,此后得到的激活值都是 0.

证明:

因为假设某个神经元在第 N 次时的激活值为 0,则第 N+1 次的激活值为: ,其中   取值大于 0,   是 ReLU 在 x 点的梯度。当 x = 0 时,  的值为 0,则  也为 0;当 x 0 时,  的梯度为 1,则   为 0 和   中的最大值 0.即无论 x 取什么值,  的值都等于 0.

解决方法:

① 对于ReLU 会导致神经节点死亡的原因有:

a.参数初始化时初始化到的参数值恰好能使神经节点死亡,不过这种情况非常罕见

b.学习率太高,导致在参数更新时,导致参数小于等于 0

改进方法有:

针对原因 a,采用 Xavier 初始化方法( 深度学习——Xavier初始化方法 )

针对原因 b,可以设置小一点的学习率或者是使用会自动调整学习率的优化方法,例如 Adagrad

② 输出不是零均值化(zero-centered),会导致模型收敛较慢(解释: 谈谈激活函数以零为中心的问题 )

7、ReLU 的变种:

① Leaky ReLU

Leaky ReLU 的目的是为了解决 ReLU 的死亡神经节点的问题。Leaky ReLU 的表达式是:

ReLU = max( ),其中  通常取值为 0.01,即

当 x = 0 时,ReLU = 

当 x 0 时,ReLU = 

② PReLU,Parameter ReLU 是对 Leaky ReLU 的改进,对于   不再取定值,而是从样本中学习得到,具有收敛速度快,错误率低的优点。

③ RReLU,Randomized ReLU 是对 Leaky ReLU 的改进,对于   不再取定值,而是在指定范围内随机取一个值,而在预测阶段则是使用固定值。PReLU 在一定程度上具有正则效果

8、pytorch 的 ReLU 函数的作用和参数详解

torch.nn.ReLU(inplace=False) 

函数作用 :对输入进行修正线性函数 ReLU(x) = max(0, x)

参数详解

inplace:默认为 False,即不进行覆盖运算,默认为 True 的话,则会对输入进行覆盖运算,此时减少了申请和注销内存的操作,会提高运行效率

例子:

from torch import autograd

 m = nn.ReLU()

 input = autograd.Variable(torch.randn(2))

 print(input)

 print(m(input))

结果:

tensor([-0.3543, -0.7416])

tensor([0., 0.])

注:连续使用多次 ReLU 跟使用一次的 ReLU 的效果是一样的

DY ReLU ECCV2020 性价比极高的激活函数 Dynamic ReLU

激活函数总结

什么是激活函数

激活函数在神经网络当中的作用**是赋予神经网络更多的非线性因素。如果不用激活函数,网络的输出是输入的线性组合,这种情况与最原始的感知机相当,网络的逼近能力相当有限。如果能够引入恰当的非线性函数作为激活函数,这样神经网络逼近能力就能够更加强大。

激活函数(Activation functions)对于神经网络模型学习与理解复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。

如果网络中不使用激活函数,网络每一层的输出都是上层输入的线性组合,无论神经网络有多少层,输出都是输入的线性组合。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,此时神经网络就可以应用到各类非线性场景当中了。

常见的激活函数如sigmoid、tanh、relu等,它们的输入输出映射均为非线性,这样才可以给网络赋予非线性逼近能力。

下图为Relu激活函数,由于在0点存在非线性转折,该函数为非线性激活函数:

常用的激活函数

1、Sigmoid

Sigmoid函数是一个在生物学中常见的S型函数,它能够把输入的连续实值变换为0和1之间的输出,如果输入是特别小的负数,则输出为0,如果输入是特别大的正数,则输出为1。即将输入量映射到0到1之间。

Sigmoid可以作为非线性激活函数赋予网络非线性区分能力,也可以用来做二分类。其计算公式为:

曲线过渡平滑,处处可导;

缺点:

幂函数运算较慢,激活函数计算量大;

求取反向梯度时,Sigmoid的梯度在饱和区域非常平缓,很容易造称梯度消失的问题,减缓收敛速度。

2、Tanh

Tanh是一个奇函数,它能够把输入的连续实值变换为-1和1之间的输出,如果输入是特别小的负数,则输出为-1,如果输入是特别大的正数,则输出为1;解决了Sigmoid函数的不是0均值的问题。

曲线过渡平滑,处处可导;

具有良好的对称性,网络是0均值的。

缺点:

与Sigmoid类似,幂函数运算较慢,激活函数计算量大;

与Sigmoid类似,求取反向梯度时,Tanh的梯度在饱和区域非常平缓,很容易造称梯度消失的问题,减缓收敛速度。

3、ReLU

线性整流函数(Rectified Linear Unit, ReLU),是一种深度神经网络中常用的激活函数,整个函数可以分为两部分,在小于0的部分,激活函数的输出为0;在大于0的部分,激活函数的输出为输入。计算公式为:

收敛速度快,不存在饱和区间,在大于0的部分梯度固定为1,有效解决了Sigmoid中存在的梯度消失的问题;

计算速度快,ReLU只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的指数运算,具有类生物性质。

缺点:

它在训练时可能会“死掉”。如果一个非常大的梯度经过一个ReLU神经元,更新过参数之后,这个神经元的的值都小于0,此时ReLU再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0。合理设置学习率,会降低这种情况的发生概率。

先进的激活函数

1、LeakyReLU

LeakyReLU具有ReLU的优点;

解决了ReLU函数存在的问题,防止死亡神经元的出现。

缺点:

α参数人工选择,具体的的值仍然需要讨论。

2、PReLU

PReLU具有LeakyReLU的优点;

解决了LeakyReLU函数存在的问题,让神经网络自适应选择参数。

3、ReLU6

ReLU6就是普通的ReLU但是限制最大输出为6,用在MobilenetV1网络当中。目的是为了适应float16/int8 的低精度需要

优点:

ReLU6具有ReLU函数的优点;

该激活函数可以在移动端设备使用float16/int8低精度的时候也能良好工作。如果对 ReLU 的激活范围不加限制,激活值非常大,则低精度的float16/int8无法很好地精确描述如此大范围的数值,带来精度损失。

缺点:

与ReLU缺点类似。

4、Swish

Swish是Sigmoid和ReLU的改进版,类似于ReLU和Sigmoid的结合,β是个常数或可训练的参数。Swish 具备无上界有下界、平滑、非单调的特性。Swish 在深层模型上的效果优于 ReLU。

优点:

Swish具有一定ReLU函数的优点;

Swish具有一定Sigmoid函数的优点;

Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数。

缺点:

运算复杂,速度较慢。

5、Mish

Mish与Swish激活函数类似,Mish具备无上界有下界、平滑、非单调的特性。Mish在深层模型上的效果优于 ReLU。无上边界可以避免由于激活值过大而导致的函数饱和。

优点:

Mish具有一定ReLU函数的优点,收敛快速;

Mish具有一定Sigmoid函数的优点,函数平滑;

Mish函数可以看做是介于线性函数与ReLU函数之间的平滑函数。

缺点:

运算复杂,速度较慢。

5、Swish和Mish的梯度对比。

原文链接:

激活函数 sigmoid、tanh、relu

连续的:当输入值发生较小的改变时,输出值也发生较小的改变;

可导的:在定义域中,每一处都是存在导数;

激活函数

常见的激活函数:sigmoid,tanh,relu。

sigmoid

sigmoid是平滑(smoothened)的阶梯函数(step function),可导(differentiable)。sigmoid可以将任何值转换为0~1概率,用于二分类。细节可以 参考 。

公式:

导数:

导数2:

图(红色原函数,蓝色导函数):

sigmoid

当使用sigmoid作为激活函数时,随着神经网络隐含层(hidden layer)层数的增加,训练误差反而加大。表现为:

靠近输出层的隐含层梯度较大,参数更新速度快,很快就会收敛;

靠近输入层的隐含层梯度较小,参数更新速度慢,几乎和初始状态一样,随机分布;

在含有四个隐藏层的网络结构中,第一层比第四层慢了接近100倍!

这种现象就是梯度弥散(vanishing gradient)。而另一种情况,梯度爆炸(exploding gradient),则是前面层的梯度,通过训练变大,导致后面层的梯度,以指数级增大。

sigmoid的更新速率

由于sigmoid的导数值小于1/4,x变化的速率要快于y变化的速率,随着层数的增加,连续不断执行sigmoid函数,就会导致,前面更新较大的幅度,后面更新较小的幅度,因此,网络在学习过程中,更倾向于,更新后面(靠近输出层)的参数,而不是前面的参数(靠近输入层)。

sigmoid的导函数

sigmoid缺点:

激活函数的计算量较大,在反向传播中,当求误差梯度时,求导涉及除法;

在反向传播中,容易就会出现梯度消失,无法完成深层网络的训练;

函数的敏感区间较短,(-1,1)之间较为敏感,超过区间,则处于饱和状态,

参考1 、 参考2

tanh

tanh,即双曲正切(hyperbolic tangent),类似于幅度增大sigmoid,将输入值转换为-1至1之间。tanh的导数取值范围在0至1之间,优于sigmoid的0至1/4,在一定程度上,减轻了梯度消失的问题。tanh的输出和输入能够保持非线性单调上升和下降关系,符合BP(back propagation)网络的梯度求解,容错性好,有界。

公式:

导数:

图(红色原函数,蓝色导函数):

tanh

sigmoid和tanh:

sigmoid在输入处于[-1,1]之间时,函数值变化敏感,一旦接近或者超出区间就失去敏感性,处于饱和状态,影响神经网络预测的精度值;

tanh的变化敏感区间较宽,导数值渐进于0、1,符合人脑神经饱和的规律,比sigmoid函数延迟了饱和期;

tanh在原点附近与y=x函数形式相近,当激活值较低时,可以直接进行矩阵运算,训练相对容易;

tanh和sigmoid都是全部激活(fire),使得神经网络较重(heavy)。

参考1 、 参考2 、 参考3

relu

relu,即Rectified Linear Unit,整流线性单元,激活部分神经元,增加稀疏性,当x小于0时,输出值为0,当x大于0时,输出值为x.

公式:

图:

relu

导数:

图:

ReLU的导函数

relu对比于sigmoid:

sigmoid的导数,只有在0附近,具有较好的激活性,而在正负饱和区的梯度都接近于0,会造成梯度弥散;而relu的导数,在大于0时,梯度为常数,不会导致梯度弥散。

relu函数在负半区的导数为0 ,当神经元激活值进入负半区,梯度就会为0,也就是说,这个神经元不会被训练,即稀疏性;

relu函数的导数计算更快,程序实现就是一个if-else语句;而sigmoid函数要进行浮点四则运算,涉及到除法;

relu的缺点:

在训练的时候,ReLU单元比较脆弱并且可能“死掉”。举例来说,当一个很大的梯度,流过ReLU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此所以流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,因为这导致了数据多样化的丢失。

如果学习率设置得太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。

在神经网络中,隐含层的激活函数,最好选择ReLU。

关于RNN中为什么选择tanh,而不是relu, 参考 。

常用激活函数比较

本文结构:

如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。

如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

公式:

曲线:

也叫 Logistic 函数,用于隐层神经元输出

取值范围为(0,1)

它可以将一个实数映射到(0,1)的区间,可以用来做二分类。

在特征相差比较复杂或是相差不是特别大时效果比较好。

sigmoid缺点:

激活函数计算量大,反向传播求误差梯度时,求导涉及除法

反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练

下面解释为何会出现梯度消失:

反向传播算法中,要对激活函数求导,sigmoid 的导数表达式为:

sigmoid 原函数及导数图形如下:

由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象

公式

曲线

也称为双切正切函数

取值范围为[-1,1]。

tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。

与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好

Rectified Linear Unit(ReLU) - 用于隐层神经元输出

公式

曲线

输入信号 0 时,输出都是0,0 的情况下,输出等于输入

ReLU 的优点:

Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多

ReLU 的缺点:

训练的时候很”脆弱”,很容易就”die”了

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

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

Softmax - 用于多分类神经网络输出

公式

举个例子来看公式的意思:

就是如果某一个 zj 大过其他 z, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。

为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。

第二个原因是需要一个可导的函数。

Sigmoid 和 ReLU 比较:

sigmoid 的梯度消失问题,ReLU 的导数就不存在这样的问题,它的导数表达式如下:

曲线如图

对比sigmoid类函数主要变化是:

1)单侧抑制

2)相对宽阔的兴奋边界

3)稀疏激活性。

Sigmoid 和 Softmax 区别:

softmax is a generalization of logistic function that “squashes”(maps) a K-dimensional vector z of arbitrary real values to a K-dimensional vector σ(z) of real values in the range (0, 1) that add up to 1.

sigmoid将一个real value映射到(0,1)的区间,用来做二分类。

而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。

二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题

softmax是sigmoid的扩展,因为,当类别数 k=2 时,softmax 回归退化为 logistic 回归。具体地说,当 k=2 时,softmax 回归的假设函数为:

利用softmax回归参数冗余的特点,从两个参数向量中都减去向量θ1 ,得到:

最后,用 θ′ 来表示 θ2−θ1,上述公式可以表示为 softmax 回归器预测其中一个类别的概率为

另一个类别概率的为

这与 logistic回归是一致的。

softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布

多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。

选择的时候,就是根据各个函数的优缺点来配置,例如:

如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout.

参考资料:

推荐阅读 历史技术博文链接汇总

也许可以找到你想要的

我是 不会停的蜗牛 Alice

85后全职主妇

喜欢人工智能,行动派

创造力,思考力,学习力提升修炼进行中

欢迎您的喜欢,关注和评论!

[img]神经网络之激活函数 Sigmoid, Tanh, ReLU, Leaky ReLU, Softmax