1、sigmoid函数
特点:
-
sigmoid函数在x处导数是可以由sigmoid在x处的函数值计算得到的,不需要求导操作,这可以减少在反向传播中的计算量。
-
将输入特征值压缩到0~1之间,使得在深层网络中可以保持数据幅度不会出现较大的变化;
(在机器学习中常利用(0, 1)区间的数值来表示以下意义:-
概率分布:根据概率公理化定义知道,概率的取值范围在[0, 1]之间,Sigmoid函数的(0, 1)区间的输出和概率分布的取值范围[0, 1]契合。因此可以利用Sigmoid函数将输出转译为概率值的输出。这也是Logistic(逻辑回归)使用Sigmoid函数的原因之一;
-
信号强度:一般可以将0~1理解成某种信号的强度。由于RNN循环神经网络只能够解决短期依赖的问题,不能够解决长期依赖的问题,因此提出了LSTM、GRU,这些网络相比于RNN最大的特点就是加入了门控制,通过门来控制是否允许记忆通过,而Sigmoid函数还能够代表门控值(Gate)的强度,当Sigmoid输出1的时候代表当前门控全部开放(允许全部记忆通过),当Sigmoid输出0的时候代表门控关闭(不允许任何记忆通过)。)
-
-
在物理意义上最为接近生物神经元;
-
其输出可以直接看作概率分布,使得神经网络可以更好地和统计学习模型进行结合。
-
其可以看作一个软性门(Soft Gate),用来控制其他神经元输出信息的数量。
缺点:
-
当输入非常大或非常小的时候,输出基本为常数,即变化非常小,进而导致梯度接近于0;(Sigmoid函数是连续可导函数,在零点时候导数最大,并在向两边逐渐降低,可以简单理解成输入非常大或者非常小的时候,梯度为0没有梯度,如果使用梯度下降法,参数得不到更新优化。)
-
输出不是0均值,进而导致后一层神经元将得到上一层输出的非0均值的信号作为输入。随着网络的加深,会改变原始数据的分布趋势;
-
梯度可能会过早消失,进而导致收敛速度较慢
-
幂运算相对耗时。
2、Tanh函数
特点:
-
Tanh函数的输出范围在-1~1之间;解决了输出不是0均值导致随着网络的加深会改变原始数据的分布趋势的问题;
-
Tanh函数的导数取值范围在01之间,优于sigmoid函数的0.25,一定程度上缓解了梯度消失的问题;
-
Tanh函数在原点附近与y=x函数形式相近,当输入的激活值较低时,可以直接进行矩阵运算,训练相对容易;
-
tanh的输出和输入能够保持非线性单调上升和下降的关系,符合反向传网络梯度的求解,容错性好,有界;
缺点:
-
梯度消失问题仍然存在
-
幂运算的相对耗时问题仍然存在
3、ReLU
特点:
-
在输入为负值时,输出均为0值,在输入大于0的区间,输出y=x,可见该函数并非全区间可导的函数
-
相较于sigmoid函数以及Tanh函数来看,在输入为正时,Relu函数不存在饱和问题,即解决了梯度消失问题,使得深层网络可训练
-
计算速度非常快,只需要判断输入是否大于0值;计算量变小。ReLU函数和Sigmoid函数相比少了复杂的幂运算,计算量变小;
-
收敛速度远快于sigmoid以及Tanh函数;
-
Relu输出会使一部分神经元为0值,在带来网络稀疏性的同时,也减少了参数之间的关联性,一定程度上缓解了过拟合的问题;
-
增大了网络的稀疏性。当输入值x < 0的时候,该层的输出为0,训练完成后为0的神经元越来越多,稀疏性会变大,网络的协同性会被破坏,更够迫使网络学习到更一般性的特征,泛化能力会变强。这也正是dropout的原理;
缺点:
-
Relu函数的输出也不是以0为均值的函数;
-
存在Dead Relu Problem,即某些神经元可能永远不会被激活,进而导致相应参数一直得不到更新,产生该问题主要原因包括参数初始化问题以及学习率设置过大问题;
-
当输入为正值,导数为1,在“链式反应”中,不会出现梯度消失,但梯度下降的强度则完全取决于权值的乘积,如此可能会导致梯度爆炸问题;
以前保存在本地的笔记,应该参考了其他博主的博客