登录/注册

神经网络选择函数的技巧

更多

选择神经网络中的激活函数(Activation Function)是模型设计的关键环节,直接影响学习能力和训练效率。以下是实用的技巧和考量因素:

一、 核心原则

  1. 引入非线性: 核心目的是让神经网络能够逼近任意复杂函数。没有非线性激活函数(或只用线性函数),无论多少层网络都等价于单个线性变换(感知机)。
  2. 缓解梯度消失/爆炸: 良好的激活函数应有助于在网络反向传播时保持稳定的梯度流,特别是深层网络。
  3. 计算效率: 激活函数及其导数的计算应相对高效,因为它们在训练和推理中会被频繁调用。
  4. 稀疏性(可选但有益): 某些激活函数(如ReLU)能产生稀疏激活(部分神经元输出为0),可能有助于特征选择和降低过拟合风险,提升泛化能力。

? 二、 常用激活函数选择策略

1. 隐藏层 (Hidden Layers) - 首选现代非线性函数

*   **ReLU (Rectified Linear Unit):**
    *   **公式:** `f(x) = max(0, x)`
    *   **优点:**
        *   **计算极其高效:** 只需比较和取最大值。
        *   **有效缓解梯度消失:** 在正区间导数为1,梯度能稳定传递。
        *   **产生稀疏性:** 负输入输出为0。
    *   **缺点:**
        *   **"Dying ReLU"问题:** 如果大量输入持续为负(如学习率过高、权重初始化不当或数据分布问题),这些神经元会永久输出0且停止更新(梯度为0)。
        *   **输出不以0为中心:** 可能略微影响收敛速度(但实践中影响通常不大)。
    *   **技巧:** **这是绝大多数情况下隐藏层的默认首选起点。** 效果通常很好。
*   **Leaky ReLU / Parametric ReLU (PReLU):**
    *   **公式:** `f(x) = max(αx, x)` (Leaky ReLU: α是小的固定值,如0.01; PReLU: α是可学习参数)
    *   **优点:** 解决了标准的"Dying ReLU"问题,负区间有非零梯度(αx),神经元不易"死亡"。
    *   **缺点:** 引入了一个额外的超参数α(Leaky需设定,PReLU需学习)。
    *   **技巧:** 如果使用ReLU遇到训练困难(如大量神经元不更新),优先尝试 **Leaky ReLU (α=0.01)** 或 **PReLU**。效果往往比ReLU稍好或持平。
*   **Exponential Linear Unit (ELU):**
    *   **公式:** `f(x) = x if x >= 0; α(exp(x) - 1) if x < 0` (α通常是1或接近1的值)
    *   **优点:**
        *   解决了"Dying ReLU"问题。
        *   输出均值更接近0(有偏置效应),可能加速收敛。
        *   在负区间平滑过渡。
    *   **缺点:** 计算量比ReLU大(涉及指数运算)。
    *   **技巧:** 在需要更高精度或对噪声敏感的任务中,**ELU** 是ReLU/Leaky ReLU的有力竞争者。
*   **Swish:**
    *   **公式:** `f(x) = x * sigmoid(βx)` (β可以是常数(如1.0)或可学习参数)
    *   **优点:**
        *   实验证明在深层网络上(尤其是图像分类)有时优于ReLU。
        *   平滑、非单调(在负区间先下降后上升),在某些情况下拟合能力更强。
        *   导数形式更复杂,但数值稳定性好。
    *   **缺点:** 计算量比ReLU大(涉及sigmoid)。
    *   **技巧:** 作为ReLU类函数的进阶选择,**当追求更高性能时可尝试调参使用Swish**。
*   **GELU (Gaussian Error Linear Unit):**
    *   **公式:** `f(x) = x * Φ(x)` (Φ(x)是标准高斯分布的累积分布函数。常用近似:`x * 0.5 * (1 + tanh[√(2/π) * (x + 0.044715 * x³)])`)
    *   **优点:** 在大型模型(尤其是Transformer架构如BERT, GPT)中表现出色,被认为具有概率解释(神经元的输出取决于其输入高于其他输入的"概率")。
    *   **缺点:** 计算量更大(即使使用近似公式)。
    *   **技巧:** **在基于Transformer的模型中(NLP为主),GELU通常是首选或默认。**

❌ 避免在隐藏层使用(或谨慎使用)

? 2. 输出层 (Output Layer) - 取决于任务类型

*   **二分类任务 (Binary Classification):**
    *   **首选 Sigmoid:** 输出直接映射到 `(0, 1)` 区间,可解释为属于正类的概率。
*   **多分类任务 (Multi-class Classification):**
    *   **首选 Softmax:** 将所有输出神经元的值归一化为概率分布(和为1),明确表现出类别的互斥性。
*   **多标签分类任务 (Multi-label Classification):**
    *   **首选 Sigmoid (每个输出神经元一个):** 每个标签独立判断其是否存在(概率),标签之间不互斥。
*   **回归任务 (Regression):**
    *   **无激活函数 (Linear / Identity):** `f(x) = x`。输出可以是任意实数。
    *   **ReLU:** 如果已知目标值总是非负(如房价、长度、像素强度)。
    *   **Softplus (近似平滑的ReLU):** `f(x) = ln(1 + exp(x))`。强制输出为正且平滑,但计算量稍大。有时用于约束输出为正的回归。
    *   **Sigmoid/Tanh:** 如果目标值需要被压缩到特定范围(如`(0, 1)`或`(-1, 1)`)。需注意饱和问题。

