【每日一个知识点】GLU(Gated Linear Unit,门控线性单元)
GLU(,门控线性单元)是一种引入门控机制的神经网络单元,由在论文《Language Modeling with Gated Convolutional Networks》中提出(2017年)。它常被用于提升模型的非线性建模能力,尤其在 NLP、CV 及图神经网络中都有应用。
GLU(Gated Linear Unit,门控线性单元)是一种引入门控机制的神经网络单元,由 Facebook AI Research 在论文《Language Modeling with Gated Convolutional Networks》中提出(2017年)。它常被用于提升模型的非线性建模能力,尤其在 NLP、CV 及图神经网络中都有应用。
✅ GLU 的基本形式
给定输入向量 X,GLU 将其输入分为两个部分,经过如下变换:
GLU(X)=A⊗σ(B)

其中:
-
A=XW1+b1:线性变换
-
B=XW2+b2:门控向量(也是线性变换)
-
σ:sigmoid 激活函数(将输出压缩到 0~1 之间)
-
⊗:元素级乘法(Hadamard product)
💡 直观理解
-
A 是原始特征的变换,代表主要信息。
-
σ(B) 是一个门控向量,控制哪些部分的信息应该保留、哪些应被抑制。
-
门控机制 能够引导模型学习哪些维度更重要、哪些可以被屏蔽,从而提升建模效果。
🧠 GLU 与其他门控机制的对比
| 名称 | 表达式 | 特点 |
|---|---|---|
| GLU | A⋅σ(B) | 简洁高效、无状态 |
| GRU | 多门控(重置门、更新门) | 时序建模能力强 |
| LSTM | 输入门、遗忘门、输出门 | 强记忆能力、计算开销大 |
GLU 适合用于非循环场景,比如 CNN、Transformer、图神经网络等。
🔧 PyTorch 实现
import torch
import torch.nn as nn
class GLULayer(nn.Module):
def __init__(self, input_dim, output_dim):
super(GLULayer, self).__init__()
self.linear = nn.Linear(input_dim, output_dim * 2) # A 和 B 共用一个 Linear
def forward(self, x):
x_proj = self.linear(x)
a, b = x_proj.chunk(2, dim=-1) # 分为两半
return a * torch.sigmoid(b)
📌 应用场景举例
-
TabNet(结构性数据分类):大量使用 GLU 实现稀疏注意力选择特征。
-
NLP 中的 Gated CNN:代替 RNN 用于语言建模。
-
图神经网络(GatedGCN、GaAN):增强图卷积的建模能力。
-
生物信息学/单细胞聚类:可引入 GLU 模型提取更有效的嵌入特征。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)