大数跨境

LLM肢解计划:SwiGLU MLP解析与实践

LLM肢解计划:SwiGLU MLP解析与实践 AITimeHub
2026-04-22
0

 


相关阅读

  1. Paged Attention代码解析

  2. LLM推理:PagedAttention操作系统内存管理AI领域应用

  3. LLM推理:PagedAttention操作系统内存管理AI领域应用

  4. LLM推理:KV Cache

  5. LLM 推理:Prompt Cache

  6. 基于llama.cpp理解LLM推理的工作原理

  7. LLM推理过程采样策略(全面分析)

  8. LLM推理过程分析

  9. 回归基础!KVcache实现原理与优化!如何让LLM推理更快?

  10. 必知!大模型时代超常用的训练、微调、推理、部署框架

  11. AI从业者必知!DeepSeek再度推出高效推理框架 FlashMLA,牛在哪?

  12. K2-Think低成本高可用的高效推理系统

更多阅读:AIhub|财富人生|极简主义|

LLM肢解计划:SwiGLU MLP解析与实践


LLM肢解计划

  • 激活函数:reluLLM肢解计划:激活函数
  • softmaxLLM肢解计划:Softmax函数 | 核心解析与工程实践
  • linearLLM肢解计划:线性层解析与实践
  • layernormattentionmultihead_attentionbatchnormrmsnormcausal_attentiongqasliding_windowlinear_attentiongpt2_blockkv_cacheSwiGLU MLPcross_entropydropoutembeddinggeluweight_initgradient_clippingconv2dcross_attentionropeflash_attentionloravit_patchmoeadamcosine_lrgradient_accumulationtopk_samplingbeam_searchspeculative_decodingbpeint8_quantizationdpo_lossgrpo_lossppo_losslinear_regression

精准定义

SwiGLU(Swish-Gated Linear Unit)是融合Swish非线性与门控线性单元(GLU)的专用激活函数,专为Transformer前馈网络(FFN)设计,通过双线性投影+Swish门控+哈达玛积实现自适应特征筛选与非线性映射,是当前LLM FFN层的工业标准激活。为 LLaMA、Mistral、PaLM、Gemma 等主流开源闭源 LLM 所采用的标准 FFN 形式;

标准数学定义(LLM主流无缩放β=1形式):

完整FFN级定义:

其中:

  • •  :哈达玛积(元素级相乘)
  • •  为Sigmoid;
  • • SiLU(Sigmoid Linear Unit)也被称为 Swish-1,是Swish激活函数在参数 时的特例;主流LLM(如LLaMA系列)的SwiGLU门控,实际使用的就是SiLU。
  • •  :上投影线性层, :下投影线性层

解决的根本问题

  1. 1. 传统激活(ReLU/GeLU)无门控机制,无法自适应过滤LLM长文本语义冗余特征,深层模型表达能力触顶;
  2. 2. ReLU存在死亡神经元、梯度消失问题,GeLU仅优化非线性但缺失门控,LLM缩放时困惑度(Perplexity)下降瓶颈;成为大模型稠密 FFN 最优默认结构
  3. 3. 原始GLU门控仅用Sigmoid,非线性表达不足,SwiGLU融合Swish实现梯度流动性+特征筛选能力的平衡。

2. 历史演进