? 三、 选择技巧与最佳实践

  1. 从 ReLU 开始: 对于大多数新的前馈网络(MLP, CNN),隐藏层优先尝试 ReLU。它简单、高效、效果通常不错。
  2. 遇到问题再换: 如果训练不稳定、收敛慢、大量神经元死亡,优先尝试 Leaky ReLU 或 ELU。它们在解决ReLU缺陷的同时保持了良好的性能。
  3. 输出层严格按任务选: 输出层的选择主要由任务性质决定(概率分布、范围限制)。不要轻易在输出层使用隐藏层常用的ReLU等函数(Softmax/Sigmoid/Linear除外)
  4. 考虑深层网络特性:
    • 在极深的网络中(如ResNet, Transformer),梯度流动是关键。ReLU及其变体(Leaky, PReLU, ELU)、Swish、GELU是主流。
    • 残差连接(Skip Connections) 本身极大地缓解了梯度消失,使得ReLU族在这些架构中也能很好地工作。Transformer常用GELU/Swish。
  5. 权重初始化匹配激活函数:
    • ReLU/PReLU/Leaky ReLU: 使用 He初始化 (Kaiming初始化) - 方差缩放因子为 2 / fan_in
    • Sigmoid/Tanh: 使用 Xavier/Glorot初始化 - 方差缩放因子为 1 / fan_in2 / (fan_in + fan_out)
    • ELU/Swish/GELU: 通常也可以用He初始化或专门的初始化策略(如Transformer中GELU常配特定初始化)。查阅相关论文/框架实践。
  6. 监控激活状态: 在训练过程中或训练后,观察各层神经元激活值的分布和稀疏性。如果发现大量神经元长期输出为0(Dying ReLU),考虑换用Leaky ReLU/ELU或调整学习率/初始化。
  7. 实验验证是关键: 没有绝对最优的激活函数。在基线模型上尝试不同的激活函数组合(尤其是隐藏层)是提升模型性能的标准流程之一。 在小数据集或子集上进行快速实验来筛选。
  8. 关注框架默认选项: PyTorch的Linear/Conv层默认使用ReLU(需要手动指定时才换)。TensorFlow各层激活函数参数默认通常是None(线性)。了解你所用框架的默认行为。

? 总结

遵循这些技巧,你可以更有方向性地为你的神经网络选择更合适的激活函数,从而提高模型的性能和训练效率。??

NMSIS神经网络库使用介绍

:   神经网络卷积函数   神经网络激活函数   全连接层

2025-10-29 06:08:21

bp神经网络和卷积神经网络区别是什么

结构、原理、应用场景等方面都存在一定的差异。以下是对这两种神经网络的比较: 基本结构 BP神经网络是一种多层前馈神经网络,由输入层、隐藏层和输出

2024-07-03 10:12:47

BP神经网络激活函数怎么选择

中,激活函数起着至关重要的作用,它决定了神经元的输出方式,进而影响整个网络的性能。 一、激活

2024-07-03 10:02:01

人工神经网络的原理及仿真实例

人工神经网络(Artificial Neural Network, ANN),亦称为神经网络(Neural Networks, NN),是由大量处理单元(神经

资料下载 ah此生不换 2022-04-11 11:28:35

BP神经网络的研究进展

通过对传统BP神经网络缺点的分析,从参数选取、BP算法、激活函数、网络结构4个方面综述了其改进方法。介绍了各种方法的原理、应用背景及其在BP

资料下载 姚小熊27 2021-06-01 11:28:43

人工神经网络控制

神经网络控制,即基于神经网络控制或简称神经控制,是指在控制系统中采用神经网络

资料下载 姚小熊27 2021-05-27 15:02:11

人工神经网络的发展和分类详细说明

节点代表一种特定的输出函数,称为激励函数( activation function )。每两个节点间的连接都代表一个对于通过该连接信号的加权值, 称之为权重, 这相当于人工

资料下载 佚名 2021-03-04 13:56:00

神经网络神经网络控制的学习课件免费下载

本文档的主要内容详细介绍的是神经网络与神经网络控制的学习课件免费下载包括了:1生物神经元模型,2人工

资料下载 佚名 2021-01-20 11:20:05

卷积神经网络激活函数的作用

卷积神经网络(Convolutional Neural Networks, CNNs)是深度学习中一种重要的神经网络结构,广泛应用于图像识别、语音识别、自然语言处理等领域。在卷积

2024-07-03 09:18:34

神经网络中的激活函数有哪些

在神经网络中,激活函数是一个至关重要的组成部分,它决定了神经元对于输入信号的反应方式,为

2024-07-01 11:52:13

神经网络初学者的激活函数指南

作者:MouâadB.来源:DeepHubIMBA如果你刚刚开始学习神经网络,激活函数的原理一开始可能很难理解。但是如果你想开发强大的神经网络,

2023-04-21 09:28:42

matlab实现神经网络 精选资料分享

习神经神经网络,对于神经网络的实现是如何一直没有具体实现一下:现看到一个简单的神经网络

2021-08-18 07:25:21

如何构建神经网络

原文链接:http://tecdat.cn/?p=5725 神经网络是一种基于现有数据创建预测的计算系统。如何构建神经网络?神经网络包括:输入层

2021-07-12 08:02:11

教大家怎么选择神经网络的超参数

minibatch 的大小, 输出神经元的编码方式, 代价函数的选择, 权重初始化的方法,

2021-06-19 14:49:14

图文详解:神经网络的激活函数

什么是神经网络激活函数?激活函数有助于决定我们是否需要激活神经元。如果我

2020-07-05 11:21:21

7天热门专题 换一换
相关标签