sigmoid

时间:2024-06-04 14:44:15编辑:笔记君

sigmoid函数优缺点?求告知?

函数:函数图像:优点:从图片上(1)可以看到sigmoid函数处处连续 ->便于求导;(2)可以将函数值的范围压缩到[0,1]->可以压缩数据,且幅度不变。(3)便于前向传输缺点:(1)在趋向无穷的地方,函数值变化很小,容易缺失梯度,不利于深层神经网络的反馈传输(2)幂函数还是比较难算的(3)函数均值不为0,当输出大于0时,则梯度方向将大于0,也就是说接下来的反向运算中将会持续正向更新;同理,当输出小于0时,接下来的方向运算将持续负向更新。

证明sigmoid函数的导数为sigmoid(1-sigmoid)

对于第j个输出神经元,其输入B可以表示为:Bj = Σi=1..n (W2i * Xi) + Whj * hj-1其中,W2i表示第i个输入神经元与第j个输出神经元之间的权重,Xi表示第i个输入神经元的输入值,Whj表示第j个输出神经元与上一时刻第h-1个隐层神经元之间的权重,hj-1表示上一时刻第h-1个隐层神经元的输出值。对于第h个隐层神经元,其输入值Fh可以表示为:Fh = Σi=1..n (Ui * Xi) + Uih * h-1其中,Ui表示第i个输入神经元与第h个隐层神经元之间的权重,Uih表示第h个隐层神经元与自身上一时刻的输出值之间的权重,Xi表示第i个输入神经元的输入值,h-1表示自身上一时刻的输出值。最后,可以通过Sigmoid或其他激活函数将Bj和Fh转换成输出值v和隐层神经元的输出值h:vij = sigmoid(Bj)hij = sigmoid(Fh)【摘要】证明sigmoid函数的导数为sigmoid(1-sigmoid)【提问】【回答】因此,我们证明了sigmoid函数的导数为sigmoid(1-sigmoid)。【回答】【提问】推导出vih的公式【提问】对于第j个输出神经元,其输入B可以表示为:Bj = Σi=1..n (W2i * Xi) + Whj * hj-1其中,W2i表示第i个输入神经元与第j个输出神经元之间的权重,Xi表示第i个输入神经元的输入值,Whj表示第j个输出神经元与上一时刻第h-1个隐层神经元之间的权重,hj-1表示上一时刻第h-1个隐层神经元的输出值。对于第h个隐层神经元,其输入值Fh可以表示为:Fh = Σi=1..n (Ui * Xi) + Uih * h-1其中,Ui表示第i个输入神经元与第h个隐层神经元之间的权重,Uih表示第h个隐层神经元与自身上一时刻的输出值之间的权重,Xi表示第i个输入神经元的输入值,h-1表示自身上一时刻的输出值。最后,可以通过Sigmoid或其他激活函数将Bj和Fh转换成输出值v和隐层神经元的输出值h:vij = sigmoid(Bj)hij = sigmoid(Fh)【回答】

激活函数总结

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

原文链接: https://blog.csdn.net/weixin_44791964/article/details/117338865


激活函数思考

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



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

神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。 假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。 加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。

激活函数通常有如下一些性质:

(1)非线性: 如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。 当激活函数是非线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。但是,如果激活函数是恒等激活函数的时候(即),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。

(2)可微性: 当优化方法是基于梯度的时候,这个性质是必须的。

(3)单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。?当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。

(4)输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate。



2. 激活函数如何选择?

从定义来看,几乎所有的连续可导函数都可以用作激活函数。但目前 常见的多是分段线性和具有指数形状的非线性函数 。

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

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

最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout。

一般来说,在分类问题上建议首先尝试 ReLU,其次ELU,这是两类不引入额外参数的激活函数。

然后可考虑使用具备学习能力的PReLU和MPELU,并 使用正则化技术 ,例如应该考虑在网络中增加Batch Normalization层。

通常来说,很少会把各种激活函数串起来在一个网络中使用的。




3. 为什么引入非线性激励函数?

激活函数通常分为 线性激活函数 和 非线性激活函数 。一般情况下,如果神经网络中使用的是线性激活函数,那么每一层就相当于是上一层的线性组合,其输入和输出均是线性的,类似于感知机模型,则hidden layers没有存在的意义了,同时这种线性函数对于 复杂的非线性问题拟合欠佳 。当我们使用非线性激活函数时,模型可以拟合任意函数的输出,表现空间更大、使用该范围广、且效果更优。下图为单层的感知机,是常用的神经网络组合单元,用它可以画出一条线,把平面分开。

很容易联想到多个感知机组和,获得更强的分类能力,效果如下所示:

但是感知机的输出是线性的,如下所示。当然可以用无限条线性的线拟合曲线,然而复杂度较高。

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与只有一个隐藏层效果相当,这种情况就是多层感知机(MLP)了。

正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。

