1 为什么使用激活函数(Activation Function)
1.数据角度:
由于数据是线性不可分的,如果采用线性化,那么需要复杂的线性组合去逼近问题,因此需要非线性变换对数据分布进行重新映射;
2.线性模型的表达力问题:
由于线性模型的表达能力不够,引入激活函数添加非线性因素
通常被放置在每个神经元的输出端,用于对神经元的输出进行非线性变换,因为线性模型的表达力不够。
2 激活函数介绍
2.1 sigmoid详解
2.1.1 公式
z可以理解为线性组合:b + w1x1 + w2x2,转化为一个分类问题,
2.1.2 作用
能够把输入的连续实值压缩在0-1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。常用在全连接层和,分类的概率,输出为0.9可以解释为90%的概率为正样本。
2.1.2 缺点
1.如果我们初始化神经网络的权值为[0,1]之间的随机数,由反向传播算法的数学推导可以知道,梯度从后向前传播时,每传递一层梯度值都会下降为原来原来的0.25倍,如果神经网络层比较多是时,那么梯度会穿过多层之后变得接近于0,也就出现梯度消失问题,当权值初始化为 [1,+]期间内的值时,则会出现梯度爆炸问题();
output 不是0均值(即zero-centered);
后果:会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:x>0, f=wTx+b那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果;
幂函数耗时;
2.2 sigmoid为什么容易梯度消失
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可以作为分类的阀值;
https://zhuanlan.zhihu.com/p/24990626
2.2 tanh
2.2.1 tanh什么是 tanh 函数
- 公式
tanh 函数 能够 解决 sigmoid 函数 非 0 均值(sigmoid输出是0-1,经过变换后均值不是0)问题
2.3 relu 函数
只保留正数
2.3.1 为什么选 relu 函数 作为激活函数
- 解决了gradient vanishing问题 (在正区间) ,因为导数是1,在反向传播是梯度不会变化。
- 计算速度非常快,只需要判断输入是否大于0
- 收敛速度远快于sigmoid和tanh
单侧抑制,把所有负值变为0,输出0神经元就不会被激活,只有一部分被激活会很稀疏,
取最大值的函数。把所有负值都变为0,而正值不变-单侧抑制,只有一部分神经元会被激活,从而使网络很稀疏,提高计算效率,使神经元具有稀疏激活性。
稀疏激活性:从信号方面来看,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意的屏蔽了,这样可以提高学习的精度,更好更快地提取稀疏特征。当x<0时,ReLU 硬饱和,而当x>0时,则不存在饱和问题。ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。
2.4 softmax原理
在很多场景下分类问题的类别数目是比较多的,可以将网络输出转换为概率分布,映射到(0,1)区间内,可以看成概率来理解。所有输出概率和为1,便于理解和处理。
公式
目的:处理图像的离散数值分类问题。归一化指数函数
多物体分类,输入是多类别的得分多分类结果用概率形式表示出来,之和等于1,第一用指数函数转化为非负数,第2步归一化处理
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面试