Mish-撼动深度学习ReLU激活函数的新继任者
对激活函数的研究一直没有停止过,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个激活函数进行了比较。
什么是Mesh
直接看Mesh的代码会更简单一点,简单总结一下,Mish=x * tanh(ln(1+e^x))。
其他的激活函数,ReLU是x = max(0,x),Swish是x * sigmoid(x)。
PyTorch的Mish实现:
Tensorflow中的Mish函数:
Tensorflow:x = x *tf.math.tanh(F.softplus(x))
Mish和其他的激活函数相比怎么样?
下图显示了Mish与其他一些激活函数的测试结果。这是多达73个测试的结果,在不同的架构,不同的任务上:
为什么Mish表现这么好?
以上无边界(即正值可以达到任何高度)避免了由于封顶而导致的饱和。理论上对负值的轻微允许允许更好的梯度流,而不是像ReLU中那样的硬零边界。
最后,可能也是最重要的,目前的想法是,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。
尽管如此,我测试了许多激活函数,它们也满足了其中的许多想法,但大多数都无法执行。这里的主要区别可能是Mish函数在曲线上几乎所有点上的平滑度。
这种通过Mish激活曲线平滑性来推送信息的能力如下图所示,在本文的一个简单测试中,越来越多的层被添加到一个测试神经网络中,而没有一个统一的函数。随着层深的增加,ReLU精度迅速下降,其次是Swish。相比之下,Mish能更好地保持准确性,这可能是因为它能更好地传播信息:
更平滑的激活功能允许信息更深入地流动……注意,随着层数的增加,ReLU快速下降。
如何把Mish放到你自己的网络中?
Mish的PyTorch和FastAI的源代码可以在github的两个地方找到:
1、官方Mish github:https://github.com/digantamisra98/Mish
2、非官方的Mish使用inline提升速度:https://github.com/lessw2020/mish
总结
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
Mish-撼动深度学习ReLU激活函数的新继任者相关推荐
- 深度学习ReLU激活函数
ReLU激活函数 在深度学习中,有修正线性单元(Rectified linear unit,ReLU)的激活函数 x轴是时间,y轴是放电速度 神经元的工作方式: 1.稀疏性 2.分布性 我们开始介绍R ...
- 深度学习之激活函数小结
深度学习之激活函数小结 激活函数的作用和意义:引入非线性,增加网络表达能力: 基本激活函数介绍 首先看一下一些常见的激活函数: Sigmoid: 总结:第一个出现的激活函数,存在以下问题,所以后面基本 ...
- 【深度学习】激活函数:原理+常见激活函数(Sigmoid\Tanh\ReLU\Leaky ReLU\Softmax)
首先需要知道为什么要引入激活函数:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够.引入非线性激活函数,可使深层神经网络的表达能力更加强大. 在深度学习中,线性模型只需要简单的全连接层就能实 ...
- 独家 | 深度学习基础——激活函数以及什么时候使用它们?(附代码)
作者:Dishashree Gupta 翻译:王紫岳 校对:王琦 本文约5200字,建议阅读20分钟 本文简要介绍了作者在初次进行机器学习的操作时所遇到的情况与得到的教训. 摘要 激活函数是神经网络的 ...
- 深度学习基础——激活函数以及什么时候使用它们?
作者:Dishashree Gupta 翻译:王紫岳 校对:王琦 本文约5200字,建议阅读20分钟 本文简要介绍了作者在初次进行机器学习的操作时所遇到的情况与得到的教训. 摘要 激活函数是神经网络的 ...
- sigmoid函数_深度学习中激活函数总结
一.前言 前段时间通过引入新的激活函数Dice,带来了指标的提升,借着这个机会,今天总结下常用的一些激活函数. 激活函数在深度学习中起着非常重要的作用,本文主要介绍下常用的激活函数及其优缺点.主要分为 ...
- 深度学习中激活函数的作用
0.从深度学习开始说起 今天检索多标签分本分类的文献时,遇到一个关于激活函数的疑惑: 如果有大牛看到,知道如何更好的理解这句话的含义,希望在评论里解惑! 由惑而生,所以我打算总结一下深度学习模型中常用 ...
- 趣谈深度学习核心----激活函数
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 当你在苦扒图像处理方法得时候 他在用深度学习 当你在干瞪切片像素得 ...
- 【深度学习】激活函数和损失函数
4.3 激活函数 作用: 当神经网络中上一层的输出直接作为下一层的输入时,每层之间的关系是线性关系,即相当于f(x)=x,此时神经网络的拟合能力较弱.为了使得神经网络有更好的拟合能力,在每一层网络之间 ...
最新文章
- 还记得那场关于“分布式锁”的经典论战吗?
- docker部署Javaweb环境数据库连接问题
- python编程有用吗-python儿童编程有必要学吗
- 【计算机网络】网络层 : IPv4 地址 ( IP 地址分类 | 特殊 IP 地址 | 私有 IP 地址 | A 类、B 类、C 类 IP 地址网络号主机号数量 )★
- eviews如何处理缺失数据填补_python数据预处理之异常值、缺失值处理方法
- c判断char数组是否为空_你学过数组,那你知道柔性数组吗?
- c语言int类型乘法溢出_【原创】C语言指针自我总结
- servelt笔记一
- 211学校计算机报考人数信息,速查!这些985 211学校已发布考研调剂信息
- 电脑录音软件的技术原理
- 《机器学习与计算力学的结合及应用初探 》论文学习
- 二极管双平衡混频器的原理[ZT]
- qq物联网 android sdk,qcloud-iot-sdk-android
- 中职计算机应用专业核心素养的,基于核心素养的中职计算机应用专业“课程革命”...
- UE4C++设置Actor与父Actor的相对位置和相对旋转
- 关于浏览器访问servlet404异常
- 【文本生成】评价指标:事实一致性Evaluating the Factual Consistency of Abstractive Text Summarization
- Redis设置有效时间
- 【营销获客一】消费金融大数据营销获客
- 【python入门第三十三天】特殊成员和魔法方法