【CV】深度学习中常用的激活函数

您所在的位置:网站首页 常用的激活函数图像有 【CV】深度学习中常用的激活函数

【CV】深度学习中常用的激活函数

2024-06-03 05:39| 来源: 网络整理| 查看: 265

1.什么是激活函数?

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

2.为什么要用激活函数?

如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。 如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

3.常用激活函数有哪些? 3.1 线性激活函数

线性激活函数:这是一种简单的线性函数,公式为:f(x) = x。基本上,输入到输出过程中不经过修改。 在这里插入图片描述

3.2 非线性激活函数

非线性激活函数:用于分离非线性可分的数据,是最常用的激活函数。非线性方程控制输入到输出的映射。非线性激活函数有 Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等。下文中将详细介绍这些激活函数。

(1)sigmoid激活函数 Sigmoid又叫作 Logistic 激活函数,它将实数值压缩进 0 到 1 的区间内,还可以在预测概率的输出层中使用。该函数将大的负数转换成 0,将大的正数转换成 1。数学公式为: 在这里插入图片描述 下图展示了 Sigmoid 函数及其导数的图像: 在这里插入图片描述 一般来讲,在训练神经网络的过程中,对于求导、连续求导、处理二分类问题,一般使用Sigmoid激活函数,因为Sigmoid函数可以把实数域光滑的映射到[0,1]空间。函数值恰好可以解释为属于正类的概率(概率的取值范围是0~1)。 另外,Sigmoid函数单调递增,连续可导,导数形式非常简单。但是对于多分类问题,Sigmoid函数就显得心有余而力不足了。 此外,sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。

优点: (1)Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。 (2)求导容易。 缺点: (1)由于其软饱和性,容易产生梯度消失,导致训练出现问题。 (2)其输出并不是以0为中心的。

(2)tanh激活函数 tanh也是一种非常常见的激活函数。它实际上是sigmoid函数的一种变形。tanh函数由下列公式定义: 在这里插入图片描述 导数: 在这里插入图片描述 在这里插入图片描述 Tanh 激活函数又叫作双曲正切激活函数(hyperbolic tangent activation function)。它解决了Sigmoid函数的不是zero-centered输出问题。与 Sigmoid 函数类似,Tanh 函数也使用真值,但 Tanh 函数将其压缩至-1 到 1 的区间内。与 Sigmoid 不同,Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间。你可以将 Tanh 函数想象成两个 Sigmoid 函数放在一起。在实践中,Tanh 函数的使用优先性高于 Sigmoid 函数。负数输入被当作负值,零输入值的映射接近零,正数输入被当作正值。唯一的缺点是:

Tanh 函数也会有梯度消失**的问题,因此在饱和时也会「杀死」梯度。

为了解决梯度消失问题,我们来讨论另一个非线性激活函数——修正线性单元(rectified linear unit,ReLU),该函数明显优于前面两个函数,是现在使用最广泛的函数。

(3)ReLU激活函数 数学公式: 在这里插入图片描述 函数图像及其导数图像: 在这里插入图片描述 在这里插入图片描述 当输入 x 0 时,输出为 x。该激活函数使网络更快速地收敛。它不会饱和,即它可以对抗梯度消失问题,至少在正区域(x> 0 时)可以这样,因此神经元至少在一半区域中不会把所有零进行反向传播。由于使用了简单的阈值化(thresholding),ReLU 计算效率很高。但是 ReLU 神经元也存在一些缺点:

不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心。前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式。

为了解决 ReLU 激活函数中的梯度消失问题,当 x < 0 时,我们使用 Leaky ReLU——该函数试图修复 dead ReLU 问题。下面我们就来详细了解 Leaky ReLU。

(4)Leaky ReLU激活函数 数学公式: 在这里插入图片描述 函数图像: 在这里插入图片描述 Leaky ReLU 的概念是:当 x < 0 时,它得到 0.1 的正梯度。该函数一定程度上缓解了 dead ReLU 问题,但是使用该函数的结果并不连贯。尽管它具备 ReLU 激活函数的所有特征,如计算高效、快速收敛、在正区域内不会饱和。

Leaky ReLU 可以得到更多扩展。不让 x 乘常数项,而是让 x 乘超参数,这看起来比 Leaky ReLU 效果要好。该扩展就是 Parametric ReLU。

(5)Parametric ReLU激活函数

在这里插入图片描述 其中α是超参数。这里引入了一个随机的超参数,它可以被学习,因为你可以对它进行反向传播。这使神经元能够选择负区域最好的梯度,有了这种能力,它们可以变成 ReLU 或 Leaky ReLU。

总之,最好使用 ReLU,但是你可以使用 Leaky ReLU 或 Parametric ReLU 实验一下,看看它们是否更适合你的问题。

(6)Swish激活函数 该函数又叫作自门控激活函数,由谷歌的研究者发布,数学公式为: 在这里插入图片描述 函数图像: 在这里插入图片描述 根据上图,我们可以观察到在 x 轴的负区域曲线的形状与 ReLU 激活函数不同,因此,Swish 激活函数的输出可能下降,即使在输入值增大的情况下。大多数激活函数是单调的,即输入值增大的情况下,输出值不可能下降。而 Swish 函数为 0 时具备单侧有界(one-sided boundedness)的特性,它是平滑、非单调的。

(7)ELU激活函数 ELU 的函数及其导数如下: 在这里插入图片描述 (8)SELU激活函数 在这里插入图片描述 在这里插入图片描述

4.如何选择激活函数?

选择的时候,就是根据各个函数的优缺点来配置,例如: 如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU。 实际上,主要根据经验来选择激活函数。。。。

还有很多很多的激活函数待学习。。。。。

微信公众号上,有很多文章进行了介绍。 参考:

https://mp.weixin.qq.com/s/sZ5SIXt8UQ9BDNxPAu4xYA

https://mp.weixin.qq.com/s/kmrz5TaaD_JnufbN7QkpwA

https://mp.weixin.qq.com/s/pSHKrtLTSE3lv51hyX5BDA



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3