LLM-01-第一章-预训练/神经网络的激活函数(一)概述

神经网络的激活函数(一)综述

激活函数(Activation Function)是人工神经网络中的一个关键组件,它的作用是为神经网络引入非线性因素。如果没有激活函数,神经网络无论有多少层,都只能表示输入和输出之间的线性关系,这大大限制了网络处理复杂问题的能力。激活函数通常在神经网络的每个神经元或节点上应用,它们帮助网络学习和表示复杂的函数。

发展历史

1. Sigmoid

Sigmoid函数是最早被广泛使用的激活函数之一,它的公式为:

Sigmoid函数的输出范围在0到1之间,Sigmoid函数的主要问题是在输入很大或很小的情况下,梯度会变得很小,这会导致梯度消失的问题,从而影响网络的训练效果。

历史背景:早在19世纪,数学家们就研究了类似的函数形式;在1986年,David Rumelhart、Geoffrey Hinton和Ronald Williams在提出多层感知器(MLP)和反向传播算法时,Sigmoid函数被广泛使用,因为它的导数形式简单,便于计算梯度。

2. Softmax

Softmax函数是一种常用的多分类激活函数,它的公式为:

Softmax函数的输出是一个概率分布,它将输入映射到一个概率分布上,使得每个类别的概率之和为1。Softmax函数通常用于多分类问题中的输出层。

历史背景:Softmax函数的概念来源于统计力学中的Boltzmann分布,它在20世纪中期开始被应用于神经网络中。

3. Tanh

Tanh函数是双曲正切函数,它的公式为:

Tanh函数的输出范围在-1到1之间, Tanh函数相对于Sigmoid函数来说,输出的范围更广,可以将输入映射到-1到1之间,从而减少梯度消失的问题。

历史背景:Tanh函数与双曲函数的研究可以追溯到18世纪。它在数学和工程学中有广泛的应用,特别是在信号处理和控制系统中。随着神经网络的发展,Tanh函数被引入作为一种激活函数。

4. ReLU

ReLU函数是修正线性单元函数,它的公式为:

ReLU函数在输入大于0时输出等于输入,否则输出为0。ReLU函数的优点是计算简单,收敛速度快,但它也存在一个问题,就是在输入小于0时,梯度为0,这会导致神经元无法更新权重,从而出现"神经元死亡"的问题。

提出时间: 2010年,由Vinod Nair和 Geoffrey Hinton在他们的论文《Rectified Linear Units Improve Restricted Boltzmann Machines》1中展示了ReLU在深度神经网络中的有效性。自此,ReLU成为了深度学习中最流行的激活函数之一。

5. Leaky ReLU

Leaky ReLU函数是ReLU函数的改进版本,它的公式为:

其中\\alpha是一个小于1的常数,通常取0.01。Leaky ReLU函数在输入小于0时,不再输出0,而是输出一个很小的值\\alpha x,这样可以避免ReLU函数的"神经元死亡"问题。

提出时间: 2013年,Leaky ReLU首次出现在论文《Rectifier Nonlinearities Improve Neural Network Acoustic Models》2中,该论文由Andrew L. Maas、Awni Y. Hannun和Andrew Y. Ng撰写.

6. PReLU

PReLU函数是带参数的ReLU函数,它的公式为:

其中\\alpha是一个可学习的参数,通常在训练过程中通过反向传播来更新。PReLU函数在输入小于0时,不再输出0,而是输出一个由参数\\alpha控制的值,这样可以更灵活地调整激活函数的形状。

提出时间: PReLU是由何凯明(Kaiming He)、张翔(Xiangyu Zhang)、任少卿(Shaoqing Ren)和孙剑(Jian Sun)在2015年的论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》3中提出的。

7. ELU

ELU函数是指数线性单元函数,它的公式为:

其中\\alpha是一个大于0的常数,通常取1。ELU函数在输入大于0时输出等于输入,否则输出一个由参数\\alpha控制的值,这样可以避免ReLU函数的"神经元死亡"问题,并且在输入小于0时,输出的值是连续的,有助于提高网络的稳定性。

提出时间: ELU激活函数是在2015年由Djork-Arné Clevert、Thomas Unterthiner和Sepp Hochreiter在论文《Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs)》4中提出的。

8. GLU

GLU函数是门控线性单元函数,它的公式为:

