资讯专栏INFORMATION COLUMN

谷歌大脑的 Swish 激活函数与 ReLU 激活函数对比

wujl596 / 3361人阅读

摘要:作者微信号微信公众号简书地址最近谷歌大脑公布了一个新的激活函数,叫做激活函数。根据谷歌大脑的论文,该激活函数的性能比激活函数的性能要好很多。编写激活函数在中还没有实现激活函数。时间比较在我的上面,激活函数比激活函数快秒左右。

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai
简书地址:http://www.jianshu.com/p/95e3...


最近谷歌大脑公布了一个新的激活函数,叫做 Swish 激活函数。这个函数非常的有趣,很多人都把它应用到一些小的神经网络和大的神经网络中去测试它的性能。所以,我也打算去 kaggle 上面测试一些这个函数的性能如何。

Swish 激活函数的数学公式非常的简单,即 f(x) = x * sigmoid(x) 。根据谷歌大脑的论文,该激活函数的性能比 ReLU 激活函数的性能要好很多。

我利用 Keras 实现的 ReLU 模型,在 kaggle 上面获得的分数是 0.99457。我保持所有的模型参数不变,只是把原来模型中的 ReLU 激活函数修改为 Swish 激活函数,该模型的正确率就可以达到 0.99671 。

编写 Swish 激活函数

在 keras 中还没有实现 Swith 激活函数。所以我们第一步就是需要去实现这个激活函数。下面的 3 行代码就可以实现这个功能:

from keras import backend as K
from keras.layers import Activationfrom 
keras.utils.generic_utils import get_custom_objects
def swish(x):
    return (K.sigmoid(x) * x)
get_custom_objects().update({"swish": Activation(swish )})

现在我们只需要将 Swish 激活函数添加到模型就行了。

model.add(Conv2D(filters = 32, kernel_size = (5,5),padding = ‘Same’, 
 activation =’swish’, input_shape = (28,28,1)))

但我们的最后一层还是采用原来的 sigmoid 激活函数。

精度比较

在正确率方面,我发现 Swish 激活函数的性能比 ReLU 激活函数好一点,在 kaggle 上面的排名大约可以排到 90 名。

时间比较

在我的 Geforce 940mx 上面,ReLU 激活函数比 Swish 激活函数快 10 秒左右。我知道可能 Swish 激活函数在计算 sigmoid 函数的时候比 ReLU 多浪费了 10 秒。

总结

在 kaggle 上面提交之后,我们的正确率只是多了 0.002 左右,排名大约在 90 名。但是我们每运行一个 epoch ,在 GPU 上面需要多花费 20% - 30% 的时间。刚刚我们使用的是最原始的 Swish 版本,还有另外一个版本,即 Swish_beta (f(x) = 2xsigmoid(betax)) 。我希望这个激活函数比最原始的激活函数可以更加的高效。

参考资料

kaggle 代码,请点击这里。
GitHub 代码,请点击这里。
Swish 原始论文,请点击这里。

如果你发现了任何的问题,或者有什么好的想法,请与我联系。


作者:chen_h
微信号 & QQ:862251340
简书地址:http://www.jianshu.com/p/95e3...

CoderPai 是一个专注于算法实战的平台,从基础的算法到人工智能算法都有设计。如果你对算法实战感兴趣,请快快关注我们吧。加入AI实战微信群,AI实战QQ群,ACM算法微信群,ACM算法QQ群。长按或者扫描如下二维码,关注 “CoderPai” 微信号(coderpai)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41087.html

相关文章

  • 激活函数可视化

    摘要:激活函数介绍形函数函数是神经网络初期的激活函数。其他不常用的激活函数如反正切,,以及同样减轻了以上问题。的意思就是对于一个个节点的隐层,使用作为激活函数的神经网络。实际上这次的实验中所有系的激活函数除了,使用都收敛的比较快。 前言 简单来说,激活函数在神经网络里的作用就是引入Non-linearity。假如没有激活函数的话,一个多层的神经网络等同于一个一层的神经网络。简单来说,一个神经...

    tolerious 评论0 收藏0
  • 常见激活函数

    摘要:的亮点在于,在训练环节中,是从一个均匀的分布中随机抽取的数值。具体可见论文作者的常用激活函数介绍早期的激活函数大多采用函数,但是它存在一些问题过大或者过小的结果都会导致梯度趋近于,再经过多层,梯度还会进行次方操作,其结果就更小。 ...

    张金宝 评论0 收藏0
  • 神经网络

    摘要:借助这种算法,梯度下降法在多层神经网络中将成为可行方法。如果范围大致相同,则有助于提高神经网络的转化速度。 关于神经网络的基础理解在知乎下面两个回答已经说的很好了如何简单形象又有趣地讲解神经网络是什么? --王小龙 如何简单形象又有趣地讲解神经网络是什么? --YJango 这里就只把谷歌教程上面的知识补充一下吧,也差不多是最后一趴了。 激活函数 要对非线性问题进行建模,我们可以...

    evin2016 评论0 收藏0
  • 神经网络和深度学习简史第四部分:深度学习终迎伟大复兴

    摘要:主流机器学习社区对神经网络兴趣寡然。对于深度学习的社区形成有着巨大的影响。然而,至少有两个不同的方法对此都很有效应用于卷积神经网络的简单梯度下降适用于信号和图像,以及近期的逐层非监督式学习之后的梯度下降。 我们终于来到简史的最后一部分。这一部分,我们会来到故事的尾声并一睹神经网络如何在上世纪九十年代末摆脱颓势并找回自己,也会看到自此以后它获得的惊人先进成果。「试问机器学习领域的任何一人,是什...

    Simon_Zhou 评论0 收藏0
  • 「自归一化神经网络」提出新型激活函数SELU

    摘要:循环神经网络令语音和自然语言处理达到了新阶段。自归一化神经网络对于扰动是具有鲁棒性的,它在训练误差上并没有高方差见图。构建自归一化神经网络我们通过调整函数的属性以构建自归一化神经网络。 近日,arXiv 上公开的一篇 NIPS 投稿论文《Self-Normalizing Neural Networks》引起了圈内极大的关注,它提出了缩放指数型线性单元(SELU)而引进了自归一化属性,该单元主...

    马忠志 评论0 收藏0

发表评论

0条评论

wujl596

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<