激活函数在神经网络中的作用
一、引入非线性特征
激活函数的主要作用之一是引入非线性特征,这是神经网络能够处理复杂任务的关键。如果没有激活函数,多层神经网络将退化为单个线性变换,无法捕捉数据中的非线性关系。而激活函数通过非线性映射,使得神经网络能够学习复杂的模式和关系,从而具备解决复杂分类或回归问题的能力。
二、解决梯度消失问题
在深层神经网络中,梯度消失是一个常见的问题。梯度消失指的是在反向传播过程中,梯度逐渐变得非常小,导致参数无法得到有效更新。通过使用激活函数,如ReLU及其变体,可以帮助缓解梯度消失问题。这些激活函数在输入为正时具有恒定的导数,从而避免了梯度在反向传播过程中的急剧下降。
三、增加网络的表达能力
不同的激活函数可以给神经网络带来不同的表达能力。例如,ReLU激活函数可以帮助网络学习稀疏表示,即在网络中激活的神经元相对较少,这有助于减少过拟合。而Sigmoid和Tanh激活函数则可以将输出限制在一定范围内,使得神经网络的输出更加稳定。此外,一些激活函数如Leaky ReLU和PReLU等,还可以帮助网络学习更好的抑制性特征,进一步提高网络的表达能力。
四、稀疏性和抑制性
某些激活函数如ReLU及其变体具有稀疏性,即在神经网络中激活的神经元相对较少。这种稀疏性有助于减少参数数量,降低过拟合的风险,并提高模型的泛化能力。另外,一些激活函数如Leaky ReLU还可以帮助网络学习更好的抑制性特征,即对于不重要的输入,网络能够给予较小的权重,从而抑制其影响。
五、影响模型的训练速度和性能
激活函数的选择还会影响模型的训练速度和性能。例如,Sigmoid函数虽然具有平滑连续的特性,但其计算涉及指数运算,相对复杂,可能会影响模型的训练速度。而ReLU函数则具有计算简单、效率高的优点,适合大规模深度学习模型。此外,一些激活函数如ELU和SELU等,还具有自归一化的特性,可以加速模型的收敛速度并提高性能。
Tramformer中的激活函数
一、GELU激活函数
-
定义与数学表达式
GELU激活函数的全称是高斯误差线性单元,其数学表达式为GELU(x) = x * Φ(x),其中Φ(x)是标准正态分布的累积分布函数(CDF)。这个函数最初由Dan Hendrycks和Kevin Gimpel在2016年提出。
-
特点
- 平滑性与非线性:GELU函数是一个平滑且非线性的函数,这使得模型在训练过程中更加稳定,且能够捕获输入数据的复杂特征。
- 避免梯度消失:与ReLU函数相比,GELU在输入值接近原点时具有非零梯度,这有助于减少训练过程中的梯度消失问题。
- 连续导数:GELU函数的导数是连续的,这有助于模型在反向传播过程中更加稳定地更新参数。
-
在Transformer中的应用
GELU作为激活函数,在Transformer模型的自注意力机制和前馈网络部分中被广泛使用。它有助于提高模型的表达能力和训练效率。
代码:
python
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函数
-
定义与数学表达式
Softmax函数通常用于将原始分数转换为概率分布。对于一个给定的实数向量,Softmax函数首先计算每一个元素的指数(e的幂),然后每个元素的指数与所有元素指数总和的比值,就形成了softmax函数的输出。
-
特点
- 归一化:Softmax函数将原始分数转换为概率分布,确保所有概率之和为1,使得输出结果可以解释为概率。
- 平滑化:通过指数函数,Softmax能够将大的分数差距转换为相对平滑的概率分布,从而避免了"赢家通吃"的情况。
- 可解释性:输出的概率分布使得模型预测结果更加直观和可解释。
-
在Transformer中的应用
Softmax函数在Transformer模型中有两个关键位置被使用:
- 自注意力机制:在自注意力机制中,Softmax函数用于对相似度分数进行归一化,生成一个权重分布,该分布表示了在计算当前位置的表示时,应赋予其他位置多大的关注程度。
- 输出层:在Transformer的解码器部分,输出层负责根据解码器的状态生成目标序列。当进行词汇预测或生成任务时,解码器的最后一层通常会产生一个未经归一化的分数向量(logits),Softmax函数被应用于这个分数向量,将其转换为概率分布,其中每个元素表示生成对应词汇的概率。