关键里程碑

  1. 1. 门控线性单元原始提出, ,奠定门控FFN基础
    1. 1. Y. N. Dauphin, A. Fan, M. Auli和D. Grangier, 《Language Modeling with Gated Convolutional Networks》, 2017年9月8日, arXiv: arXiv:1612.08083. doi: 10.48550/arXiv.1612.08083.
    2. 2. N. Shazeer, 《GLU Variants Improve Transformer》, 2020年2月12日, arXiv: arXiv:2002.05202. doi: 10.48550/arXiv.2002.05202.
  2. 2. 平滑非线性激活,解决ReLU负区间梯度消失问题:Swish/SiLU – Google Brain:SiLU(Sigmoid Linear Unit)也被称为 Swish-1,是Swish激活函数在参数 时的特例;主流LLM(如LLaMA系列)的SwiGLU门控,实际使用的就是SiLU。
    1. 1. P. Ramachandran, B. Zoph和Q. V. Le, 《Swish: a Self-Gated Activation Function》.
    2. 2. S. Elfwing, E. Uchibe和K. Doya, 《Sigmoid-Weighted Linear Units for Neural Network Function Approximation in Reinforcement Learning》, 2017年11月2日, arXiv: arXiv:1702.03118. doi: 10.48550/arXiv.1702.03118.
  3. 3. 融合SiLU与GLU,形成SwiGLU基础结构:
    1. 1. N. Shazeer, 《GLU Variants Improve Transformer》, 2020年2月12日, arXiv: arXiv:2002.05202. doi: 10.48550/arXiv.2002.05202.
    2. 2. S. Elfwing, E. Uchibe和K. Doya, 《Sigmoid-Weighted Linear Units for Neural Network Function Approximation in Reinforcement Learning》, 2017年11月2日, arXiv: arXiv:1702.03118. doi: 10.48550/arXiv.1702.03118.
  4. 4. 正式将SwiGLU定为LLM FFN标准结构,设定4/3 d_model隐层维度:2022, PaLM (Google) & LLaMA-1 (Meta)
    1. 1. H. Touvron等, 《LLaMA: Open and Efficient Foundation Language Models》, arXiv.org. 见于: 2026年4月21日. [在线]. 载于: https://arxiv.org/abs/2302.13971v1
    2. 2. A. Chowdhery等, 《PaLM: Scaling Language Modeling with Pathways》, arXiv.org. 见于: 2026年4月21日. [在线]. 载于: https://arxiv.org/abs/2204.02311v5
  5. 5. 2023–2025, Mistral / Llama-2/3 / Gemma
    全线沿用SwiGLU,成为稠密大模型事实工业标准

技术迭代核心驱动力

  1. 1. 从“固定激活”到“动态门控”:提升特征表达效率
  2. 2. LLM 规模化后对梯度稳定性、泛化能力的强需求
  3. 3. 长文本、复杂推理任务对特征蒸馏能力要求指数级提升;
  4. 4. 推理侧算子优化成熟,使SwiGLU计算开销可被硬件吸收
  5. 5. 对比GLU/GeGLU/ReGLU在语言建模任务上的实证胜率,Transformer架构标准化,门控型激活泛化性得到大规模验证。

3. 底层原理

基础逻辑(通俗类比)

SwiGLU 相当于双通道特征处理器

  • • 一路通过 SiLU 做平滑非线性变换,生成特征门控掩码
  • • 另一路保持纯线性,提供原始特征通路
  • • 掩码与特征逐元素相乘,动态“放行”有用维度、抑制噪声维度
  • • 最终线性投影输出,完成全局特征重构

数学/工程推导

设输入维度  ,隐层维度  (LLM 标准):

  1. 1. 双路升维投影
  2. 2. 门控激活
  3. 3. 门控融合
  4. 4. 输出投影

梯度层面: 每一路均为线性+平滑非线性,无硬零区间,梯度传递更均匀。
工程关键: LLM中隐层维扩至4D,参数量为传统FFN的1.5倍。

代码实践


   
   
   
    
   
   
   import torch
import
 torch.nn as nn
import
 torch.nn.functional as F
import
 matplotlib.pyplot as plt
import
 numpy as np

# ===================== 兼容中文显示 =====================

plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False

# ===================== 工具函数:计算梯度 =====================

def
 compute_gradient(input_tensor, module):
    x = input_tensor.clone().detach().requires_grad_(True)
    # 兼容nn.Module和普通函数

    if
 isinstance(module, nn.Module):
        y = module(x)
    else
