绘制常见的激活函数

694 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

前言

在卷积神经网络中,其基本结构由:卷积层 + 激活函数 + 池化层 这三层组成,我在这里就不讲解卷积层和池化层,通过绘制各自激活函数图像查看各种激活函数的特征。

Sigmoid

最为常见的激活函数要数Sigmoid函数了,其基本公式如下可见,例图如下:

def Sigmoid(x):
    y = np.exp(x) / (np.exp(x) + 1)
    return y

Figure_1.png

Tanh

Tanh函数计算公式如下,例图如下。

def Tanh(x):
    y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
    # y = np.tanh(x)
    return y

Figure_1.png

ReLU

函数计算公式如下,例图如下。

def ReLU(x):
    y = np.where(x < 0, 0, x)
    return y

Figure_1.png

LeakyReLU

函数计算公式如下,例图如下。

def LeakyReLU(x, a):
    # LeakyReLU的a参数不可训练,人为指定。
    y = np.where(x < 0, a * x, x)
    return y

Figure_1.png

PReLU

函数计算公式如下,例图如下。

def PReLU(x, a):
    # PReLU的a参数可训练
    y = np.where(x < 0, a * x, x)
    return y

Figure_1.png

ReLU6

函数计算公式如下,例图如下。

def ReLU6(x):
    y = np.minimum(np.maximum(x, 0), 6)
    return y

Figure_1.png

Swish

函数计算公式如下,例图如下。

def Swish(x, b):
    y = x * (np.exp(b * x) / (np.exp(b * x) + 1))
    return y

Figure_1.png

Mish

函数计算公式如下,例图如下。

def Mish(x):
    # 这里的Mish已经经过e和ln的约运算
    temp = 1 + np.exp(x)
    y = x * ((temp * temp - 1) / (temp * temp + 1))
    return y

Figure_1.png

Grad_Swish 和Grad_Mish

函数计算公式如下,例图如下。

def Grad_Swish(x, b):
    y_grad = np.exp(b * x) / (1 + np.exp(b * x)) + x * (b * np.exp(b * x) / ((1 + np.exp(b * x)) * (1 + np.exp(b * x))))
    return y_grad

def Grad_Mish(x):
    temp = 1 + np.exp(x)
    y_grad = (temp * temp - 1) / (temp * temp + 1) + x * (4 * temp * (temp - 1)) / (
                (temp * temp + 1) * (temp * temp + 1))
    return y_grad

Figure_1.png