sigmoid

激活函数篇(Sigmoid、tanh、ReLU、PReLU)

ⅰ亾dé卋堺 提交于 2020-02-04 01:50:58
写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。详细内容可以参考文中帖的链接,比较好!!! 常用激活函数(激励函数)理解与总结 激活函数的区别与优点 梯度消失与爆炸 1. 激活函数是什么? 在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。 2. 激活函数的用途 如果不用激活函数,每一层的输入都是上一层输出的线性函数,而多层线性函数与一层线性函数的功能是等价的,网络的逼近能力就相当有限,因此引入非线性函数作为激励函数,使得深层神经网络的可以更好的逼近任意函数。 3. 常见的激活函数: Sigmoid 函数: 表达形式: f ( z ) = 1 1 + e − z f(z) = \frac{1}{1+e^{-z}} f ( z ) = 1 + e − z 1 ​ 函数图像: 导数图像: 优缺点: 优点 能够把输入的连续值压缩到【0~1】之间,可解释性强,0为不活跃,1为活跃 缺点 梯度反向传递时,容易导致梯度的爆炸和消失(大概率梯度消失,有时梯度爆炸)。 而由于 σ ( z ) \sigma (z) σ ( z ) 最大值为0.25,且通常初始| w | < 1 ,则有: 极易出现梯度消失;当初始化 |w| > 4 时,w * σ ( z ) \sigma (z) σ ( z ) > 1 ,才会产生梯度爆炸。

CNN网络的基本介绍(二)

强颜欢笑 提交于 2020-02-02 20:22:02
四、激活函数 激活函数又称 非线性映射 ,顾名思义,激活函数的引入是 为了增加整个网络的表达能力(即非线性) 。若干线性操作层的堆叠仍然只能起到线性映射的作用,无法形成复杂的函数。常用的函数有sigmoid、双曲正切、线性修正单元函数等等。 使用一个神经网络时,需要决定使用哪种激活函数用隐藏层上,哪种用在输出节点上。   比如,在神经网路的前向传播中, 这两步会使用到 sigmoid 函数。 sigmoid 函数在这里被称为激活函数。 sigmoid 函数   之前在线性回归中,我们用过这个函数,使我们的输出值平滑地处于0~1之间。      观察图形我们发现,当大于5或者小于-5的值无论多大或多小都会被压缩到1或0。如此便带来一个严重问题,即梯度的“饱和效应”。 大于5或者小于-5部分的梯度接近0,这回导致在误差反向传播过程中导数处于该区域的误差就很难甚至根本无法传递至前层,进而导致整个网络无法训练 (导数为0将无法跟新网络参数)。   此外,在参数初始化的时候还需要特别注意,要避免初始化参数直接将输出值带入这一区域,比如初始化参数过大,将直接引发梯度饱和效应而无法训练。 说明: 除非输出层是一个二分类问题否则基本不会用它。 双曲正切函数    tanh 函数是 sigmoid 的向下平移和伸缩后的结果。对它进行了变形后,穿过了原 点,并且值域介于+1和-1之间。     

【TensorFlow】激活函数(Activation Functions)原理解析(十二)

给你一囗甜甜゛ 提交于 2020-02-02 06:00:49
神经网络结构的输出为所有输入的加权和,这导致整个神经网络是一个线性模型。如果将每一个神经元的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性的了,使得神经网络可以更好地解决较为复杂的问题。这个非线性函数也就是 激活函数 。 神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。 从定义来看,几乎所有的连续可导函数都可以用作激活函数。但目前常见的多是分段线性和具有指数形状的非线性函数。下文将依次对它们进行总结。 TensorFlow提供的激活函数有: 详见官方文档 1、tf.nn.relu(features, name=None) 2、tf.nn.relu6(features, name=None) 3、tf.nn.softplus(features, name=None) 4、tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None) 5、tf.nn.bias_add

深度学习常用激活函数