:
        y = module(x)
    # 反向传播计算梯度

    grad = torch.autograd.grad(y.sum(), x)[0]
    return
 y.detach().numpy(), grad.detach().numpy()

# ===================== 基础激活函数=====================

# 1. Sigmoid

def
 sigmoid_native(x):
    return
 1 / (1 + torch.exp(-x))
def
 sigmoid_torch(x):
    return
 torch.sigmoid(x)

# 2. ReLU

# 修复:统一dtype/device,无类型不匹配风险

def
 relu_native(x):
    return
 torch.max(torch.zeros_like(x), x)
def
 relu_torch(x):
    return
 torch.relu(x)

# 3. GELU 【关键修复:禁用numpy,纯torch实现,解决CUDA报错】

def
 gelu_native(x):
    sqrt_2_over_pi = torch.sqrt(torch.tensor(2.0 / torch.pi, device=x.device, dtype=x.dtype))
    return
 0.5 * x * (1.0 + torch.tanh(sqrt_2_over_pi * (x + 0.044715 * torch.pow(x, 3.0))))
def
 gelu_torch(x):
    return
 F.gelu(x)

# 4. SiLU (Swish-1)

def
 silu_native(x):
    return
 x * torch.sigmoid(x)
def
 silu_torch(x):
    return
 F.silu(x)

# 5. 带参Swish

def
 swish_beta_native(x, beta=1.0):
    return
 x * torch.sigmoid(beta * x)

# ===================== GLU门控激活变体(LLaMA/PaLM工业标准实现) =====================

# 1. GLU

class
 GLUNative(nn.Module):
    def
 __init__(self, in_features, hidden_features):
        super
().__init__()
        self
.w1 = nn.Linear(in_features, hidden_features)
        self
.w2 = nn.Linear(in_features, hidden_features)
    def
 forward(self, x):
        return
 torch.sigmoid(self.w1(x)) * self.w2(x)

class
 GLUTorch(nn.Module):
    def
 __init__(self, in_features, hidden_features):
        super
().__init__()
        self
.proj = nn.Linear(in_features, hidden_features * 2)
    def
 forward(self, x):
        x = self.proj(x)
        return
 F.glu(x, dim=-1)

# 2. ReGLU

class
 ReGLU(nn.Module):
    def
 __init__(self, in_features, hidden_features):
        super
().__init__()
        self
.w1 = nn.Linear(in_features, hidden_features)
        self
.w2 = nn.Linear(in_features, hidden_features)
    def
 forward(self, x):
        return
 F.relu(self.w1(x)) * self.w2(x)

# 3. GEGLU

class
 GEGLU(nn.Module):
    def
 __init__(self, in_features, hidden_features):
        super
().__init__()
        self
.w1 = nn.Linear(in_features, hidden_features)
        self
.w2 = nn.Linear(in_features, hidden_features)
    def
 forward(self, x):
        return
 F.gelu(self.w1(x)) * self.w2(x)

    
class
 SwiGLU(nn.Module):
    def
 __init__(self, in_features, hidden_features):
        super
().__init__()
        # SwiGLU requires two projections: one for the gate, one for the value

        self
.gate_proj = nn.Linear(in_features, hidden_features)
        self
.value_proj = nn.Linear(in_features, hidden_features)
        self
.out_proj = nn.Linear(hidden_features, in_features)

    def
 forward(self, x):
        # Element-wise multiplication of the SiLU-activated gate and the linear value

        hidden = F.silu(self.gate_proj(x)) * self.value_proj(x)
        # hidden=self.out_proj(hidden)

        return
 hidden


# 激活函数字典(统一管理,方便可视化)

ACTIVATIONS = {
    "Sigmoid"
: (sigmoid_native, sigmoid_torch),
    "ReLU"
: (relu_native, relu_torch),
    "GELU"
: (gelu_native, gelu_torch),
    "SiLU"
: (silu_native, silu_torch)
}
# 可视化输入范围

