热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

technology(advance)

作者:LessWright编译:ronghuaiyang导读对激活函数的研究一直没有停止过,ReLU还是统治着深度学习的激活函数,不过,这种情况有可能会被Mish改变。Digant


作者:少莱特


编制人:荣怀阳


00-1010激活功能的研究从未停止。ReLU仍然主导着深度学习的激活功能,但这种情况可能会被Mish改变。


Diganta Misra的一篇题为“Mish :a自调节非单调神经激活函数”的新论文介绍了一种新的深度学习激活函数,其最终精度高于Swish(.494%)和ReLU(1.671%)。


我们的小FastAI团队用Mish代替了ReLU,打破了之前在FastAI全球排行榜上的部分准确率得分记录。结合Ranger优化器,Mish激活,平余弦退火和自我关注层,我们可以获得12个新的排行榜记录!




我们12项排行榜记录中的6项。每条记录都使用Mish而不是ReLU。(蓝色高亮显示,400历元精度为94.6,略高于我们的20历元精度93.8:)


作为我们自己测试的一部分,我们可以说对于ImageWoof数据集的5纪元测试:


Mish在高显著性水平上优于relu(p 0.0001)。(FastAI论坛@ Seb)


Mish已经在70多个基准上进行了测试,包括图像分类、分割和生成,并与其他15个激活功能进行了比较。




与ReLU和Mish相比,Mish的梯度更平滑。




我对Mish做了一个PyTorch实现,在没有任何其他改动的情况下用它替换了ReLU,并用广泛的优化器(Adam、Ranger、RangerLars、Novograd等)进行了测试。)在困难的ImageWoof数据集上。


我发现Mish的训练稳定性、平均准确率(1-2.8%)和峰值准确率(1.2%-3.6%)都得到了全面的提升,这与本文的结果是一致的,甚至超过了本文的结果。


以下是Ranger Optimizer Mish和FastAI排行榜之间的比较:




游侠优化器(RAdam和前瞻)Mish激活超过当前FastAI排行榜评级。注意稳定稳定的训练曲线。




FastAI排名是5和20个时代,ImageWoof数据集(困难)。


这是通过在FastAI的XResNet50中简单地用Mish替换ReLU,并使用各种优化器运行(上面的Ranger结果)来实现的。没有其他变化,包括学习率。注意:优化Mish的学习率很可能会得到更好的效果。与ReLU相比,本文提出了一个较低的学习率供参考。


Mish检查了理想激活函数应该是什么的所有内容(平滑、处理负号等)。),并提出了一套广义的初始检验。在过去的一年里,我测试了大量新的激活函数,其中大多数都失败了,从基于MNIST的论文到基于更真实数据集的测试。因此,Mish最终可能会为深度学习从业者提供新的激活功能,有很大机会超越长期占据主导地位的ReLU。




米什的性质


我通过下面的PyTorch代码链接提供了Mish和一个修改后的XResNet (MXResNet),这样你就可以快速地把Mish放到你的代码中,并立即进行测试!


让我们后退一步,了解什么是Mish,为什么它可能会提高ReLU上的训练,以及在神经网络中使用Mish的一些基本步骤。


什么是Mesh?


直接看Mesh的代码会更容易。简单总结一下,Mish=x * tanh(ln(1 e^x (1e x))。


其他激活函数,ReLU为x=max(0,x),Swish为x * sigmoid(x)。


PyTorch的Mish实现:

img src="https://p5.toutiaoimg.com/origin/pgc-image/44affd219e634f02b0eb9b05b024265b?from=pc">

Mish的PyTorch实现

Tensorflow中的Mish函数:

Tensorflow:x = x *tf.math.tanh(F.softplus(x))

Mish和其他的激活函数相比怎么样?

下图显示了Mish与其他一些激活函数的测试结果。这是多达73个测试的结果,在不同的架构,不同的任务上:

Mish对比很多基准测试中的激活函数

为什么Mish表现这么好?

以上无边界(即正值可以达到任何高度)避免了由于封顶而导致的饱和。理论上对负值的轻微允许允许更好的梯度流,而不是像ReLU中那样的硬零边界。

最后,可能也是最重要的,目前的想法是,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。

尽管如此,我测试了许多激活函数,它们也满足了其中的许多想法,但大多数都无法执行。这里的主要区别可能是Mish函数在曲线上几乎所有点上的平滑度。

这种通过Mish激活曲线平滑性来推送信息的能力如下图所示,在本文的一个简单测试中,越来越多的层被添加到一个测试神经网络中,而没有一个统一的函数。随着层深的增加,ReLU精度迅速下降,其次是Swish。相比之下,Mish能更好地保持准确性,这可能是因为它能更好地传播信息:

更平滑的激活功能允许信息更深入地流动……注意,随着层数的增加,ReLU快速下降。

如何把Mish放到你自己的网络中?

Mish的PyTorch和FastAI的源代码可以在github的两个地方找到:

1、官方Mish github:https://github.com/digantam98/Mish

2、非官方的Mish使用inline提升速度:https://github.com/lessw2020/mish

3 、我们与Ranger和Mish (MXResNet的一部分)一起的FastAI的记录:https://github.com/lessw2020/Ranger-Mish-ImageWoof-5

复制mish.py到你的相关目录,并包含它,然后将你的网络激活函数指向它:

导入Mish函数,把激活函数设置为Mish

另外,FastAI用户可以使用修改后的XResNet加载和测试,使用Mish而不是ReLU。复制文件mxresnet.py到本地目录或路径:

接下来指定相关的ResNet大小(18、34、50、101、152),并加载体系结构(cnn_learner,等等)。下面是我如何加载mxresnet50,使用Ranger优化:

总结

ReLU有一些已知的弱点,但是通常它执行起来很轻,并且在计算上很轻。Mish具有较强的理论渊源,在测试中,就训练稳定性和准确性而言,Mish的平均性能优于ReLU。

复杂度只稍微增加了一点(V100 GPU和Mish,相对于ReLU,每epoch增加大约1秒),考虑到训练稳定性的提高和最终精度的提高,稍微增加一点时间似乎是值得的。

最终,在今年测试了大量新的激活函数后,Mish在这方面处于领先地位,我怀疑它很有可能成为AI未来的新ReLU。

英文原文:https://medium.com/@lessw/meet-mish-new-state-of-the-art-ai-activation-function-the-successor-to-relu-846a6d93471f


推荐阅读
author-avatar
vvdjiechipi48_2a247d
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有