基本概念
-
激活函数应该满足什么条件
理解神经网络的激活函数- activation是为了实现万能逼近,所以好的激活函数需要1. 非线性 2. 处处可导(尤其是多层的场景) 3. 建模能力强:中间层的激活函数还要能在多层相乘后保证拟合的空间足够广大
- sigmoid就不适合做中间层的激活函数,因为其导数最大值是0.25,链式法则的多层梯度求导相乘之后传播到前几层的gradient就会非常小,也就是vanish现象
-
0221 很有趣的话题-- 历史上激活函数的设计
几个激活函数
relu
-
relu的优势到底是什么?
其实其设计之初,是为了解决sigmoid和tanh的saturation问题提出的,他确实不能做到均值为0,但是这不会影响NN的性能(一方面,有BN、LN的技巧可以帮助input shift到均值为0的分布;另一方面,除非weight被正则化了(限制在很小的范围内),否则对性能的影响不大),综上,relu相比于sigmoid来说是利大于弊的。
总结其优缺点如下:- 优点
- 正向侧可以解决多层梯度的饱和的问题 & 求导迅速
- 可以看作一个开关(说实话,不是很理解),达到某些阈值的信息才能通过(小于0的输入完全被过滤掉)
- 缺点
- 神经元死亡 (dead) / 神经元稀疏性 (sparsity) SO推荐了论文 Deep Sparse Rectifier Neural Networks,Glorot和Lecun写的,他们俩过了几年还发明了Xavier,可以看下CS230的lecture
- 优点
-
relu是线性的,却可以当作激活函数
首先,relu不是线性激活函数,因为线性函数的特性之一是在其定义域内: f ( a x + b y ) = a f ( x ) + b f ( y ) : f(ax+by) = af(x) + bf(y): f(ax+by)=af(x)+bf(y):
显然,relu定义域为 [ − ∞ , ∞ ] [-\infty,\infty] [−∞,∞]定义域,在这区间内并不满足
注意点
- Q: 激活函数的设计初衷是引入非线性的映射能力,那么 ReLU是非线性的么?
- dying relu problem in neural networks
- relu死亡主要是因为bias是一个很大的负数,导致这整个神经元的输出小于0,就算w有权重更新也救不回来,这个神经元就“死掉”了 – 输出不变,梯度也不变
- 通常learning rate太大会导致这个问题,小的lr可以缓解这个问题的发生频率
- 如果去掉bias会不会也是一种很好的缓解方式:去掉bias会导致训练效果变差,因为
- 激活函数输出是否要以0为中心会收敛得更快 谈谈激活函数以零为中心的问题