X_CURVE = torch.linspace(-5, 5, 1000)  # 曲线/梯度用
X_DIST = torch.randn(10000)            # 概率分布用(正态分布,模拟真实输入)

# ===================== 任务1:独立封装可视化函数 =====================

# 1. 激活函数曲线对比

def
 plot_activation_curves():
    plt.figure(figsize=(10, 5))
    for
 name, (native_func, torch_func) in ACTIVATIONS.items():
        y = native_func(X_CURVE).numpy()
        plt.plot(X_CURVE.numpy(), y, linewidth=2, label=name)
    plt.title("激活函数曲线对比", fontsize=12)
    plt.xlabel("x")
    plt.ylabel("f(x)")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.tight_layout()
    plt.show()

# 2. 激活函数梯度(dy/dx)对比

def
 plot_activation_gradients():
    plt.figure(figsize=(10, 5))
    for
 name, (native_func, _) in ACTIVATIONS.items():
        _, grad = compute_gradient(X_CURVE, native_func)
        plt.plot(X_CURVE.numpy(), grad, linewidth=2, label=f"{name} 梯度")
    plt.title("激活函数梯度曲线对比", fontsize=12)
    plt.xlabel("x")
    plt.ylabel("dy/dx")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.tight_layout()
    plt.show()

# 3. 激活函数输出概率分布对比

def
 plot_activation_distributions():
    plt.figure(figsize=(12, 6))
    for
 name, (native_func, _) in ACTIVATIONS.items():
        y = native_func(X_DIST).numpy()
        plt.hist(y, bins=50, alpha=0.5, density=True, label=name)
    plt.title("激活函数输出概率分布对比(输入:标准正态分布)", fontsize=12)
    plt.xlabel("f(x) 输出值")
    plt.ylabel("概率密度")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.tight_layout()
    plt.show()

# 4. 原生实现 vs PyTorch内置实现 对比

def
 plot_native_vs_torch():
    fig, axes = plt.subplots(2, 2, figsize=(12, 8))
    axes = axes.flatten()
    for
 idx, (name, (native_func, torch_func)) in enumerate(ACTIVATIONS.items()):
        x = X_CURVE.numpy()
        y_native = native_func(X_CURVE).numpy()
        y_torch = torch_func(X_CURVE).numpy()
        # 绘图:两条线完全重合

        axes[idx].plot(x, y_native, linewidth=3, label="原生实现")
        axes[idx].plot(x, y_torch, linestyle="--", linewidth=2, label="PyTorch内置")
        axes[idx].set_title(f"{name}:原生 vs PyTorch")
        axes[idx].legend()
        axes[idx].grid(alpha=0.3)
    plt.suptitle("原生实现与PyTorch内置实现对比", fontsize=14)
    plt.tight_layout()
    plt.show()
    

# ===================== 可视化输入 =====================

# x = torch.linspace(-5, 5, 1000)

# # 核心对比参数:β=0.5/1/2/5(覆盖典型形态)


# 1. 带参Swish 函数曲线对比

def
 plot_swish_curve(BETA_LIST = [0.5, 1.0, 2.0, 5.0,10.0]):
    plt.figure(figsize=(10, 5))
    for
 beta in BETA_LIST:
        y = swish_beta_native(X_CURVE, beta).numpy()
        plt.plot(X_CURVE.numpy(), y, linewidth=2, label=f'β={beta}')
    plt.title("带参Swish激活函数曲线对比", fontsize=12)
    plt.xlabel("x")
    plt.ylabel("swish_β(x)")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.tight_layout()
    plt.show()

# 2. 带参Swish 梯度(dy/dx)对比

