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

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai


最近谷歌大脑公布了一个新的激活函数,叫做 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) = 2x*sigmoid(beta*x)) 。我希望这个激活函数比最原始的激活函数可以更加的高效。

参考资料

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

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


来源:Medium

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值