激活函数在神经网络中的作用,以及Tramformer中的激活函数

举报
AI浩 发表于 2024/12/24 07:54:37 2024/12/24
【摘要】 @[toc] 激活函数在神经网络中的作用 一、引入非线性特征激活函数的主要作用之一是引入非线性特征,这是神经网络能够处理复杂任务的关键。如果没有激活函数,多层神经网络将退化为单个线性变换,无法捕捉数据中的非线性关系。而激活函数通过非线性映射,使得神经网络能够学习复杂的模式和关系,从而具备解决复杂分类或回归问题的能力。 二、解决梯度消失问题在深层神经网络中,梯度消失是一个常见的问题。梯度消失指...

@[toc]

激活函数在神经网络中的作用

一、引入非线性特征

激活函数的主要作用之一是引入非线性特征,这是神经网络能够处理复杂任务的关键。如果没有激活函数,多层神经网络将退化为单个线性变换,无法捕捉数据中的非线性关系。而激活函数通过非线性映射,使得神经网络能够学习复杂的模式和关系,从而具备解决复杂分类或回归问题的能力。

二、解决梯度消失问题

在深层神经网络中,梯度消失是一个常见的问题。梯度消失指的是在反向传播过程中,梯度逐渐变得非常小,导致参数无法得到有效更新。通过使用激活函数,如ReLU及其变体,可以帮助缓解梯度消失问题。这些激活函数在输入为正时具有恒定的导数,从而避免了梯度在反向传播过程中的急剧下降。

三、增加网络的表达能力

不同的激活函数可以给神经网络带来不同的表达能力。例如,ReLU激活函数可以帮助网络学习稀疏表示,即在网络中激活的神经元相对较少,这有助于减少过拟合。而Sigmoid和Tanh激活函数则可以将输出限制在一定范围内,使得神经网络的输出更加稳定。此外,一些激活函数如Leaky ReLU和PReLU等,还可以帮助网络学习更好的抑制性特征,进一步提高网络的表达能力。

四、稀疏性和抑制性

某些激活函数如ReLU及其变体具有稀疏性,即在神经网络中激活的神经元相对较少。这种稀疏性有助于减少参数数量,降低过拟合的风险,并提高模型的泛化能力。另外,一些激活函数如Leaky ReLU还可以帮助网络学习更好的抑制性特征,即对于不重要的输入,网络能够给予较小的权重,从而抑制其影响。

五、影响模型的训练速度和性能

激活函数的选择还会影响模型的训练速度和性能。例如,Sigmoid函数虽然具有平滑连续的特性,但其计算涉及指数运算,相对复杂,可能会影响模型的训练速度。而ReLU函数则具有计算简单、效率高的优点,适合大规模深度学习模型。此外,一些激活函数如ELU和SELU等,还具有自归一化的特性,可以加速模型的收敛速度并提高性能。

Tramformer中的激活函数

一、GELU激活函数

  1. 定义与数学表达式

    GELU激活函数的全称是高斯误差线性单元,其数学表达式为GELU(x) = x * Φ(x),其中Φ(x)是标准正态分布的累积分布函数(CDF)。这个函数最初由Dan Hendrycks和Kevin Gimpel在2016年提出。

  2. 特点

    • 平滑性与非线性:GELU函数是一个平滑且非线性的函数,这使得模型在训练过程中更加稳定,且能够捕获输入数据的复杂特征。
    • 避免梯度消失:与ReLU函数相比,GELU在输入值接近原点时具有非零梯度,这有助于减少训练过程中的梯度消失问题。
    • 连续导数:GELU函数的导数是连续的,这有助于模型在反向传播过程中更加稳定地更新参数。
  3. 在Transformer中的应用

    GELU作为激活函数,在Transformer模型的自注意力机制和前馈网络部分中被广泛使用。它有助于提高模型的表达能力和训练效率。

代码:

import torch
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt

# 创建一个从-10到10的输入值范围(包含400个点),并转换为PyTorch张量
x_values = torch.linspace(-10, 10, 400)

# 计算GELU激活
y_values = F.gelu(x_values)

# 将PyTorch张量转换回NumPy数组,以便与matplotlib一起使用
x_values_np = x_values.numpy()
y_values_np = y_values.numpy()

# 创建并显示GELU曲线的图
plt.figure(figsize=(8, 6))
plt.plot(x_values_np, y_values_np, label='GELU')
plt.title('GELU Activation Function')
plt.xlabel('Input (x)')
plt.ylabel('Output (GELU(x))')
plt.axhline(y=0, color='black', linewidth=0.5)
plt.axvline(x=0, color='black', linewidth=0.5)
plt.grid(True)
plt.legend()
plt.show()

在这里插入图片描述

二、Softmax函数

  1. 定义与数学表达式

    Softmax函数通常用于将原始分数转换为概率分布。对于一个给定的实数向量,Softmax函数首先计算每一个元素的指数(e的幂),然后每个元素的指数与所有元素指数总和的比值,就形成了softmax函数的输出。

  2. 特点

    • 归一化:Softmax函数将原始分数转换为概率分布,确保所有概率之和为1,使得输出结果可以解释为概率。
    • 平滑化:通过指数函数,Softmax能够将大的分数差距转换为相对平滑的概率分布,从而避免了“赢家通吃”的情况。
    • 可解释性:输出的概率分布使得模型预测结果更加直观和可解释。
  3. 在Transformer中的应用

    Softmax函数在Transformer模型中有两个关键位置被使用:

    • 自注意力机制:在自注意力机制中,Softmax函数用于对相似度分数进行归一化,生成一个权重分布,该分布表示了在计算当前位置的表示时,应赋予其他位置多大的关注程度。
    • 输出层:在Transformer的解码器部分,输出层负责根据解码器的状态生成目标序列。当进行词汇预测或生成任务时,解码器的最后一层通常会产生一个未经归一化的分数向量(logits),Softmax函数被应用于这个分数向量,将其转换为概率分布,其中每个元素表示生成对应词汇的概率。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。