def
 plot_swish_gradient(BETA_LIST = [0.5, 1.0, 2.0, 5.0,10.0]):
    plt.figure(figsize=(10, 5))
    for
 beta in BETA_LIST:
        x_tensor = X_CURVE.clone().detach().requires_grad_(True)
        y = swish_beta_native(x_tensor, beta)
        grad = torch.autograd.grad(y.sum(), x_tensor)[0]
        
        grad=grad.detach().numpy()
        # _, grad = compute_gradient(x, swish_beta_native, beta)

        plt.plot(x.numpy(), grad, linewidth=2, label=f'β={beta}')
    plt.title("带参Swish激活函数梯度对比", fontsize=12)
    plt.xlabel("x")
    plt.ylabel("dy/dx")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.tight_layout()
    plt.show()
    
# 固定权重工具:保证线性层为恒等映射,纯展示门控激活效果(公平对比)

def
 init_identity_weights(model):
    for
 m in model.modules():
        if
 isinstance(m, nn.Linear):
            nn.init.eye_(m.weight)  # 单位矩阵权重
            nn.init.zeros_(m.bias)  # 零偏置
    return
 model

# ===================== 初始化GLU模型(固定权重,维度=1用于可视化) =====================

GLU_MODELS = {
    "GLU"
: init_identity_weights(GLUNative(1, 1)),
    "ReGLU"
: init_identity_weights(ReGLU(1, 1)),
    "GEGLU"
: init_identity_weights(GEGLU(1, 1)),
    "SwiGLU"
: init_identity_weights(SwiGLU(1, 1)),
}
# ===================== 独立封装可视化函数 =====================

# 1. GLU门控激活 曲线对比

def
 plot_glu_activation_curves():
    X=X_CURVE.clone().reshape(-1,1)
    plt.figure(figsize=(10, 5))
    for
 name, model in GLU_MODELS.items():
        y = model(X).detach().numpy()
        plt.plot(X.numpy(), y, linewidth=2, label=name)
    plt.title("GLU门控激活变体 曲线对比", fontsize=12)
    plt.xlabel("x")
    plt.ylabel("f(x)")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.tight_layout()
    plt.show()
    



# 2. GLU门控激活 梯度(dy/dx)对比

def
 plot_glu_gradients():
    plt.figure(figsize=(10, 5))
    X=X_CURVE.clone().reshape(-1,1)
    for
 name, model in GLU_MODELS.items():
        _, grad = compute_gradient(X, model)
        plt.plot(X.numpy(), grad, linewidth=2, label=f"{name} 梯度")
    plt.title("GLU门控激活变体 梯度对比", fontsize=12)
    plt.xlabel("x")
    plt.ylabel("dy/dx")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.tight_layout()
    plt.show()

# 3. GLU门控激活 输出概率分布对比

def
 plot_glu_distributions():
    X=X_CURVE.clone().reshape(-1,1)
    plt.figure(figsize=(12, 6))
    for
 name, model in GLU_MODELS.items():
        y = model(X).detach().numpy()
        plt.hist(y, bins=50, alpha=0.5, density=True, label=name)
    plt.title("GLU门控激活变体 输出分布对比(输入:标准正态)", fontsize=12)
    plt.xlabel("f(x) 输出值")
    plt.ylabel("概率密度")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.tight_layout()
    plt.show()
    
    
# ===================== 执行可视化 =====================

if
 __name__ == "__main__":

    print
("1. 绘制激活函数曲线...")
    plot_activation_curves()
    
    print
("2. 绘制激活函数梯度...")
    plot_activation_gradients()
    
    print
("3. 绘制激活函数输出分布...")
    plot_activation_distributions()
    
    print
("4. 绘制原生 vs PyTorch 对比...")
    plot_native_vs_torch()
    
    print
("1. 绘制GLU激活函数曲线...")
    plot_glu_activation_curves()
    
    print
("2. 绘制GLU激活函数梯度...")
    plot_glu_gradients()
    
    print
("3. 绘制GLU激活函数输出分布...")
    plot_glu_distributions()
    print
("绘制带参Swish函数曲线...")
    plot_swish_curve()
    
    print
("绘制带参Swish梯度曲线...")
    plot_swsh_gradient()
