郭震 AI公众号:郭震AI

6 激活函数

发布日期:

最近更新:

分类: 深度学习小白

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点5 个
图文要点6 张
正文规模1.7k 字
激活函数结构图查看大图
激活函数结构图

如果没有激活函数,多层线性变换仍然等价于一个线性模型。激活函数让网络能表达更复杂的关系,也会影响训练速度和稳定性。

激活函数带来非线性核对图查看大图
激活函数带来非线性核对图

对二分类、多分类和隐藏层分别想一想常用什么激活函数。能把场景和函数对应起来,就不只是背名词。

在前一篇中,我们讨论了神经网络的结构,理解了神经元的基本组成以及如何连接形成网络。在这一篇中,我们将深入探讨神经网络中的关键组成部分之一——激活函数。激活函数在神经网络中起着至关重要的作用,它决定了神经元的输出,从而影响整个网络的性能。

什么是激活函数?

激活函数是一种非线性函数,应用于每个神经元的输出,以决定最终的激活值。通过引入非线性,激活函数允许网络捕捉更复杂的数据特征,进而提高模型的表达能力。如果没有激活函数,整个神经网络就等同于一层线性变换,无法解决复杂的问题。

激活函数判断卡查看大图
激活函数判断卡

学习激活函数时,先看它如何改变输出范围、梯度传递和非线性表达。没有激活函数,多层网络能力会很受限。

激活函数的类型

激活函数有多种形式,下面介绍一些常用的激活函数及其特点。

1. Sigmoid 激活函数

Sigmoid 函数的数学表达式为:

f(x)=11+exf(x) = \frac{1}{1 + e^{-x}}
  • 特点
    • 输出值范围在 (0, 1) 之间。
    • 可用于二分类任务的输出层。
  • 缺点
    • 在极值区间(接近 0 或 1 时)梯度趋近于 0,容易出现“梯度消失”问题。

2. ReLU(修正线性单元)

ReLU 的数学表达式为:

f(x)=max(0,x)f(x) = \max(0, x)
  • 特点
    • 输出值范围为 [0, +∞)。
    • 计算简单且收敛速度快,当前在卷积神经网络中广泛应用。
  • 缺点
    • 输入值小于 0 时,输出恒为 0,可能导致“死亡神经元”现象。
  • 3. Leaky ReLU

    Leaky ReLU 在 ReLU 的基础上引入了一个小的斜率以解决“死亡神经元”问题,其数学表达式为:

    f(x)={xif x>0αxotherwisef(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{otherwise} \end{cases}

    其中 α\alpha 是一个小于 1 的常数。

    4. Softmax 函数

    Softmax 函数通常用于多分类任务的输出层。其数学表达式为:

    f(xi)=exij=1Kexjf(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{K} e^{x_j}}
    • 特点
      • 将输出值转化为概率分布,总和为 1。
      • 在多分类问题中表现良好。

    激活函数的选择

    选择合适的激活函数对于网络性能至关重要。尽量避免在隐藏层中使用 Sigmoid 函数,推荐使用 ReLU 或 Leaky ReLU。对于输出层,选择激活函数取决于具体任务:

    深度学习阅读地图卡查看大图
    深度学习阅读地图卡

    读完《激活函数》后,可以回头问三件事:它解决什么问题,哪一步最容易出错,自己能否拿一个小例子跑通。

    • 二分类问题:Sigmoid
    • 多分类问题:Softmax
    • 回归问题:线性激活函数(即不使用激活函数)

    实际案例

    下面是一个简单的 Python 示例,展示如何使用 TensorFlow 构建一个包含 ReLU 激活函数的神经网络。

    import tensorflow as tf
    from tensorflow.keras import layers, models
    
    # 构建模型
    model = models.Sequential()
    model.add(layers.Dense(64, activation='relu', input_shape=(input_shape,)))  # 输入层,使用 ReLU 激活
    model.add(layers.Dense(64, activation='relu'))  # 隐藏层
    model.add(layers.Dense(1, activation='sigmoid'))  # 输出层,二分类任务
    
    # 编译模型
    model.compile(optimizer='adam',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])
    
    # 训练模型
    model.fit(x_train, y_train, epochs=10, batch_size=32)
    

    在这个示例中,我们创建了一个包含两个隐藏层和一个输出层的简单神经网络,其中所有隐藏层使用 ReLU 激活函数,而输出层使用 Sigmoid 激活函数。

    激活函数应用复盘卡查看大图
    激活函数应用复盘卡

    学完《激活函数》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。

    激活函数应用检查卡查看大图
    激活函数应用检查卡

    如果想把《激活函数》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。

    总结

    在本篇中,我们深入探讨了 激活函数 的概念、常用类型及其特点。合理选择激活函数是提升深度学习模型表现的关键之一。在下一篇中,我们将继续探讨深度学习的工作原理,具体分析前向传播与反向传播的过程。

    希望本教程能为你在深度学习的探索中提供帮助。如果对激活函数有其他疑问,欢迎在评论区与我交流!

    相关教程

    相关入口

    AI 教程总索引

    分享文章

    转发到常用平台

    微信/朋友圈可先复制链接

    相关教程

    AI 教程总索引

    相关内容

    相关 AI 教程

    返回栏目

    Reader Messages

    读者留言

    有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

    最多 800 字

    为了防刷,每条留言会做长度、链接数量和提交频率限制。

    0/800

    留言列表

    0
    正在加载留言...