当拓展到多层的情况时,就会变成一个复杂的函数,可以轻松拟合非线性的复杂场景。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。

比较线性激活和非线性激活下的平滑分类平面,两者分别如下。




非线性激活函数可以拟合出曲线的边界。图像的非线性特点,可以理解为在一些应用中,其分布为非线性的,无法通过直线来完整的分离开。




4. 为什么引入ReLU呢?

第一,采用sigmoid等函数,反向传播求误差梯度时,求导计算量很大,而Relu求导非常容易,使得训练时间短。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0),从而无法完成深层网络的训练。

第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。

参考:

[1] 神经网络之激活函数 https://www.csuldw.com/2019/05/26/2019-05-26-activation-function/

[2] 激活函数的解释 https://www.zhihu.com/question/22334626


logistic是什么函数

Logistic函数(又称sigmoid函数)
Logistic函数或Logistic曲线是一种常见的S形函数,它是皮埃尔·弗朗索瓦·韦吕勒在1844或1845年在研究它与人口增长的关系时命名的。广义Logistic曲线可以模仿一些情况人口增长(P)的S形曲线。起初阶段大致是指数增长;然后随着开始变得饱和,增加变慢;最后,达到成熟时增加停止。


sigmoid有什么作用

什么是sigmoid?其作用是什么?很简单。这是一个科学家发明的数学工具。我们在做决策的时候通常非此即彼。在计算机中通常用零或一来替代两种可能性。为了勾画决策的不确定性。可以使用0到1之间的一个实数来表示我们决策的结果。这样当我们的决策结果是0.6的时候。代表我们更倾向于选择1更不倾向于选择0。

然而现实中我们所观察到的特征,通常不是0到1之间的实数。我们要做决策,就必须将这个实数压缩到0到1之间。

假设我们有若干客户的消费记录。想判断哪些客户是高收入人群,哪些客户是低收入人群。

一个比较简单的方法就是计算每个客户的平均消费金额。当平均消费金额大于一个特定的阈值a时,则为高收入人群,小于则为低收入人群。

这显然是一个非此即彼判断。没有表现出决策的不确定性。

为了引入决策的不确定性,我们必须给每一种平均消费金额给予一个打分。这个打分在0到1之间。也可以理解为是决策的概率。

我们完全可以把平均消费金额作为sigmoid函数的输入,从而将任意金额映射到0到1之间。

这个sigmoid函数有两个参数来控制着决策不确定性的映射。第一个参数的取值决定了sigmoid函数将怎样的平均消费金额映射为0.5,即完全不确定。该参数的取值类似于上文提到的阈值a。

另外一个参数和sigmoid函数的性质有关。sigmoid函数有如下性质当平均消费金额远大于a时函数的输出结果无限逼近于一。当平均消费金额远小于a时函数的输出结果无限逼近于零。

则另外一个参数实际上控制着这个逼近速度。当这个逼近速度无限大的时候,就等同于上面简单的方案。而这当这个逼近速度比较慢的时候,其会以较细的粒度描述决策的不确定性。即针对各种平均消费金额其都不会草率的将其无限逼近于零或者一。而是给定一个0到1之间的合适的实数值。

这就是sigmoid函数全部的作用了。


谁能解释下sigmoid 函数

Sigmoid函数是一个在生物学中常见的S型的函数,也称为S形生长曲线。

sigmoid函数是一个良好的阈值函数,连续,光滑,严格单调

Sigmoid函数,即f(x)=1/(1+e-x).神经元的非线性作用函数.
人工神经网络的学习算法-BP算法
神经网络的学习是基于一组样本进行的,它包括输入和输出(这里用期望输出表示),输入和输出有多少个分量就有多少个输入和输出神经元与之对应.最初神经网络的权值(Weight)和阈值(Threshold)是任意给定的,学习就是逐渐调整权值和阈值使得网络的实际输出和期望输出一致.

参考:http://baike.baidu.com/link?url=oYPhHLI6s4IQt5qhjdkpkz6ViGC3K2RiSnkWsWbIPutDwshEnhevTumvDrB3l94QYE41kWnQw50NMl84s5dkSa
http://blog.163.com/liyanhua_08/blog/static/1172002772009927111741738/
http://www.zybang.com/question/aaf6e5698b4deadeba00dd36ba8ffaf5.html


激活函数的作用是什么

激活函数是为了解决对隐藏变量使用按元素运算的非线性函数进行变换,然后再作为下一个全连接层的输入。单层感知机只能表示线性空间,不能线性划分。激活函数是连接感知机和神经网络的桥梁。神经网络的正向传播中进行的矩阵的乘积运算在几何学领域被称为“仿射变换”。因此,这里将进行仿射变换的处理实现为“Affine层”。几何中,仿射变换包括一次线性变换和一次平移,分别对应神经网络的加权和运算与加偏置运算。激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。如图1,在神经元中,输入的inputs通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性,没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

激活函数

