一、简述
一个新的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、公式
其他的激活函数,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。