【第四章:大模型(LLM)】09.最强开源大模型:Llama3 原理介绍与实现-(5)SwiGLU Activation function

第四章:大模型(LLM)

第九部分:最强开源大模型:Llama3 原理介绍与实现

第五节:SwiGLU Activation function

这一节我们来讲解 SwiGLU 激活函数,这是 Llama3 在前馈网络(Feed Forward Network, FFN)中采用的激活方式。


1️⃣ 背景:为什么要引入 SwiGLU?

在 Transformer 中,前馈网络(FFN) 占据了很大一部分计算量与参数量。
传统的激活函数(如 ReLU, GELU)虽然表现稳定,但在超大规模语言模型中,研究发现 门控型激活函数(Gated Activation Functions) 可以提升表达能力与训练稳定性。

代表性方法是 GLU(Gated Linear Unit)系列

  • 通过引入一个 门控机制(Gate),让输入在流入非线性函数之前被“选择性放大/抑制”。

  • 对语言建模尤其有效。


2️⃣ GLU 系列激活函数

(1) 基本 GLU

提出于 2016 年:

\text{GLU}(x) = (XW_1) \otimes \sigma(XW_2)

  • σ 是 Sigmoid 激活函数。

  • 第一个线性层 XW_1 产生“主分支”。

  • 第二个线性层 XW_2 产生“门控信号”,控制信息流。

(2) GELU-based GLU(GEGLU)

\text{GEGLU}(x) = (XW_1) \otimes \text{GELU}(XW_2)

  • GELU 替代 Sigmoid,提升了性能。

(3) Swish-based GLU(SwiGLU) —— Llama3 采用

\text{SwiGLU}(x) = (XW_1) \otimes \text{Swish}(XW_2)

其中 Swish 函数为:

\text{Swish}(z) = z \cdot \sigma(z)

相比 ReLU/GELU,Swish 具有更好的平滑性,梯度传播更稳定。


3️⃣ SwiGLU 的形式化定义

给定输入向量 X \in \mathbb{R}^d

  • 经过两组线性变换:

U = XW_1, \quad V = XW_2

  • 其中 U 是主分支,V 是门控分支。

SwiGLU 公式:

\text{SwiGLU}(X) = U \otimes \text{Swish}(V) = (XW_1) \otimes \left( (XW_2) \cdot \sigma(XW_2) \right)

其中 ⊗ 表示逐元素乘法。


4️⃣ Llama3 中的前馈网络结构(FFN with SwiGLU)

在 Llama3 的 Transformer Block 中,FFN 采用如下结构:

\text{FFN}(X) = (XW_1) \otimes \text{Swish}(XW_2) \cdot W_3

特点:

  • 仍然是 双分支结构(主分支 + 门控分支)。

  • SwiGLU 替代传统的 GELU/ReLU,提升表达能力。

  • 输出再经过第三个线性投影 W_3 回到模型维度。

PyTorch 实现(简化版)
import torch
import torch.nn as nn
import torch.nn.functional as F

class SwiGLU(nn.Module):
    def __init__(self, dim, hidden_dim):
        super().__init__()
        self.W1 = nn.Linear(dim, hidden_dim, bias=False)
        self.W2 = nn.Linear(dim, hidden_dim, bias=False)
        self.W3 = nn.Linear(hidden_dim, dim, bias=False)

    def forward(self, x):
        u = self.W1(x)
        v = self.W2(x)
        # Swish 激活:v * sigmoid(v)
        swish_v = v * torch.sigmoid(v)
        return self.W3(u * swish_v)

5️⃣ SwiGLU 的优势

  1. 更强的表达能力

    • 通过门控机制,允许 FFN 学习更复杂的非线性关系。

  2. 梯度更平滑

    • 相比 ReLU,Swish 避免了硬截断(ReLU 的 0 区域)。

    • 相比 GELU,Swish 在大规模训练中表现更稳定。

  3. 计算效率高

    • 只引入了一次额外的逐元素乘法,计算开销低。

  4. 实验效果

    • Meta 的实验表明,SwiGLU 在语言建模任务上优于 ReLU/GELU。

    • 成为了 Llama2/3 的默认选择。


6️⃣ 总结

  • 传统 FFN:两层 MLP + ReLU/GELU

  • Llama3 FFN:三层 MLP + SwiGLU

  • SwiGLU 的核心:门控机制 + Swish 激活

  • 收益:更高效的训练、更好的收敛、更强的表达能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值