激活函数 | 神经网络

1 为什么使用激活函数(Activation Function)

1.数据角度:
由于数据是线性不可分的,如果采用线性化,那么需要复杂的线性组合去逼近问题,因此需要非线性变换对数据分布进行重新映射;
2.线性模型的表达力问题:
由于线性模型的表达能力不够,引入激活函数添加非线性因素
通常被放置在每个神经元的输出端,用于对神经元的输出进行非线性变换,因为线性模型的表达力不够。
激活函数 | 神经网络_第1张图片

2 激活函数介绍

2.1 sigmoid详解

2.1.1 公式

在这里插入图片描述

z可以理解为线性组合:b + w1x1 + w2x2,转化为一个分类问题,
激活函数 | 神经网络_第2张图片

2.1.2 作用

能够把输入的连续实值压缩在0-1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。常用在全连接层和,分类的概率,输出为0.9可以解释为90%的概率为正样本。

激活函数 | 神经网络_第3张图片

2.1.2 缺点

1.如果我们初始化神经网络的权值为[0,1]之间的随机数,由反向传播算法的数学推导可以知道,梯度从后向前传播时,每传递一层梯度值都会下降为原来原来的0.25倍,如果神经网络层比较多是时,那么梯度会穿过多层之后变得接近于0,也就出现梯度消失问题,当权值初始化为 [1,+]期间内的值时,则会出现梯度爆炸问题();
激活函数 | 神经网络_第4张图片

output 不是0均值(即zero-centered);
后果:会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:x>0, f=wTx+b那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果;
幂函数耗时;
激活函数 | 神经网络_第5张图片
2.2 sigmoid为什么容易梯度消失
激活函数 | 神经网络_第6张图片

Sigmoid和Relu激活函数的对比

1 sigmoid在0处正负饱和区梯度接近于0,造成梯度弥散:梯度很小,网络训练不动。
relu函数在大于0的部分梯度为常数,不会弥散。第2:稀疏激活性 3 加快运算

是逻辑斯蒂回归的压缩函数,它的性质是可以把分隔平面压缩到[0,1]区间一个数(向量),在线性分割平面值为0时候正好对应sigmod值为0.5,大于0对应sigmod值大于0.5、小于0对应sigmod值小于0.5;0.5可以作为分类的阀值;

激活函数 | 神经网络_第7张图片

https://zhuanlan.zhihu.com/p/24990626

2.2 tanh

2.2.1 tanh什么是 tanh 函数

  • 公式
    tanh 函数 能够 解决 sigmoid 函数 非 0 均值(sigmoid输出是0-1,经过变换后均值不是0)问题
    在这里插入图片描述

激活函数 | 神经网络_第8张图片
激活函数 | 神经网络_第9张图片
在这里插入图片描述

2.3 relu 函数

只保留正数
在这里插入图片描述
激活函数 | 神经网络_第10张图片

2.3.1 为什么选 relu 函数 作为激活函数

  1. 解决了gradient vanishing问题 (在正区间) ,因为导数是1,在反向传播是梯度不会变化。
  2. 计算速度非常快,只需要判断输入是否大于0
  3. 收敛速度远快于sigmoid和tanh

单侧抑制,把所有负值变为0,输出0神经元就不会被激活,只有一部分被激活会很稀疏,
取最大值的函数。把所有负值都变为0,而正值不变-单侧抑制,只有一部分神经元会被激活,从而使网络很稀疏,提高计算效率,使神经元具有稀疏激活性。

稀疏激活性:从信号方面来看,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意的屏蔽了,这样可以提高学习的精度,更好更快地提取稀疏特征。当x<0时,ReLU 硬饱和,而当x>0时,则不存在饱和问题。ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。

2.4 softmax原理

在很多场景下分类问题的类别数目是比较多的,可以将网络输出转换为概率分布,映射到(0,1)区间内,可以看成概率来理解。所有输出概率和为1,便于理解和处理。

公式
在这里插入图片描述
目的:处理图像的离散数值分类问题。归一化指数函数
多物体分类,输入是多类别的得分多分类结果用概率形式表示出来,之和等于1,第一用指数函数转化为非负数,第2步归一化处理

激活函数 | 神经网络_第11张图片

激活函数 | 神经网络_第12张图片

2.4.1 缺点

在计算softmax时,需要计算所有类别的概率,并且分母中需要对所有类别的得分进行求和,计算复杂度较高。对于类别数量非常大的情况,计算量可能会非常大。同时,softmax也容易受到过大或过小的输入值的影响,可能会出现数值不稳定的情况。

3 激活函数选择

1.深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据
(可以经过数据预处理实现)和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。
2.如果使用ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead”神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout。
3.最好不要用sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout。

参考

动手学pytorch
https://www.cnblogs.com/developer-ios/p/8684852.html
https://www.jianshu.com/p/338afb1389c9
https://www.cnblogs.com/DjangoBlog/p/9151829.html
https://blog.csdn.net/Grateful_Dead424/article/details/123287546
九天relu详解
激活函数 github面试

你可能感兴趣的:(神经网络,人工智能,深度学习)