激活函数汇总(附TensorFlow实现)

李宏毅老师的课件:

http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2018/Lecture/ForDeep.pdf

B站的课件讲解:

https://www.bilibili.com/video/av9770302/?p=11

大部分内容转载于用户SpareNoEfforts 

https://www.jianshu.com/p/d216645251ce

真的需要认真学习相关内容的可以去上面的几个网址,自行选择学习。对于不太愿意看很长时间的同学,我在这里用最简短的话来阐述。

(sigmoid、tanh和maxout这里就不介绍了)

1. Relu激活函数

 

上述的relu是使用最多的一类激活函数了,也就是将传进来的值限制在一个范围。(x小于0即为0,x大于0即y=x计算)

2.Relu变形体:Leaky ReluParametric Relu函数

 

性质一样,参考上面1。

3.转载博主还介绍了个Randomized ReLU函数

training:α的值每一次都不一样。

testing:α的值fix。

4.ELU和SELU函数

selu论文地址:https://arxiv.org/abs/1706.02515

为什么单独贴出来呢,因为这篇作者的推导过程在论文中写了97页,

相信大家一下就可以看懂,elu函数也就是将小于0的部分做个处理y=α(e^x-1),大于0部分没有做任何改变。而selu函数就是在elu基础上将大于0部分变为了y=λx,加了一个斜率,而这个斜率的值大家可以注意到是大于0的,所以input的值是会被放大的,其中推导过程省去,若是有需要可以参考课件和(https://www.jianshu.com/p/d216645251ce)其中推导内容。

5.GELU

6.SWITH

财大气粗谷歌大脑在selu出了不久就提出了swish激活函数方法,秒杀所有激活函数。

论文地址:https://arxiv.org/abs/1710.05941

论文中贴出的计算公式为:f(x) = x · sigmoid(βx)

论文中提到的TensorFlow中也有自带的tf.nn.swith(x),但是我发这篇文章之前找了,没有,根本没有。所以只能使用论文中使用的方法,x * tf.sigmoid(beta * x),当然一般beta为1,所以直接x * tf.sigmoid(x)即可。

贴出来论文中的结果:

        

以上结果贴给能看懂得人,不懂得没有关系,我帮你说。

就是说swish的方法要强过其他所有的方法,感觉自己在说废话。其中注意到使用selu和gelu的结果会比较低,甚至比relu的结果还低,这真的很谷歌大脑。

附:

本人的建议是自己去尝试一下,各个方法的实现也不麻烦。接下来我就把基于TensorFlow的方法贴出来,以供参考:

relu函数:tf.nn.relu(features, name=None)

leakyrelu函数:tf.nn.leaky_relu(features, alpha=0.2, name=None)

sigmoid函数:tf.sigmoid( features, name=None )

elu函数:tf.nn.elu( features, name=None )

selu函数:tf.nn.selu(features, name=None) 或者

1 def selu(x):
2     with ops.name_scope('elu') as scope:
3         alpha = 1.6732632423543772848170429916717
4         scale = 1.0507009873554804934193349852946
5         return scale*tf.where(x>=0.0, x, alpha*tf.nn.elu(x))

 swish函数:tf.nn.swish(x)或者input=x * tf.sigmoid(beta * x) //beta一般为1

怎么选择激活函数呢?

(转载于明也无涯:https://www.cnblogs.com/makefile/p/activation-function.html

  • 首先尝试ReLU,速度快,但要注意训练的状态.

  • 如果ReLU效果欠佳,尝试Leaky ReLU或Maxout等变种。

  • 尝试tanh正切函数(以零点为中心,零点处梯度为1)

  • sigmoid/tanh在RNN(LSTM、注意力机制等)结构中有所应用,作为门控或者概率值.

  • 在浅层神经网络中,如不超过4层的,可选择使用多种激励函数,没有太大的影响。

只有在实践中才可以找到最适合自己的激活函数。

猜你喜欢

转载自www.cnblogs.com/superSaiyan/p/12106761.html
今日推荐