-
双曲正切函数和sigmoid函数 Python实现
2019-06-03 15:34:08import numpy as np import matplotlib.pyplot as plt from scipy import special x = np.linspace(-100, 100, 1000) y = np.tanh(x) #tanh函数 z = special.expit(x) #sigmoid函数 plt.figure plt.plot(x,...import numpy as np import matplotlib.pyplot as plt from scipy import special x = np.linspace(-100, 100, 1000) y = np.tanh(x) #tanh函数 z = special.expit(x) #sigmoid函数 plt.figure plt.plot(x, y, color = "red", linewidth = 2, label="tanh") plt.plot(x, z, color = "b", linewidth = 2, label="sigmoid") plt.xlabel("abscissa") plt.ylabel("ordinate") plt.legend(loc='upper left') plt.title("tanh&sigmoid Example") plt.show()
输出结果:
-
【深度学习基础-09】神经网络-机器学习深度学习中~Sigmoid函数详解
2019-01-10 16:23:08Sigmoid函数常常被用作神经网络中激活函数 双曲函数tanh(x) Logistic函数 拓展对比 Sigmoid函数常常被用作神经网络中激活函数 函数的基本性质: 定义域:(−∞,+∞)(−∞,+∞) 值域:(−1,1)(−1,1) ...目录
Sigmoid函数常常被用作神经网络中激活函数
函数的基本性质:
- 定义域:(−∞,+∞)(−∞,+∞)
- 值域:(−1,1)(−1,1)
- 函数在定义域内为连续和光滑函数
- 处处可导,导数为:f′(x)=f(x)(1−f(x))
比较常用的有双曲函数tanh(x),以及逻辑函数
双曲函数tanh(x)
tanh是双曲函数中的一个,tanh()为双曲正切。在数学中,双曲正切“tanh”是由基本双曲函数双曲正弦和双曲余弦推导而来。
函数:y=tanh x;定义域:R,值域:(-1,1)。y=tanh x是一个奇函数,其函数图像为过原点并且穿越Ⅰ、Ⅲ象限的严格单调递增曲线,其图像被限制在两水平渐近线y=1和y=-1之间。
双曲正切函数的导数公式:
如同点 (cost,sint) 定义一个圆,点 (cosh t,sinh t) 定义了右半直角双曲线x^2- y^2= 1。这基于了很容易验证的恒等式
参数 t 不是圆角而是双曲角,它表示在 x 轴和连接原点和双曲线上的点 (cosh t,sinh t) 的直线之间的面积的两倍。
函数 cosh x 是关于 y 轴对称的偶函数。函数 sinh x 是奇函数,就是说 -sinh x = sinh (-x) 且 sinh 0 = 0
Logistic函数
拓展对比
-
sigmoid函数_非线性激活函数( Activation Function)
2020-11-22 06:49:23摘要: 本文从激活函数的背景知识开始介绍,重点讲解了不同类型的非线性激活函数:Sigmoid、Tanh、ReLU、LReLU、ELU、GeLu,Softmax的原理和他们的优缺点。还在激活函数的选择上分享个人经验。目录:什么是激活函数...摘要:
本文从激活函数的背景知识开始介绍,重点讲解了不同类型的非线性激活函数:Sigmoid、Tanh、ReLU、LReLU、ELU、GeLu,Softmax的原理和他们的优缺点。还在激活函数的选择上分享个人经验。
目录:
- 什么是激活函数?
- 为什么要用激活函数?
- 有哪些激活函数?
- Sigmoid
- Tanh ---双曲正切
- ReLu ---修正线性单元
- Leaky ReLU ---渗漏型整流线性单元
- ELU ---指数线性单元
- GeLu ---高斯误差线性单元
- Softmax
- 优缺点对比
- 如何选择激活函数?
- 参考资料
1.什么是激活函数?
所谓激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到网络中。如图1,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
激活函数在神经元中的作用 2. 为什么要用激活函数?
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
3. 有哪些激活函数?
3.1 Sigmoid激活函数
Sigmoid又叫作 Logistic 激活函数,它将实数值压缩进 0 到 1 的区间内,还可以在预测概率的输出层中使用。该函数将大的负数转换为趋近于 0,将大的正数转换为趋近于 1。
Sigmoid激活函数 函数式:
导数式:
值域:(0,1)优点:
Sigmoid函数的优点在于它可导,并且值域在0到1之间,使得神经元的输出标准化。
缺点:
(1)梯度消失:Sigmoid 函数值在趋近 0 和 1 的时候函数值会变得平坦,梯度趋近于 0。
(2)不以零为中心:sigmoid函数的输出恒为正值,不是以零为中心的,这会导致权值更新时只能朝一个方向更新,从而影响收敛速度。
(3)计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂。
(4)梯度爆炸:x值在趋近0的左右两边时,会造成梯度爆炸情况。
代码实现:
import numpy as np def sigmoid(x): s = 1 / (1 + np.exp(-x)) return s # Tensorflow2.0版 sigmoid_fc = tf.keras.activations.sigmoid(x) # pytorch版 sigmoid_fc = torch.nn.Sigmoid() output = sigmoid_fc(x)
3.2 Tanh激活函数
Tanh 激活函数又叫作双曲正切激活函数。与 Sigmoid 函数类似,但Tanh函数将其压缩至-1 到 1 的区间内。
Tanh激活函数 函数式:
导数式:
值域:(-1,1)优点:输出值以 0 为中心,解决了sigmoid函数输出值只为正,梯度只向一个方向更新的问题。
缺点:依然存在sigmoid中梯度消失和爆炸的问题和指数运算计算量大的问题。
代码实现:
import numpy as np def tanh(x): s1 = np.exp(x) - np.exp(-x) s2 = np.exp(x) + np.exp(-x) s = s1 / s2 return s # Tensorflow2.0版 tanh_fc = tf.keras.activations.tanh(x) # pytorch版 tanh_fc = torch.nn.Tanh() output = tanh_fc(x)
3.3 ReLu激活函数
ReLU又叫“修正线性单元”,或者“线性整流函数”。
ReLu激活函数 函数式:
导数式:
值域:[0,+∞)ReLU激活函数的导函数如下图所示:
ReLU激活函数的导函数 从图中可以看出,x>=0时梯度为1,而在x<0的情况,梯度为0
优点:
(1)收敛速度快,并且在正值区域(x> 0 )可以对抗梯度消失问题。
(2)相比于 sigmoid,由于稀疏性,时间和空间复杂度更低;不涉及成本更高的指数运算。
缺点:
(1)不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心,因此只存在正向梯度。
(2)负值区域(x< 0 )存在梯度消失问题。如果 x < 0,则神经元保持非激活状态,且在反向传播过程中「杀死」梯度。这样权重无法得到更新,网络无法学习。
代码实现:
import numpy as np def relu(x): s = np.where(x < 0, 0, x) return s # Tensorflow2.0版 relu_fc = tf.keras.activations.relu(x) # pytorch版 relu_fc = torch.nn.Relu() output = relu_fc(x)
3.4 Leaky ReLU激活函数
渗漏型整流线性单元(Leaky ReLU)函数是ReLU函数的特殊化,当x<0时,其函数值不再等于0,而是有一个小小的坡度缓慢降低。这种激活函数要选取一个 α 值;常见的取值是在 0.01 到 0.1 之间。
Leaky ReLU激活函数 函数式:
导数式:
值域:(-∞,+∞)Leaky ReLU函数激活函数的导函数图像如下图:
Leaky ReLU函数激活函数的导函数 从上图中也能明显地看出来,输入 x 大于或小于 0,微分的 Leaky ReLU 各为一个常量,避免了梯度消失问题。
优点:
(1)解决了ReLu激活函数中负值区域(x< 0 )的梯度消失问题。
缺点:
(1)神经网络不学习 α 值
代码实现:
import numpy as np def lrelu(x): s = np.where(x >= 0, x, αx) return s # Tensorflow2.0版 lrelu_fc = tf.keras.activations.relu(x,alpha=0.01) # 需要指定alpha的大小 # pytorch版 lrelu_fc = torch.nn.LeakyReLU(0.01) output = lrelu_fc(x)
3.5 ELU激活函数
指数线性单元(ELU)激活函数解决了 ReLU 的一些问题,同时也保留了一些好的方面。这种激活函数要选取一个 α 值;常见的取值是在 0.1 到 0.3 之间。
指数线性单元(ELU)激活函数 函数式:
导数式:
值域:(-∞,+∞)ELU激活函数的导函数图像如下图:
ELU激活函数的导函数 优点:
(1)能避免ReLu负值区域(x<0)梯度消失问题
(2)能得到负值输出,这能帮助网络向正确的方向推动权重和偏置变化
缺点:
(1)由于包含指数运算,所以计算时间更长
(4)神经网络不学习 α 值
代码实现:
import numpy as np def elu(x): s = np.where(x >= 0, x, α(np.exp(x)-1) return s # Tensorflow2.0版 elu_fc = tf.keras.activations.elu(x,alpha=0.1) # 需要指定alpha的大小 # pytorch版 elu_fc = torch.nn.ELU(0.1) output = elu_fc(x)
3.6 GELU激活函数
高斯误差线性单元(GELU)激活函数在最近的 Transformer 模型(谷歌的 BERT 和 OpenAI 的 GPT-2)中得到了应用广泛。
GELU激活函数 可以看出,当 x 大于 0 时,输出为 x;但 x=0 到 x=1 的区间除外,这时曲线更偏向于 y 轴。
函数式:
GELU激活函数公式 导数式:
GELU激活函数导函数公式 GELU激活函数导函数图像 优点:
(1)似乎是 NLP 领域的当前最佳;尤其在 Transformer 模型中表现最好;
(2)能缓解梯度消失问题。
缺点:
(1)存在大量的指数运算,计算复杂度高。
代码实现:
import numpy as np def tanh(x): s1 = np.exp(x) - np.exp(-x) s2 = np.exp(x) + np.exp(-x) s = s1 / s2 return s gelu = lambda x:0.5 * x * (1 + tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * np.power(x, 3)))) # pytorch版 gelu_fc = torch.nn.GELU() output = gelu_fc(x)
3.8 Softmax激活函数
Softmax函数比较适合作为多分类模型的激活函数,一般会与交叉熵损失函数相配。
Softmax激活函数 函数式:
值域:(0,1)Softmax函数的输出结果是0到1之间的概率值,对应着输入数据属于某个类别的概率,因此适合于多分类模型。通常,Softmax函数只应用于输出层。
代码实现:
def softmax(x): x_exp = np.exp(x) x_sum = np.sum(x_exp, axis=1, keepdims=True) s = x_exp / x_sum return s # Tensorflow2.0版 softmax_fc = tf.keras.activations.softmax(x) # pytorch版 softmax_fc = torch.nn.Softmax() output = softmax_fc(x)
4 优缺点对比
各个激活函数公式和特点 5. 如何选择激活函数?
激活函数种类繁多而且各有优缺点,那么,在神经网络中,应该选择哪个函数作为激活函数呢?
首先要建立一个观念:不存在普遍适用各种神经网络的万能的激活函数。在选择激活函数的时候,要考虑很多条件限制:
- 如果函数可导,求导数的计算难度如何?
- 网络的收敛速度如何?
- 函数光滑程度如何?
- 是否满足通用的逼近定理条件?
- 输出是否保持标准化?
等等,不一而足。
所以,要结合具体问题以及激活函数的特点,恰当地选择。下面是一些经验,供参考:
- Sigmoid函数比较适合于二分类模型。
- 使用Sigmoid函数和tanh函数,要注意梯度消失问题。
- ReLU函数是应用比较广泛的激活函数,可以作为你的默认选项。
- 如果网络中存在大量未激活神经元,可以考虑leaky ReLU函数。
- ReLU函数应该只用于隐藏层。
- 如果是回归模型,在输出层上可以使用线性激活函数。
参考资料:
[1] 激活函数的“3W”
[2] https://www.learnopencv.com/understanding-activation-functions-in-deep-learning/
[3] 从ReLU到GELU,一文概览神经网络的激活函数
-
输出神经元线性、s型和sigmoid函数softmax
2018-12-01 19:55:00如果输出神经元是sigmoid函数,可以采用交叉熵代价函数,对数释然函数(log—likelihood cost)常用来作为softmax回归的代价函数,而深度学习中更普遍的做法是将softmax作为最后一层,此时常用的代价函数是对数释...如果输出神经元是线性的,那么二次代价函数就是一种合适的选择
如果输出神经元是S型函数(或双曲正切函数),那么比较适合用交叉熵代价函数(cross—entropy)
如果输出神经元是sigmoid函数,可以采用交叉熵代价函数,对数释然函数(log—likelihood cost)常用来作为softmax回归的代价函数,而深度学习中更普遍的做法是将softmax作为最后一层,此时常用的代价函数是对数释然函数 -
比较双曲正切tanh与sigmoid激活函数的性能差异
2020-04-23 17:47:10激活函数分别使用tanh和sigmoid,用交叉对比固定收敛标准多次测量取平均值的办法比较两个激活函数到底有什么差异。 数据1:tanh 每个收敛标准收敛199次,共25*199次 tanh ... -
plot函数_激活函数-双曲正切函数tanh函数
2020-12-05 22:22:34tanh函数形状与sigmoid函数相似,从表达式和图形都可以看出,不同点是tanh函数的导函数的极值为1,对于解决梯度消失问题更有帮助,因此,它常被用做神经网络隐藏层的激活函数。需要注意的是,神经网络模型是通过加入... -
oracle max函数速度慢_神经网络之激活函数_Sigmoid和Tanh探索
2020-11-26 13:25:17Sigmoid是神经网络常用的激活...Tanh(双曲正切函数)值域:( -1,1 )公式:图形看上Tanh与Sigmoid差异1、Sigmoid函数比Tanh函数收敛饱和速度慢2、Sigmoid函数比Tanh函数梯度收敛更为平滑3、Sigmoid函数比Tanh函数... -
激活函数:双曲正切函数 tanh(x)
2018-06-03 13:29:10双曲正切函数等于双曲正弦与双曲余弦的比值,即tanh(x)=sinh(x)/cosh...定义域为(-∞,+∞),值域为(-1,+1)双曲正切函数(tanh)与激活函数sigmoid非常接近,且与后者具有类似的优缺点。sigmoid和tanh的主要区别在... -
Tensorflow基础(四)--激活函数(Sigmoid、tanh);损失函数(二次代价函数、交叉熵代价函数、对数释然...
2020-02-09 17:29:37激活函数1.1双曲正切函数与Sigmoid函数2.损失函数(代价函数)2.1 L1范数损失函数2.2 L2范数损失函数2.3 二次代价函数2.4 交叉熵代价函数2.5 对数释然代价函数(log-likelihood cost)3.演示代码 1.激活函数 激活函数... -
激活函数ReLU、Leaky ReLU、tanh(双曲正切函数Hyperbolic tangent function)
2020-08-17 16:15:01深度学习的激活函数 :sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus - 程序员大本营 https://www.pianshen.com/article/6147380115/ 数学表达式: y = max(0, x) + leak*min(0,x) 与 ReLu 相比 ,... -
最全最详细的常见激活函数总结(sigmoid、Tanh、ReLU等)及激活函数面试常见问题总结
2019-08-28 17:05:10激活函数具有的特性激活函数的类别饱和激活函数Sigmoid激活函数Tanh(双曲正切函数)激活函数Sigmoid、Tanh激活函数引发的常见问题解决非饱和激活函数ReLU激活函数Leaky ReLU等变种激活函数 为什么要使用激活函数? ... -
DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细...
2018-08-30 09:09:41DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略 ...sigmoid函数 Tanh双曲正切函数 ReLU线性整流函数 Leaky ReLU函数/PReLU函数 ELU函数 soft... -
深度学习入门~激活函数③
2021-04-16 13:02:15使用双曲正切函数,它的表现比sigmoid函数更好。 tanh(x)函数公式: 函数曲线:介于(-1,1),类似于sigmoid函数的平移版本。 使用tanh(x)的好处: ①函数图像过原点。(sigmoid函数的图像不过原点) ②收敛速度快于... -
激活函数
2018-10-26 16:35:49激活函数一. Sigmoid 函数sigmoid基本性质逻辑回归LSTM双曲正切函数tanh基本性质RNN三....在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的阈值函数,将变量映射到... -
深度学习(4): 深度学习基础1——激活函数和损失函数
2019-08-16 15:32:31文章目录1 激活函数1.1 线性函数1.2 Sigmoid函数1.3 双曲正切函数1.4 ReLU函数1.5 Softmax函数1.6 激活函数的选择2 损失函数2.1 损失函数定义2.2 回归损失函数(1) 均方误差损失函数2.3 分类损失函数2.4... -
ReLU为什么比Sigmoid效果好
2019-01-02 19:35:50附:双曲函数类似于常见的(也叫圆函数的)三角函数。基本双曲函数是双曲正弦"sinh",双曲余弦"cosh",从它们导出双曲正切"tanh" sigmod函数: Relu函数: 综合: 为什么... -
花书+吴恩达深度学习(二)非线性激活函数(ReLU, maxout, sigmoid, tanh)
2018-11-25 08:51:57目录 0. 前言 1. ReLU 整流线性单元 2. 绝对值整流线性单元 3. 渗漏整流线性单元 ...10. 硬双曲正切函数 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩... -
TensorFlow之三—激活函数(Activation Functions)
2019-01-25 21:52:03sigmoid函数2. tanh 双曲正切函数3. relu 函数4. ELU函数5.PReLU函数 在TensorFlow的训练中,为了更好的模拟或者学习更多的特征,在线性函数中引入了非线性,又名激活函数。如果你对激活函数不甚了解,你可以点击... -
深度学习损失函数和激活函数
2020-06-16 15:29:07一、损失函数 L1损失函数 L2损失函数 Cross Entropy交叉熵损失函数 MSE均方误差损失函数 Wing Loss:专为特征点检测提出的...sigmoid函数/Logistic 函数 tanh函数(双曲正切函数) ReLU函数(修正线性单元) ... -
激活函数Tanh
2020-03-18 19:54:46Tanh的诞生比Sigmoid晚一些,sigmoid函数我们提到过有一个缺点就是输出不以0为中心,使得收敛变慢的问题。而Tanh则就是解决了这个问题。Tanh就是双曲正切函数。等于双曲余弦除双曲正弦。函数表达式和图像见下图... -
ML激活函数使用法则
2018-11-08 21:17:00tanh 函数或者双曲正切函数是总体上都优于 sigmoid 函数的激活函数。 基本已经不用 sigmoid 激活函数了,tanh 函数在所有场合都优于 sigmoid 函数。 但有一个例外:在二分类的问题中,对于输出层,... -
3-5 激活函数
2019-09-23 12:16:36tanh可以看做是sigmoid函数向下平移和伸缩的结果,对它变形之后,穿过了(0,0)点,并且阈值介于-1和+1之间。 在隐藏层上使用tanh函数效果优于sigmoid,因为函数值域在-1和+1的激活函数,其均值更接近于0,这样会使..... -
卷积神经网络CNN笔记:激活函数
2019-05-06 11:53:34在神经网路的前向传播中,这两步会使用到sigmoid函数。sigmoid函数在这里被称为激活函数。 sigmoid函数 之前在线性回归中,我们用过这个函数,使我们的输出值平滑地处于0~1之间。 说明:除非输出层是一... -
激活函数(4)tanh函数
2019-06-12 20:24:13tanh函数 双曲正切激活函数,函数解析式: tanh函数及其导数的几何图像如下图: ...tanh读作Hyperbolic Tangent,它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gra... -
神经网络为什么需要激活函数
2018-12-24 21:29:45目前主要的激活函数有整流线性单元(Relu)、sigmoid激活函数、双曲正切激活函数(tanh)等,目前神经网络主要用的是relu(整流线性单元),在引入整流线性单元之前,大多数神经网络都使用sigmoid函数作为激活函数,... -
pytorch-torch.nn-激活函数
2021-01-02 16:22:51sigmoid激活函数(S型激活函数)/logistic激活函数Tanh激活函数(双曲正切激活函数)Relu激活函数(线性修正单元激活函数) sigmoid激活函数(S型激活函数)/logistic激活函数\\ Tanh激活函数(双曲正切激活函数)\\ Relu激活...