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

深度网络的一些常用激活函数,并通过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函数在原点处的硬转折,使得梯度更平滑,避免震荡,训练更稳定。

相关推荐
renhongxia11 小时前
世界模型作为AGI落地底层底座的作用
人工智能·深度学习·生成对抗网络·自然语言处理·知识图谱·agi
计算机科研狗@OUC1 小时前
(cvpr26) AIMDepth: Asymmetric Image-Event Mamba for Monocular Depth Estimation
人工智能·深度学习·计算机视觉
β添砖java4 小时前
深度学习(22)网络中的网络NiN
人工智能·深度学习
Kobebryant-Manba4 小时前
深度学习时候d2l报错和使用问题
人工智能·深度学习
zhangfeng11335 小时前
deepspeed zero3 结合 llamafactory 微调 ,save_only_model: true 导致保存时候出错
开发语言·python·深度学习
大模型最新论文速读5 小时前
06-16 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理
宝贝儿好6 小时前
【LLM】第二章:HuggingFace入门学习
人工智能·深度学习·神经网络·学习·算法·自然语言处理
Black蜡笔小新7 小时前
企业私有化AI训练推理一体工作站DLTM深度学习推理工作站全流程技术解析
人工智能·深度学习
Kobebryant-Manba7 小时前
学习门控循环单元gru
深度学习·学习·gru
YOLO数据集集合7 小时前
无人机航拍地质灾害智能识别 山体滑坡实例分割数据集落地实战 | 泥石流监测 道路险情封堵 深度学习模型训练方案10296期
人工智能·深度学习·yolo·目标检测·无人机