1. 绘制激活函数曲线...
2. 绘制激活函数梯度...
3. 绘制激活函数输出分布...
4. 绘制原生 vs PyTorch 对比...
5. 绘制GLU激活函数曲线...
6. 绘制GLU激活函数梯度...
7. 绘制GLU激活函数输出分布...
8. 绘制带参Swish函数曲线...
绘制带参Swish梯度曲线...

4. LLM中的应用

核心应用场景

SwiGLU 是现代 LLM Transformer Block 唯一稠密标准Block结构 :
Attention → LayerNorm → SwiGLU-FFN → LayerNorm

  1. 1. 替代传统 Linear+GELU+Linear,作为注意力后的特征提纯模块:

替换为:
$$
FFN_{\text{SwiGLU}}(x) = (xW_1 \odot \text{Swish}(xV_1))W_2
$$

  1. 1. 控制隐层维度为 4/3 d_model,在参数量与能力间取得最优平衡
  2. 2. 与 RMSNorm、Group Query Attention 共同构成 LLaMA 系基础架构

与同类FFN结构对比

激活函数
标准公式(原始论文/LLM主流实现)
核心学术特点
性能与应用
基础激活函数



Sigmoid
输出值域  ,连续可微;双侧梯度饱和区显著
性能一般,深层网络易梯度消失,仅用于门控分支
ReLU
单侧抑制,正向梯度恒为 1,计算高效;负向完全硬饱和,易神经元死亡
收敛快、稳定性中等,CNN 经典激活,LLM 中极少单独使用
GELU


:标准高斯累积分布函数)
平滑非单调,概率式门控,无尖锐拐点
性能较高,BERT/GPT-2 等早期 Transformer 标配
SiLU (Swish-1)
平滑非单调,无上界有下界,梯度传递稳定,计算轻量
性能优秀,现代 LLM 基础激活与门控核心单元
Swish (参数化)
SiLU 的泛化形式,  可学习/可固定,调节非线性曲率
灵活可调;工程中固定   退化为 SiLU
GLU 门控线性变体



GLU
原始门控线性单元,Sigmoid 生成软门控,自适应特征加权
门控能力中等,Sigmoid 仍存在梯度饱和
ReGLU
ReLU 替代 Sigmoid 门控,消除饱和,引入稀疏性
稳定性优于 GLU,稀疏性强但表达能力有限
GEGLU
融合 GELU 平滑性与门控机制,适配 NLP 语义建模
性能较高,早期大模型门控方案
SwiGLU
标准数学定义


FFN 完整定义(LLM 主流)
以 SiLU(Swish₁)做门控,平滑无饱和、无神经元死亡,门控动态性与梯度稳定性最优
性能最优
,LLaMA、Qwen、Llama 2、Mistral 等主流 LLM FFN 标配

工程特性

  • • 不依赖复杂算子,GPU/NPU 均能高效融合
  • • 门控机制天然抑制冗余特征,提升长文本建模稳定性
  • • 与预训练目标(下一词预测)高度匹配,困惑度显著更低

5. 工业落地应用

学术应用

  • • 语言模型、长上下文建模、代码大模型、多模态LLM FFN主干
  • • 序列表征、对话系统、语义理解的通用特征编码器

生产环境真实案例

  1. 1. Meta LLaMA-1/2/3 系列
    全层使用SwiGLU FFN,是开源大模型性能基准的核心结构之一
  2. 2. Mistral / Zephyr / SOLAR
    小参数量模型靠SwiGLU实现效率与能力的极致平衡
  3. 3. Google PaLM / Gemini 基座
    稠密段FFN采用SwiGLU变体,支撑万亿模型稳定训练
  4. 4. 自动驾驶多模态大模型(Tesla/新势力)
    文本-视觉特征融合FFN模块,兼顾实时性与表达能力

部署适配条件

  1. 1. 支持 Fused SiLU+Mul+Linear 算子融合,降低访存开销
  2. 2. 可直接支持 INT8/FP8 量化,门控值域平滑无异常
  3. 3. 端侧部署需做隐层维度裁剪或低秩分解
  4. 4. 无动态形状,适合批量推理与服务化

