y = x*tanh(ln(1+exp(x)))
实验中,随着层深的增加,ReLU激活函数精度迅速下降,而Mish激活函数在训练稳定性、平均准确率(1-2.8%)、峰值准确率(1.2% - 3.6%)等方面都有全面的提高。
从图中可以看出,Mish是一个平滑的曲线,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化;在负值的时候并不是完全截断,允许比较小的负梯度流入。
Code:
# -*- coding: utf-8 -*-
import torch
import torch.nn as nn
import torch.nn.functional as F
from matplotlib import pyplot as plt
class Mish(nn.Module):
def __init__(self):
super().__init__()
print("Mish activation loaded...")
def forward(self, x):
x = x * (torch.tanh(F.softplus(x)))
return x
mish = Mish()
x = torch.linspace(-10, 10, 1000)
y = mish(x)
plt.plot(x, y)
plt.grid()
plt.show()