pytorch api文档:torch.nn.GELU()激活函数 作者:马育民 • 2026-01-24 15:49 • 阅读:10000 需要掌握:[激活函数-GELU(平滑的 ReLU 变体)](https://www.malaoshi.top/show_1GW2eLqXgzw9.html "激活函数-GELU(平滑的 ReLU 变体)") # 介绍 PyTorch 中的 `nn.GELU()` 激活函数,这是当前大语言模型(LLM)、Transformer 架构中最常用的激活函数之一。 # 语法 是 PyTorch 神经网络模块(`torch.nn`)中的类,使用时需要先实例化,再作用于张量(区别于纯函数 `torch.tanh()`)。 ``` torch.nn.GELU() ``` # 手动实现 ``` import torch import torch.nn as nn import matplotlib.pyplot as plt class GELU(nn.Module): def __init__(self): super().__init__() def forward(self, x): return 0.5 * x * (1 + torch.tanh( torch.sqrt(torch.tensor(2.0 / torch.pi)) * (x + 0.044715 * torch.pow(x, 3)) )) ``` 使用: ``` gelu = GELU() x = torch.linspace(-3, 3, 100) y_gelu = gelu(x) print(y_gelu) ``` # 例子 ```python import torch import torch.nn as nn # 1. 实例化 GELU 模块(无参数) gelu = nn.GELU() # 2. 标量/张量输入(实际中主要用于批量张量) x_scalar = torch.tensor(1.0) y_scalar = gelu(x_scalar) print("标量输出:", y_scalar) # 输出: tensor(0.8413)(符合正态分布CDF的加权结果) # 3. 批量张量输入(更贴近实际场景) x_tensor = torch.tensor([-2.0, 0.0, 2.0, 5.0]) y_tensor = gelu(x_tensor) print("张量输出:", y_tensor) # 输出: tensor([-0.0455, 0.0000, 1.9545, 4.9999]) # 可见:负数输出接近0,正数随数值增大趋近于自身,且过渡平滑 # 4. 结合网络层使用(实际应用场景) class SimpleMLP(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(10, 20) self.gelu = nn.GELU() # 网络中嵌入 GELU self.fc2 = nn.Linear(20, 1) def forward(self, x): x = self.fc1(x) x = self.gelu(x) # 激活 x = self.fc2(x) return x # 测试网络 model = SimpleMLP() input_data = torch.randn(32, 10) # 批量大小32,输入维度10 output = model(input_data) print("网络输出形状:", output.shape) # 输出: torch.Size([32, 1]) ``` # 总结 1. `nn.GELU()` 是 PyTorch 实现的高斯误差线性单元,核心是**输入值 × 正态分布累积概率**,输出平滑且无边界; 2. 使用时需先实例化模块,再作用于张量,是 Transformer 大模型的标配激活函数; 3. 相比 ReLU 更平滑、梯度更稳定,虽计算成本略高,但在深层模型(如 GPT/BERT)中表现远优于 ReLU/tanh。 原文出处:http://malaoshi.top/show_1GW2eQ49XIbw.html