ReLU 激活函数:
ReLu使得网络可以自行引入稀疏性,在没做预训练情况下,以ReLu为激活的网络性能优于其它激活函数。
数学表达式: $y = max(0,x)$
Sigmoid 激活函数:
sigmoid 激活函数在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。
数学表达式: $y = (1 + exp(-x))^{-1}$
Tanh 激活函数:
Tanh 激活函数使得输出与输入的关系能保持非线性单调上升和下降关系,比sigmoid 函数延迟了饱和期,对神经网路的容错性好。
数学表达式:
不同激活函数的神经网络的表达能力:
- 每层都是sigmoid,这样会带来训练饱和问题(http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf),你可以笼统认为饱和就是trap在某个区间上,该区间对提升性能毫无帮助。按照原始文章引举的说法,sigmoid的二次导数等于,输入为零的时候,二次导数为零(曲率为零,hessian带奇点),相当于损失函数曲面上有个大平原,导致训练迟缓。
- 然而这个理论太简单粗暴了,深层网络的损失函数出现大平原不是激活函数二次导数为不为零这么简单的事情。
- 为了理解这种大平原的出现,我们可以用另外一个直观粗浅地方式理解饱和,该方法笼统来说,如果参数W潜在的解空间越大,训练越难找到极小。按照如下方式计算潜在解空间,假设你的输入x都被rescale到0-1之间,你计算信息熵,发现输入x=0.5附近的区间拥有最大的自由度(自由活动空间大小约等于exp(熵)),到了sigmoid中,相当于要求Wx为零。更一般来说,计算输入为高斯时,使得Wx等于k的W解空间大小,可以如下计算:,是狄拉克函数,对于sigmoid来说,k等于零,上面的积分无穷大(W垂直x便可,有无限解)。对于relu来说,k不等于零,积分结果为有限值,n为x的维度,同k无关。sigmoid的解空间远超relu。导致分类问题中,sigmoid在0.5附近的区间过大,每层都花大量时间搜索,训练没法提升。越深层的网络,越难以跳出,这是熵垒(俗称大平原),用于区别单纯局部极小带来的训练阻碍(坑王之王)。
- tanh解空间也比sigmoid小,当然上面为了展示思路,理论过于简化了,没法比较tanh和relu,实际上解空间是 exp(信息熵) x(解空间大小),x可以在不是0.5处取极值,实际这样做tanh的解空间还是比relu大不少,推导太长就不写了。
- sigmoid的好处并不是在训练上的,而是你的模型如果牵涉到许多概率问题,比如DBN,RNN,LSTM中的一些gate,你就不能将sigmoid换成relu了,这样概率表达都错了。
- relu型的,如上所述用于缓和饱和问题。而且还有部分缓和梯度衰减的作用,不像sigmoid一样,relu没有一个梯度衰减的尾巴,强度上不封顶。使得反向传播过程只有权值的乘积带来梯度的衰减。然而,一些网络可能需要clip掉梯度,避免不封顶的爆炸梯度回传。
- 稀疏度问题,relu的稀疏机理同dropout机理不一样,dropout等效于动态L2规范带来的稀疏,是通过打压W来实现稀疏的。relu稀疏是因为如果输入为零,输出也会为零,这样多层输入输出更加贴近于原始高维数据层的稀疏度,毕竟输入信息本来就是高度稀疏的,当然这个只是形象的理解,确切更严格的理解还请高手解释。
时间: 2024-11-03 05:41:29