参考 : https://blog.csdn.net/qq_30815237/article/details/86700680 非线性激活函数能够使神经网络逼近任意复杂的函数。如果没有激活函数引入的非线性,多层神经网络就相当于单层的神经网络 sigmoid 1、梯度消失:sigmoid函数在0和1附近是平坦的。也就是说,sigmoid的梯度在0和1附近为0。在通过sigmoid函数网络反向传播时,当神经元的输出近似于0和1时它的梯度接近于0。这些神经元被称为饱和神经元。因此,这些神经元的权值无法更新。不仅如此,与这些神经元相连接的神经元的权值也更新得非常缓慢。这个问题也被称为梯度消失。所以,想象如果有一个大型网络包含有许多处于饱和动态的sigmoid激活函数的神经元,那么网络将会无法进行反向传播。 2、不是零均值:sigmoid的输出不是零均值的。 3、计算量太大:指数函数与其它非线性激活函数相比计算量太大了。下一个要讨论的是解决了sigmoid中零均值问题的非线性激活函数。 Sigmoid 和 Softmax 区别: 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 可以用于多分类问题多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。 tanh Tanh唯一的缺点是:tanh函数也存在着梯度消失的问题,因此在饱和时会导致梯度消失。为了解决梯度消失问题,让我们讨论另一个被称为线性整流函数(ReLU)的非线性激活函数,它比我们之前讨论的两个激活函数都更好,并且也是在今天应用最为广泛的激活函数。 ReLU 用形式化的语言来说,所谓****非线性 ,就是一阶导数不为常数 。 ReLu 的定义是max(0, x),因此, ReLU 的导数为: 显然, ReLU 的导数不是常数,所以 ReLU 是 非线性 的。Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。 1、ReLu虽然在大于0的区间是线性的,在小于等于0的部分也是线性的, 但是它整体不是线性的,因为不是一条直线,所以Relu函数是非线性函数 。也就是说,线性和 非线性 都是就 函数 的整体而言的。用术语来说, 线性、 非线性 是就 函数 的整个定义域而言的。 这就意味着无论我们堆多少层网络,如果这些层都使用线性激活 函数 ,那这些层最终等效于一层!那这样的模型的表达能力就很 有 限了。多个线性操作的组合也是一个线性操作,没有非线性激活,就相当于只有一个超平面去划分空间。 ReLu是非线性的,效果类似于划分和折叠空间,组合多个(线性操作 + ReLu)就可以任意的划分空间 。 2、对于浅层的机器学习,比如经典的三层神经网络,用它作为激活函数的话,那表现出来的性质肯定是线性的。但是在深度学习里,少则几十,多则上千的隐藏层,虽然,单独的隐藏层是线性的,但是很多的隐藏层表现出来的就是非线性的。举个简单的例子,一条曲线无限分段,每段就趋向直线,反过来,很多这样的直线就可以拟合曲线。类似,大规模的神经网络,包含很多这样的线性基本组件,自然也可以拟合复杂的非线性情况。Relu通过构造很多的线形空间(类似于折叠的方式),逼近非线性方程。 但是Relu神经元有几个缺点: 平时使用的时候RELU的缺点并不是特别明显,只有在学习率设置不恰当(较大)的时候,会加快神经网络中神经元的“死亡”。 为了解决relu激活函数在x<0时的梯度消失问题, 提出了Leaky Relu leaky ReLU pReLU PRelu的函数为: 其中α为超参数。PRelu的思想是引进任意超参数α ,而 这个α可以通过反向传播学习(注意 PRelu 与leaky relu的区别,前者是学习得到,后者是我们认为设定) 。这赋予了神经元在负区域内选择最好斜率的能力,因此,他们可以变成单纯的ReLU激活函数或者Leaky ReLU激活函数。如果α=0,那么 PReLU 退化为ReLU;如果α是一个很小的固定值(如α =0.01),则 PReLU 退化为 Leaky ReLU(LReLU)。 (1) PReLU只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。特别的, 当不同channels使用相同的ai时,参数就更少了。 (2) BP更新ai时,采用的是带动量的更新方式: 总之, 一般使用ReLU效果更好 ,但是你可以通过实验使用Leaky ReLU或者Parametric ReLU来观察它们是否能对你的问题给出最好的结果。 ELU SELU 经过该激活函数后使得样本分布自动归一化到0均值和单位方差(自归一化,保证训练过程中梯度不会爆炸或消失,效果比Batch Normalization 要好) 其实就是ELU乘了个lambda,关键在于这个lambda是大于1的。以前relu,prelu,elu这些激活函数,都是在负半轴坡度平缓,这样在activation的方差过大的时候可以让它减小,防止了梯度爆炸,但是正半轴坡度简单的设成了1。而selu的正半轴大于1,在方差过小的的时候可以让它增大,同时防止了梯度消失。这样激活函数就有一个不动点,网络深了以后每一层的输出都是均值为0方差为1。 swish

上一篇:property_get

下一篇:yanqing