news 2026/4/30 15:33:54

从LSTM的门控到Transformer的FFN:聊聊Sigmoid、Tanh、ReLU在真实模型里的‘工作岗位’

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从LSTM的门控到Transformer的FFN:聊聊Sigmoid、Tanh、ReLU在真实模型里的‘工作岗位’

从LSTM的门控到Transformer的FFN:聊聊Sigmoid、Tanh、ReLU在真实模型里的‘工作岗位’

在深度学习的架构设计中,激活函数的选择远非简单的数学特性对比。当我们翻开LSTM的论文或Transformer的源码,会发现Sigmoid、Tanh和ReLU这些函数被精心安置在特定位置,就像一支训练有素的团队,每个成员都在自己最擅长的岗位上发挥作用。本文将带您深入经典模型的内部结构,揭示激活函数背后的设计哲学。

1. LSTM中的门控机制:Sigmoid与Tanh的黄金组合

2015年,Google基于LSTM的序列到序列模型实现了机器翻译的重大突破。这个成功背后,是Sigmoid和Tanh在门控系统中的精妙配合。打开任意一个LSTM单元的PyTorch实现,你会看到这样的核心代码:

def lstm_cell(input, hidden, W_ih, W_hh): gates = torch.mm(input, W_ih) + torch.mm(hidden, W_hh) input_gate = torch.sigmoid(gates[:, :hidden_size]) forget_gate = torch.sigmoid(gates[:, hidden_size:2*hidden_size]) output_gate = torch.sigmoid(gates[:, 2*hidden_size:3*hidden_size]) candidate_cell = torch.tanh(gates[:, 3*hidden_size:]) return (input_gate * candidate_cell, forget_gate * cell_state + input_gate * candidate_cell)

为什么门控必须用Sigmoid?这源于其三大特性:

  1. 开关特性:将任意值压缩到(0,1)区间,完美模拟生物神经元的"开/关"状态
  2. 可微性:虽然存在梯度消失问题,但在门控这种二值决策场景下已经足够
  3. 概率解释:输出值可以理解为信息通过的概率

而候选记忆单元使用Tanh则是因为:

  • 需要生成新的候选值(-1到1之间)
  • 零中心化特性有助于缓解梯度偏移问题
  • 与Sigmoid门控相乘时能保持数值稳定性

实际工程中发现,LSTM中门控的Sigmoid初始化需要特别小心。通常会将偏置初始化为正数,这能确保训练初期遗忘门保持开放状态,避免过早丢失信息。

2. Transformer的前馈网络:ReLU的统治地位

当注意力机制席卷NLP领域时,ReLU在Transformer的前馈网络(FFN)中确立了不可撼动的地位。原始论文中的FFN层定义如下:

class PositionwiseFeedForward(nn.Module): def __init__(self, d_model, d_ff): super().__init__() self.w_1 = nn.Linear(d_model, d_ff) self.w_2 = nn.Linear(d_ff, d_model) def forward(self, x): return self.w_2(F.relu(self.w_1(x)))

ReLU在此处的优势体现在:

特性对FFN的影响
计算高效加速大规模矩阵运算
稀疏激活自动形成特征选择
缓解梯度消失保障深层网络训练
死亡神经元问题通过初始化技巧缓解

有趣的是,虽然原始Transformer使用ReLU,但后续变体如GPT系列更倾向于使用GeLU(高斯误差线性单元)。这种演进反映了激活函数选择中的实用主义哲学——没有绝对的最优,只有场景下的最适合。

3. 残差网络中的激活函数布局:来自计算机视觉的启示

ResNet的架构设计颠覆了我们对激活函数放置位置的传统认知。观察ResNet的残差块实现:

class BasicBlock(nn.Module): def __init__(self, inplanes, planes, stride=1): super().__init__() self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=3, stride=stride) self.bn1 = nn.BatchNorm2d(planes) self.conv2 = nn.Conv2d(planes, planes, kernel_size=3) self.bn2 = nn.BatchNorm2d(planes) def forward(self, x): identity = x out = F.relu(self.bn1(self.conv1(x))) out = self.bn2(self.conv2(out)) out += identity return F.relu(out)

这里有几个关键设计决策:

  1. ReLU后置于BN:现代架构普遍采用"Conv→BN→ReLU"的顺序
  2. 跳跃连接不加激活:恒等映射保持梯度畅通
  3. 最后一层ReLU可选:有些实现会省略最后的ReLU

这种设计带来了三点优势:

  • 批归一化先对数据分布进行标准化
  • ReLU的稀疏化作用得到更好发挥
  • 梯度可以直接通过捷径传播

4. 激活函数选择的实战经验

经过多个工业级项目的验证,我总结出以下激活函数选择checklist:

当需要二值决策时(门控、注意力权重)

  • 首选Sigmoid(LSTM门控、注意力门)
  • 备选Hard Sigmoid(量化场景)
  • 避免使用ReLU

当需要特征变换时(全连接层、卷积层)

  • 首选ReLU及其变体(LeakyReLU、Swish)
  • 次选Tanh(RNN隐藏状态变换)
  • 避免原始Sigmoid

需要特别注意的场景

  • 低精度计算(FP16):使用更平滑的Swish
  • 对抗训练:考虑Maxout
  • 量化部署:预先测试ReLU6

在TensorFlow 2.x中,可以通过简单的API切换不同激活函数:

# 激活函数实验框架 def build_model(activation='relu'): return tf.keras.Sequential([ layers.Dense(64, activation=activation), layers.Dense(10, activation='softmax') ]) # 测试不同激活函数 for act in ['relu', 'swish', 'leaky_relu']: model = build_model(act) model.compile(optimizer='adam', loss='categorical_crossentropy') history = model.fit(x_train, y_train, validation_split=0.2)

在实际项目中,激活函数的选择往往需要配合初始化策略。例如使用ReLU时,He初始化通常比Xavier初始化表现更好。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 15:32:05

电视大屏的智能伴侣:TV Bro如何重新定义客厅上网体验

电视大屏的智能伴侣:TV Bro如何重新定义客厅上网体验 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 想象一下,您正坐在舒适的沙发上&#xff0c…

作者头像 李华
网站建设 2026/4/30 15:29:39

Java 面试:在音视频场景下的技术探讨

Java 面试:在音视频场景下的技术探讨在这篇文章中,我们将通过一场互联网大厂的面试,深入探讨 Java 技术栈,特别是在音视频场景下的应用。面试官是位严肃的技术专家,而程序员燕双非则是个幽默风趣的角色,让我…

作者头像 李华
网站建设 2026/4/30 15:25:23

如何在手机端使用嘎嘎降AI:移动端降AI操作流程和注意事项完整教程

如何在手机端使用嘎嘎降AI:移动端降AI操作流程和注意事项完整教程 第一次用降AI工具会遇到很多不确定的地方——传什么格式、选哪个模式、怎么验收效果。 这篇教程把常见问题都覆盖了,主要基于嘎嘎降AI(www.aigcleaner.com)&…

作者头像 李华
网站建设 2026/4/30 15:24:00

【限时开源】R包`biasAudit` v2.3正式发布:一键完成Prompt级/Output级偏见扫描——你的模型可能已在训练中悄然放大性别偏差?

更多请点击: https://intelliparadigm.com 第一章:R 语言在大语言模型偏见检测中的统计方法 配置步骤详解 R 语言凭借其强大的统计建模能力与丰富的文本分析生态(如 tidytext、quanteda、textdata),正成为评估大语言…

作者头像 李华