其中\\sigma(x)是Sigmoid函数,\\odot表示元素级乘法。GLU函数在输入上应用了门控机制,通过Sigmoid函数来控制输入的信息流动,从而提高网络的表达能力。

提出时间: GLU激活函数是在2017年由Yann Dauphin等人在论文《Language Modeling with Gated Convolutional Networks》5中提出的。

9. SELU

SELU函数是自归一化指数线性单元函数,它的公式为:

其中\\lambda\\alpha是两个常数,通常取1.0507和1.6733。SELU函数在输入大于0时输出等于输入,否则输出一个由参数\\alpha控制的值,这样可以避免ReLU函数的"神经元死亡"问题,并且在输入小于0时,输出的值是连续的,有助于提高网络的稳定性。SELU函数还具有自归一化的性质,可以使得网络的输出保持稳定。

提出时间: SELU激活函数是在2017年由Günter Klambauer、Thomas Unterthiner、Andreas Mayr和Sepp Hochreiter在论文《Self-Normalizing Neural Networks》7中提出的。

10. GELU

GELU函数是高斯误差线性单元函数,它的公式为:

GELU函数在输入大于0时输出等于输入,否则输出一个由参数\\alpha控制的值,这样可以避免ReLU函数的"神经元死亡"问题,并且在输入小于0时,输出的值是连续的,有助于提高网络的稳定性。GELU函数在很多实际应用中表现出了比ReLU函数更好的性能。

提出时间: GELU激活函数是在2016年由Dan Hendrycks和Kevin Gimpel在论文《Gaussian Error Linear Units (GELUs)》中提出的。

11. Swish

Swish函数是自门控激活函数,它的公式为:

Swish函数在输入大于0时输出等于输入,否则输出一个由Sigmoid函数控制的值,这样可以避免ReLU函数的"神经元死亡"问题,并且在输入小于0时,输出的值是连续的,有助于提高网络的稳定性。Swish函数在很多实际应用中表现出了比ReLU函数更好的性能。

提出时间: Swish激活函数是在2017年由Google Brain团队在论文《Searching for Activation Functions》6中提出的。

12. Mish

Mish函数是自门控激活函数,它的公式为:

Mish函数在输入大于0时输出等于输入,否则输出一个由Sigmoid函数控制的值,这样可以避免ReLU函数的"神经元死亡"问题,并且在输入小于0时,输出的值是连续的,有助于提高网络的稳定性。Mish函数在很多实际应用中表现出了比ReLU函数更好的性能。

提出时间: Mish激活函数是在2019年由Diganta Misra在论文《Mish: A Self Regularized Non-Monotonic Neural Activation Function》中提出的。

13. SwiGLU

SwiGLU函数是自门控激活函数,它的公式为:

SwiGLU函数在输入大于0时输出等于输入,否则输出一个由Sigmoid函数控制的值,这样可以避免ReLU函数的"神经元死亡"问题,并且在输入小于0时,输出的值是连续的,有助于提高网络的稳定性。SwiGLU函数在很多实际应用中表现出了比ReLU函数更好的性能。

提出时间: SwiGLU激活函数是在2021年由DeepMind团队在论文《Scaling Vision Transformers》7中提出的。

相关推荐
哈__8 分钟前
CANN加速Image-to-Image转换:风格迁移与图像编辑优化
人工智能·计算机视觉
ujainu8 分钟前
解码昇腾AI的“中枢神经”:CANN开源仓库全景式技术解析
人工智能·开源·cann
Elastic 中国社区官方博客13 分钟前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
组合缺一14 分钟前
Solon AI (Java) v3.9 正式发布:全能 Skill 爆发,Agent 协作更专业!仍然支持 java8!
java·人工智能·ai·llm·agent·solon·mcp
哈__15 分钟前
CANN: AI 生态的异构计算核心,从架构到实战全解析
人工智能·架构
熊猫钓鱼>_>18 分钟前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
想你依然心痛21 分钟前
ModelEngine·AI 应用开发实战:从智能体到可视化编排的全栈实践
人工智能·智能体·ai应用·modelengine
KIKIiiiiiiii22 分钟前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
ZH154558913124 分钟前
Flutter for OpenHarmony Python学习助手实战:Web开发框架应用的实现
python·学习·flutter
哈哈你是真的厉害25 分钟前
解构 AIGC 的“核动力”引擎:华为 CANN 如何撑起万亿参数的大模型时代
人工智能·aigc·cann