【YOLO系列】 YOLOv4之Mish函数

一、简述

        一个新的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的梯度更平滑,有助于更好得信息传播,使网络能够更好地利用深度资源进行特征提取和分类。

【YOLO系列】 YOLOv4之Mish函数_第1张图片

二、什么是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能更好的保持准确性

【YOLO系列】 YOLOv4之Mish函数_第2张图片

四、总结

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

你可能感兴趣的:(目标检测,YOLO,python,Mish)