Mish:一个新的SOTA激活函数,ReLU的继任者

CVer 昨天
 

以下文章来源于AI公园 ,作者ronghuaiyang

AI公园

专注分享干货的AI公众号,图像处理,NLP,深度学习,机器学习,应有尽有。希望大家能在AI的乐园中快乐玩耍。

点击上方“CVer”,选择加"星标"或“置顶”

重磅干货,第一时间送达

本文转载自:AI公园

作者:Less Wright

编译:ronghuaiyang

导读

对激活函数的研究一直没有停止过,ReLU还是统治着深度学习的激活函数,不过,这种情况有可能会被Mish改变。

Diganta Misra的一篇题为“Mish: A Self Regularized Non-Monotonic Neural Activation Function”的新论文介绍了一个新的深度学习激活函数,该函数在最终准确度上比Swish(+.494%)和ReLU(+ 1.671%)都有提高。

我们的小型FastAI团队使用Mish代替ReLU,打破了之前在FastAI全球排行榜上准确性得分记录的一部分。结合Ranger优化器,Mish激活,Flat + Cosine 退火和自注意力层,我们能够获得12个新的排行榜记录!

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

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

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

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

ReLU和Mish的对比,Mish的梯度更平滑

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

我发现Mish在训练稳定性、平均准确率(1-2.8%)、峰值准确率(1.2% - 3.6%)等方面都有了全面的提高,与本文的结果相匹配或超过。

下面是Ranger Optimizer + Mish与FastAI排行榜相比:

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

FastAI排行榜为5和20个epochs,ImageWoof数据集(难)。

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

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

Mish的性质

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

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

什么是Mesh?

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

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

PyTorch的Mish实现:

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。

Mish:一个新的SOTA激活函数,ReLU的继任者的更多相关文章

  1. linux内核分析作业6:分析Linux内核创建一个新进程的过程

    task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  u ...

  2. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

  3. Step by step 如何创建一个新森林

    原创地址:http://www.cnblogs.com/jfzhu/p/4006118.html 转载请注明出处 创建一个新森林就是在一台计算机上安装AD DS,并将这台计算机提升为域控制器. 演示环 ...

  4. 【Cocos2d-x for WP8 学习整理】(1)创建一个新项目

    喜大普奔                         10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2 ...

  5. ZeroMQ接口函数之 :zmq_ctx_new – 创建一个新的ZMQ 环境上下文

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_new zmq_ctx_new(3)               ØMQ Manual - ØMQ/3.2 ...

  6. ZeroMQ接口函数之 :zmq_curve_keypair - 生成一个新的CURVE 密钥对

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve_keypair zmq_curve_keypair(3) ØMQ Manual - ØMQ/4.1.0 ...

  7. 【转】一个新的UIButtonMessage 给NGUI,使用委托,自动选择Receiver提供的方法

    http://blog.csdn.net/chiuan/article/details/9290651?utm_source=tuicool&utm_medium=referral 来分享一个 ...

  8. Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法

    VirtualBox新建虚拟机时报错,不能为虚拟机打开一个新任务的原因 解决办法如下 1.保证bios里的virtualization technology的选项开启,不同电脑BIOS设置可能会不一样 ...

  9. Linux内核创建一个新进程

    张雨梅   原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 创建新进程 如果同一个程序被多 ...

随机推荐

  1. Mac之Sublime Text使用Go

    安装Golang build 包 点击 Preferences > Package control 菜单(MAC快捷键 shift + command + p) 在弹出的输入框输入 instal ...

  2. Java 面向对象(十三)

    异常 什么是异常 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象. ...

  3. 灵活使用ssh、dsh和pssh高效管理大量计算机

    http://os.iyunv.com/art/201012/240113.htm 灵活使用ssh.dsh和pssh高效管理大量计算机 http://os.iyunv.com2010-12-23 09 ...

  4. 调用百度地图API的总结

    因为项目要用到百度地图,所以先摸索了一下,各种功能官方都有文档,点击可查看,文章的话我就直接写我用到的功能例子了,要用可以直接复制粘贴~ 一.主要涉及到的几个接口(先申请密钥): 1.技术一:坐标转换 ...

  5. osg MatrixManipulator CameraManipulator

    <osgGA/MatrixManipulator>:No such file or directory 修改为 #include <osgGA/CameraManipulator&g ...

  6. 28 Flutter 轮播图 flutter_swiper

    中文地址: https://github.com/best-flutter/flutter_swiper/blob/master/README-ZH.md 基本参数 参数 默认值 描述 scrollD ...

  7. 123457123456#0#-----com.threeapp.magicImageShow01----儿童宝宝魔法画笔

    com.threeapp.magicImageShow01----儿童宝宝魔法画笔

  8. UI界面测试

    概念:指测试用户界面的风格是否满足用户要求.文字是否正确.页面是否美观.文字与图片组合是否完美.操作是否友好等. 1.窗体测试 { 窗体大小. 移动窗体. 缩放窗体. 显示分辨率. 状态栏. 工具栏. ...

  9. 【ARM-Linux开发】Wi-Fi 应用工具wpa_supplicant

    wpa_supplicant是一个跨平台的无线安全管理软件,这里需要用它来对无线网络进行配置,wpa_supplicant相关工具已经移植好,包含在我们提供的文件系统中. 配置无线网络 wpa_sup ...

  10. 【miscellaneous】GStreamer下的音视频播放

    Gst-launch命令: gst-launch filesrc location=*.* ! demux name=demux demux.video_00 ! queue ! decoder ! ...