Mish激活函数及Pytorch实现

论文题目:Mish: A Self Regularized Non-Monotonic Neural Activation Function

论文: https://arxiv.org/pdf/1908.08681.pdf

该论文介绍了一个新的深度学习激活函数,该函数在最终准确度上比Swish(+0.494%)和ReLU(+1.671%)都有提高。

Mish已经在70多个基准上进行了测试,包括图像分类,分割和生成,并与其他15个激活函数进行了比较。

Mish激活函数及Pytorch实现_第1张图片

ReLU和Mish的对比,Mish的梯度更平滑

Mish激活函数及Pytorch实现_第2张图片    Mish激活函数及Pytorch实现_第3张图片

Mish是一个光滑非单调的激活函数,定义为

f(x)=x\cdot tanh(\zeta (x)),\\ \zeta (x)=ln(1+e^x)

Mish函数取值范围为[-0.31,\infty ),其导数为(图如上面所示):

Mish激活函数及Pytorch实现_第4张图片

在x=-1.19时,函数取最小值。函数是由Swish函数受启发而来。

在tensorflow中,可以写为

f(x)=x*tf.math.tanh(tf.softplus(x))

在pytorh 中,可以写为

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()

 

你可能感兴趣的:(Mish激活函数及Pytorch实现)