一些常用的激活函数及绘图

深度网络的一些常用激活函数,并通过matplot绘制出来:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np


def relu(x):
    return np.maximum(0, x)


def leaky_relu(x, alpha=0.01):
    return np.where(x > 0, x, alpha * x)


def gelu(x):
    return 0.5 * x * (1 + np.tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * x ** 3)))


def swish(x):
    return x / (1 + np.exp(-x))


def sigmoid(x):
    return 1 / (1 + np.exp(-x))


def sigmoid_diff(x):
    return np.exp(-x) / ((1 + np.exp(-x)) ** 2)


def plot_func():
    x = np.linspace(-10, 10, 500)

    plt.figure(figsize=(6, 4))
    plt.plot(x, gelu(x), label='gelu')
    plt.plot(x, relu(x), label='relu')
    plt.plot(x, leaky_relu(x), label='leaky_relu', linestyle='--')

    plt.plot(x, sigmoid(x), label='sigmoid')
    plt.plot(x, swish(x), label='swish')
    plt.plot(x, sigmoid_diff(x), label='sigmoid_diff')

    plt.plot(x, np.tanh(x), label='tanh', linestyle='--')
    plt.axhline(0, color='k', linewidth=0.5)
    plt.axvline(0, color='k', linewidth=0.5)
    plt.title('all trigger functions')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.grid(True)
    plt.legend()
    plt.show()


plot_func()

sigmoid和tanh的缺点是梯度饱和(梯度易消失)。relu则改进了这一点(正半区梯度为1),且很容易计算。leaky_relu和gelu则解决了relu负半区梯度消失的问题,它俩在负半区仍有微小梯度,确保训练可进行下去。gelu还解决了relu函数在原点处的硬转折,使得梯度更平滑,避免震荡,训练更稳定。

相关推荐
陈天伟教授1 天前
人工智能应用- 语言理解:07.大语言模型
人工智能·深度学习·语言模型
花月mmc1 天前
CanMV K230 波形识别——整体部署(4)
人工智能·python·嵌入式硬件·深度学习·信号处理
小徐xxx1 天前
Softmax回归(分类问题)学习记录
深度学习·分类·回归·softmax·学习记录
Rorsion1 天前
机器学习过程(从机器学习到深度学习)
人工智能·深度学习·机器学习
咚咚王者1 天前
人工智能之核心技术 深度学习 第十章 模型部署基础
人工智能·深度学习
ydl11281 天前
深度学习优化器详解:指数加权平均EWA、动量梯度下降Momentum、均方根传递RMSprop、Adam 从原理到实操
人工智能·深度学习
学电子她就能回来吗1 天前
深度学习速成:完整的模型验证(测试,demo)套路
人工智能·深度学习
CelestialYuxin1 天前
【微论文】机器人第一性原理:技术演进的本构逻辑与实现路径
深度学习·机器人·硬件架构
阿杰学AI1 天前
AI核心知识86——大语言模型之 Superalignment(简洁且通俗易懂版)
人工智能·深度学习·ai·语言模型·超级对齐·superalignment·#ai安全
阿杰学AI1 天前
AI核心知识85——大语言模型之 RLAIF(简洁且通俗易懂版)
人工智能·深度学习·ai·语言模型·aigc·rlaihf·基于ai反馈的强化学习