点点圈 提交于 2020-02-02 02:22:52
参考( https://www.cnblogs.com/home123/p/7484558.html ) ( https://blog.csdn.net/tyhj_sf/article/details/79932893 ) Sigmoid函数 Sigmoid函数曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。Sigmoid函数被定义为: 函数对应的图像是: 优点: 1.Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。 2.求导容易。 缺点: 1.由于其软饱和性,容易产生梯度消失,导致训练出现问题。 2.其输出并不是以0为中心的。 3.计算exp比较耗时 tanh函数 现在,比起Sigmoid函数我们通常更倾向于tanh函数。tanh函数被定义为 函数位于[-1, 1]区间上,对应的图像是: 优点: 1.比Sigmoid函数收敛速度更快。 2.相比Sigmoid函数,其输出以0为中心。 缺点: 还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。 ReLU ReLU是最近几年非常受欢迎的激活函数。被定义为 对应的图像是: 但是除了ReLU本身的之外,TensorFlow还提供了一些相关的函数,比如定义为min(max(features, 0), 6)的tf.nn.relu6(features, name

cs231n--反向传播

陌路散爱 提交于 2020-02-01 21:35:39
原博客:https://blog.csdn.net/sinat_36458870/article/details/82824529(此处只做学习记录用) 回顾上次的内容,其实就会发现,虽然我们构造好了损失函数,可以简单使用导数的定义解决损失函数优化问题,但是并不高效。 1. 该课程,主要是 : 反向传播形成直观而专业的理解 利用链式法则递归计算表达式的梯度 理解反向传播过程及其优点。 如果你想:理解、实现、设计和调试神经网络,请再看一遍。 目的:给出f(x)(x是输入数据的向量),计算 ∇ f ( x ). 2. 通过简单表达式理解梯度 先看看二元乘法函数: f ( x , y ) = x y, 求一下偏导数 f ( x , y ) = x y → d f/ d x ​ = y d f/ d y ​ = x 啥意思呢? 请记住导数的意义:函数变量在某个点周围的很小区域内变化,而导数就是-->变量变化导致的函数在该方向上的变化率 d f ( x ) ​/ d x = lim (h-->0) ( f ( x + h ) − f ( x )) / h ​ 等同于: ∇ f ( x ) = lim (h-->0) ( f ( x + h ) − f ( x )) / h ​ 官方解释:若x = 4, y=-3, 则f(x,y) = -12, x的导数 ∂ f/ ∂ x = − 3

注意力机制之《CBAM: Convolutional Block Attention Module》论文阅读

限于喜欢 提交于 2020-02-01 03:27:12
  论文地址: CBAM: Convolutional Block Attention Module   代码地址: github 文章目录 1. 简介 2. 结构 2.1 CBAM结构 2.1.1 Channel-Wise Attention 2.1.2 Spatial Attention Module 2.2 代码实现 3. 实验结果 3.1 实验设置 1. 简介   本文提出了一个CBAM注意力机制模块,和SEBlock不同的地方是CBAM多了一个空间注意力模块,通道注意力部分和SEBlock很像只是稍微改进了一下。 2. 结构 2.1 CBAM结构 2.1.1 Channel-Wise Attention   通道注意力部分可以从图中看到基本和SEBlock相同,只是加了一个分支Maxpooling,中间共享一个mlp,最后将两部分的输出相加经过sigmoid。 M c ( F ) = σ ( M L P ( A v g P o o l ( F ) ) + M L P ( M a x P o o l ( F ) ) ) = σ ( W 1 ( W 0 ( F a v g c ) ) + W 1 ( W 0 ( F m a x c ) ) ) M_c(F)=\sigma(MLP(AvgPool(F)) + MLP(MaxPool(F)))=\sigma(W_1(W_0(F_

深度学习入门之5--网络学习相关技巧2(权重设置)

ぃ、小莉子 提交于 2020-01-31 00:12:14
目录 1、简述 2、sigmiod权重初始值 3、relu权重初始值 4、案例:不同初始值比较 4.1common文件夹 4.2ch06文件夹 4.2.1weight_init_compare.py 4.3结果 该文章是对《深度学习入门 基于Python的理论与实现》的总结,作者是[日]斋藤康毅 该文将介绍权重的初始值的相关问题。 1、简述 在神经网络的学习中,权重的初始值特别重要。设定什么样的权重初始值,经常关系到神经网络的学习能否成功。且会影响到神经网络学习的速度。 权值衰减:就是一种以 减小权重参数的值 为目的进行学习的方法。通过减小权重参数的值来 抑制过拟合 的发生。 因此,我们在对权值进行初始化的时候,一开始便可以将初始值设置较小,使用Gauss分布生成的值。但是权重的值也不能全部设置为0(或者权值全部相同),将权重初始值设为0的话,将无法正确进行学习。这是因为在误差反向传播法中,所有的权重值都会进行相同的更新,没有意义。 2、sigmiod权重初始值 下面使用sigmoid函数来举例,观察 权重初始值 是如何影响 隐藏层的激活值 的分布的。 目的:通过改变标准差,观察激活函数的变化 例:向一个5层神经网络(激活函数使用sigmoid函数)传入随机生成的输入数据,用直方图绘制各层激活值的数据分布。高斯分布的标准差分别为1, 0.01, 1/sqrt(n)

激活函数

拥有回忆 提交于 2020-01-30 04:24:33
目录 为什么需要激活函数 激活函数 常见的激活函数 Sigmoid Tanh ReLU Leaky ReLU ELU Maxout Softmax 结论 如何选择合适的激活函数 为什么需要激活函数 神经网络单个神经元的基本结构由线性输出 Z 和非线性输出 A 两部分组成。如下图所示: 其中,f(x) 即为线性输出 Z,g(x) 即为非线性输出,g() 表示激活函数。通俗来说,激活函数一般是非线性函数,其作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。 举个简单的例子,二分类问题,如果不使用激活函数,例如使用简单的逻辑回归,只能作简单的线性划分,如下图所示: 如果使用激活函数,则可以实现非线性划分,如下图所示: 可见,激活函数能够帮助我们引入非线性因素,使得神经网络能够更好地解决更加复杂的问题。 有个问题,为什么激活函数一般都是非线性的,而不能是线性的呢?从反面来说,如果所有的激活函数都是线性的,则激活函数 g(z)=z,即 a=z。那么,以两层神经网络为例,最终的输出为: 经过推导我们发现网络输出仍是 X 的线性组合。这表明,使用神经网络与直接使用线性模型的效果并没有什么两样。即便是包含多层隐藏层的神经网络,如果使用线性函数作为激活函数,最终的输出仍然是线性模型。这样的话神经网络就没有任何作用了。因此,隐藏层的激活函数必须要是非线性的。

sigmoid函数特性

人走茶凉 提交于 2020-01-29 01:32:58
sigmoid函数特性 (1)定义域为R (2)值域为(0,1) (3)函数在定义域内为连续和光滑的函数 (4)处处可导,且导函数满足S’(x)=S(x)(1-S(x)) (5)S形函数,中间梯度大,越趋近于两端梯度越小,容易梯度消失。 (6)导数值域为(0,0.25] Sigmoid函数由下列公式定义 图形如下: 优点 :平滑、易于求导。 缺点 :激活函数计算量大,反向传播求误差梯度时,求导涉及除法;反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。 来源: CSDN 作者: 数据挖掘爱好者_123 链接: https://blog.csdn.net/qq_34506762/article/details/103980152

激活函数层

爷,独闯天下 提交于 2020-01-28 21:22:46
激活函数层 饱和函数:sigmoid\tanh (饱和函数应该是说输入达到一定的值以后,输出就不再变化了,饱和了) 梯度消失没有sigmoid那么严重,但是如果在几十上百层的网络上,又会变的不明显 非饱和函数ReLU 负半轴会导致神经元死亡 来源: CSDN 作者: Major_s 链接: https://blog.csdn.net/qq_41375318/article/details/103641782