【YOLO系列】 YOLOv4之Mish函数

发布时间:2024年01月09日

一、简述

????????一个新的state of the art的激活函数,ReLU的继任者。

????????Diganta Misra在 “Mish: A Self Regularized Non-Monotonic Neural Activation Function”论文中介绍了Mish这个新的深度学习激活函数,指出该函数在准确度上比Swish(+0.494%)和ReLU(+1.671%)。

????????ReLU与Mish相比,Mish的梯度更平滑,有助于更好得信息传播,使网络能够更好地利用深度资源进行特征提取和分类。

二、什么是Mish?

? ? ? ? 1、公式

????????????????????????????????????????Mish=x*tanh(ln(1+e^{^{x}}))

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

????????2、?代码实现

import torch

import torch.nn.functional as F

class Mish(torch.nn.Module):

    def init(self):

        super().init()

    def forward(self, x):

        return x * torch.tanh(F.softplus(x))

????????要使用这个Mish模块,可以将其添加到神经网络模型中,并在训练和推理过程中使用它作为激活函数。例如:

import torch.nn as nn

class MyModel(nn.Module):

    def init(self):

        super().init()

        self.fc = nn.Linear(10, 10)

        self.mish = Mish()

    def forward(self, x):

        x = self.fc(x)

        x = self.mish(x)
    
        return x

三、为什么Mish表现这么好?

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

? ? ? ? 2、Mish函数在不同区间上可能单调递增或递减,有助于增加模型的非线性表达能力。

? ? ? ? 3、随着层深的增加,ReLu精度迅速下降,其次是Swish,相比之下,Mish能更好的保持准确性

四、总结

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

文章来源:https://blog.csdn.net/m0_46489757/article/details/135485101
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。