作者 | Miracle R
编译 | ronghuaiyang
转自 | AI公园
导读
对YOLOv4中的Mish激活函数进行解释和优缺点对比。
YOLO,是一种 one-shot 的目标检测技术,由Joseph Redmon和Ali Farhadi在2016年引入,目前已经有4个版本的技术。在这里,我们会来看看YOLOv4,特别是它的优化器,使用的两个bags的优化函数:在训练期间使用的“Bag of Freebies (BoF)”和在推理期间使用的“Bag of Specials (BoS)”。
Bag of Specials包含了用于YOLOv4架构的主干和检测器的低计算成本模块。这些是:
在这里,我们可以看到Mish激活函数同时存在于主干和检测器中。那么,是什么让它“special”呢?让我们进一步了解这个激活函数。
Mish是光滑的非单调激活函数,可定义为:
f(x) = x・tanh(ς(x))
其中, ς(x) = ln(1+e^x),是一个softmax激活函数和。
这与另一个被称为Swish函数的激活函数非常相似,可以定义为:
在YOLOv4中使用Mish函数的原因是它的低成本和它的平滑、非单调、上无界、有下界等特点,与其他常用函数如ReLU和Swish相比,提高了它的性能。
Mish的性能详细说明如下:
无上界有有界:无上界是任何激活函数都需要的特性,因为它避免了导致训练速度急剧下降的梯度饱和。因此,加快训练过程。无下界属性有助于实现强正则化效果(适当的拟合模型)。(Mish的这个性质类似于ReLU和Swish的性质,其范围是[≈0.31,∞))。
非单调函数:这种性质有助于保持小的负值,从而稳定网络梯度流。大多数常用的激活函数,如ReLU [f(x) = max(0, x)], Leaky ReLU [f(x) = max(0, x), 1],由于其差分为0,不能保持负值,因此大多数神经元没有得到更新。
无穷阶连续性和光滑性:Mish是光滑函数,具有较好的泛化能力和结果的有效优化能力,可以提高结果的质量。在图中,可以看到ReLU和Mish之间的一个随机初始化的神经网络在宏观平滑度上的剧烈变化。然而,在Swish和Mish的情况下,宏观上或多或少还是相似的。
计算量较大,但是效果更好:与ReLU相比,它的计算比较贵,但在深度神经网络中显示了比ReLU更好的结果。
![](Mish Activation Function In YOLOv4.assets/0_PJVEahgbKstqbgAd.png)
自门控:此属性受到Swish函数的启发,其中标量输入被提供给gate。它优于像ReLU这样的点式激活函数,后者只接受单个标量输入,而不需要更改网络参数。
使用PyTorch可以在python中实现Mish函数,如下所示:
![0_93iwe6BzbP6VRSAj](Mish Activation Function In YOLOv4.assets/0_93iwe6BzbP6VRSAj.png)import torch import torch.nn as nn import torch.nn.functional as Fclass Mish(nn.Module): def __init__(self): super().__init__() def forward(self, x): return x*(torch.tanh(F.softplus(x)))在诸如CIFAR-10, CIFAR-100, CalTech-256, ASL等具有挑战性的数据集的70多个不同的问题标准中,Mish函数的表现超过了广泛使用的激活函数,如ReLU和Swish。下图显示了Mish、Swish和ReLU在不同模型的CIFAR-10数据集上的性能,从图中可以很容易地推断,Mish比Swish函数的性能大约高0.494%,ReLU比Swish函数的性能高1.671%,因此是三者中最准确的:
在YOLOv4中,使用了Mish函数+ CSPDarknet53的组合,尽管代价有点高,但它极大地提高了检测的准确性,因此使Mish成为**“Specials”**之一。
感谢你的分享,点赞,在看三连↓