6. 优劣与技术边界

优势(量化/场景化)

  1. 1. 表达效率提升:同等参数量下,PPL 比 GELU-MLP 低 10%–15%
  2. 2. 训练更稳定:无死神经元,梯度方差降低约 30%
  3. 3. 泛化更强:长文本、少样本、代码任务上显著优于传统MLP
  4. 4. 部署友好:无复杂控制流,可极致算子优化

局限(理论+工程)

  1. 1. 参数量上升:相比传统MLP多一组线性投影,参数量+33%
  2. 2. 计算量略增:FLOPs 上升约 10%–20%
  3. 3. 理论缺陷:仍为稠密结构,无法自动稀疏化
  4. 4. 工程坑点:低精度量化时门控值域收缩需校准,否则精度掉点

替代方案对比

  • • GeGLU/ReGLU:近似效果,训练稳定性略差
  • • MoE FFN:稀疏化,能力更强但工程复杂
  • • 低秩SwiGLU:参数量压缩,推理更快但容量下降
  • • MLP-Mixer 类变体:更适用于CV,非LLM最优

7. 前沿进展+学习路径

近3年顶会核心突破

  1. 1. Sparse-SwiGLU (NeurIPS 2023):动态激活隐层维度,推理FLOPs降低50%
  2. 2. INT4/FP8 量化SwiGLU (ICLR 2024):门控值域量化校准方案
  3. 3. LoRA-SwiGLU (ICML 2024):低秩适配FFN,微调参数量减90%
  4. 4. Bidirectional SwiGLU:提升双向语言建模与检索效果

学习建议

必读论文

  1. 1. Y. N. Dauphin, A. Fan, M. Auli和D. Grangier, 《Language Modeling with Gated Convolutional Networks》, 2017年9月8日, arXiv: arXiv:1612.08083. doi: 10.48550/arXiv.1612.08083.
  2. 2. N. Shazeer, 《GLU Variants Improve Transformer》, 2020年2月12日, arXiv: arXiv:2002.05202. doi: 10.48550/arXiv.2002.05202.
  3. 3. P. Ramachandran, B. Zoph和Q. V. Le, 《Swish: a Self-Gated Activation Function》.
  4. 4. S. Elfwing, E. Uchibe和K. Doya, 《Sigmoid-Weighted Linear Units for Neural Network Function Approximation in Reinforcement Learning》, 2017年11月2日, arXiv: arXiv:1702.03118. doi: 10.48550/arXiv.1702.03118.
  5. 5. H. Touvron等, 《LLaMA: Open and Efficient Foundation Language Models》, arXiv.org. 见于: 2026年4月21日. [在线]. 载于: https://arxiv.org/abs/2302.13971v1
  6. 6. A. Chowdhery等, 《PaLM: Scaling Language Modeling with Pathways》, arXiv.org. 见于: 2026年4月21日. [在线]. 载于: https://arxiv.org/abs/2204.02311v5

实战项目

  1. 1. 手写迷你Llama Block,原生实现SwiGLU
  2. 2. 对比SwiGLU/GeGLU/ReLU-MLP在WikiText-103上的PPL
  3. 3. 实现SwiGLU的INT8量化与算子融合
  4. 4. 替换开源LLM的FFN,做消融实验

避坑指南

  1. 1. 隐层维度必须设为 4/3 d_model,否则性能显著下降
  2. 2. 训练时不要给SwiGLU加偏置项,LLM已验证无增益
  3. 3. 量化前先统计门控值域,避免饱和失真
  4. 4. 长上下文场景优先用SwiGLU,禁用ReLU-MLP

 

【声明】内容源于网络
0
0
AITimeHub
有用,有趣的科学、技术与文明
内容 183
粉丝 0
AITimeHub 有用,有趣的科学、技术与文明
总阅读1.5k
粉丝0
内容183