常见激活函数概览

  • 1、激活函数的用处
  • 2、常见激活汇总
  • 3、选择合适的激活函数的建议
  • 4、常见激活函数图形


1、激活函数的用处

有助于提取重要信息,过滤不相干信息。不使用激活函数的神经网络本质上是线性回归模型。

公式: y = Activate(∑(wx)+b),这里的输出不一定是最终模型的
输出,而是层(layer)的输出。此过程也就是前向传播。(反向传播就是利用
经验误差更新参数的过程)

2、常见激活汇总

激活函数

表达式

(一阶)导数

备注

阶跃函数

y=1 x>=0

y=0 x<0

y’=0

基于单个阈值的激活函数;

当x>=阈值, y=1,激活该神经元;反之y=0,冻结该神经元

线性函数

y=kx

y’=k

导数值为常数,即梯度不能随x的变化而变化,在BP更新参

数时梯度保持不变,故不能减少训练误差,网络虽简单但不能学习复杂的数据

S函数sigmoid

y = 1/(1+e-x)

y’=y(1-y)

二分类,将输入值映射到[0,1]之间(相当于归一化效果);

一阶导在[-3, 3]之间变化显著,其它范围梯度很小,会出现梯度消失的情况。

连续,所有点上都是可导的.

tanh

y = 2 / (1+e-2x) - 1

y’=1-y2

sigmoid的升级版,但以原点中心对称,y取值范围在[-1, 1], 连续,所有点上都是可导的

ReLU

y = max(0, x)

y=1

y=0

在同一时刻,不是所有神经元都被激活。

缺点:x < 0时,梯度为0,参数永远不能被更新。

Leaky ReLU

y=x (x>=0)

y=0.01x (x<0)


只是ReLU的一个改良版,解决当x<0时参数无法的问题。

参数化的ReLU

y=x (x>=0)

y=ax (x<0)


只是ReLU的一个改良版,解决x<0时,参数无法更新问题。

系数a是一个从模型训练过程中可学习到的参数。

使用场景:当Leaky ReLU无法解决梯度消失、有效信息不能传递给下一个layer时

指数化的ReLU(ELU)

y=x (x>=0)

y=a(ex - 1) (x<0)


swish

y = x / (1-e-x)


google发明,在计算上同ReLU一样高效,在更深的网络上,性能比ReLU更优。

y取值范围:(-∞,∞),非单调函数。

softmax

激活函数 改进 激活函数总结_激活函数 改进

y’ = y(1-y)

sigmoid的多分类版本

softmax返回是概率分布

3、选择合适的激活函数的建议

如何选择合适的激活函数?(不存在一成不变的法则)
	a)在分类任务中,sigmoid和其它函数组合使用效果更好
	b)由于存在梯度消失问题,sigmoid和tanh在某些情况下避免使用
	c)ReLU是一个常用的激活函数,能在大部分情况被使用
	d)遇到梯度消失情况时,Leaky ReLU时最好选择
	e)记住:ReLU仅用于hidden层  (*)
	f)根据以往的经验:优先使用ReLU,当其没有达到预期效果时,再考虑其它激活函数 (*)

4、常见激活函数图形

激活函数 改进 激活函数总结_激活函数 改进_02