MLP / Feed-Forward Network(第78-92行)
class MLP(nn.Module):
def __init__(self, config):
super().__init__()
# 输入投影:C → 4C
self.c_fc = nn.Linear(config.n_embd, 4 * config.n_embd, bias=config.bias)
self.gelu = nn.GELU() # 激活函数
# 输出投影:4C → C
self.c_proj = nn.Linear(4 * config.n_embd, config.n_embd, bias=config.bias)
self.dropout = nn.Dropout(config.dropout)def forward(self, x):
x = self.c_fc(x) # [B, T, C] → [B, T, 4C]
x = self.gelu(x) # GELU 激活
x = self.c_proj(x) # [B, T, 4C] → [B, T, C]
x = self.dropout(x)
return x
作用:逐位置处理,每个 token 独立变换
为什么是 4 倍?
- GPT-2 论文中的标准设置
- 扩大容量后再压缩,学习更复杂的特征