1. 简介

在自然语言处理与推荐系统中,Transformer 已经成为了主流的骨干网络。它的核心在于两个关键组件:自注意力层 (Self-Attention)前馈神经网络 (Feed-Forward Network, FFN)

本篇博客旨在测试博客的数学公式渲染(KaTeX)能力和架构图绘制(Mermaid)能力。


2. Transformer 编码器结构图

首先,我们可以用纯文本画出一个 Transformer Block 的基本构成(得益于博客的 mermaid 渲染支持):

graph TD
    Input[输入词向量 X] --> AddNorm1[Add & Norm]
    Input --> MultiHead[Multi-Head Attention]
    MultiHead --> AddNorm1
    AddNorm1 --> AddNorm2[Add & Norm]
    AddNorm1 --> FFN[Feed Forward Network]
    FFN --> AddNorm2
    AddNorm2 --> Output[输出特征 H]
    
    style Input fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
    style Output fill:#e8f5e9,stroke:#388e3c,stroke-width:2px

如上图所示,Transformer 的每一层都由两个主要的子层组成。


3. Self-Attention 核心公式

自注意力机制允许网络理解长距离上下文。其核心公式为缩放的点积注意力(Scaled Dot-Product Attention):

$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$

其中:

  • $Q$ 代表 Query(查询向量)的矩阵表示。
  • $K$ 代表 Key(键向量)的矩阵表示。
  • $V$ 代表 Value(值向量)的矩阵表示。
  • $\sqrt{d_k}$ 是缩放因子,用于防止 softmax 函数进入梯度极小的饱和区。

如果表示为单个头的代码逻辑,大概如下:

import torch
import torch.nn.functional as F
import math

def scaled_dot_product_attention(q, k, v):
    d_k = q.size(-1)
    # 计算 Q 和 K 的点积,并缩放
    scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(d_k)
    # 对最后一个维度进行 softmax 操作得到注意力权重
    p_attn = F.softmax(scores, dim=-1)
    # 最后乘上 V
    return torch.matmul(p_attn, v), p_attn

4. FFN (Feed-Forward Network)

FFN 是一个分别独立应用于每个位置的逐位置两层全连接网络,中间通常使用 ReLU(或 GELU)激活函数:

$$ \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 $$

在此过程中,输入的特征维度通常从模型维度 $d_{model}$ 被映射到更大的隐藏层维度 $d_{ff}$(如 4 倍放大),随后再被降维回 $d_{model}$,这极大地增强了模型的非线性表达能力。

小结:通过这篇文章,我们成功在博客中渲染了复杂的数学公式与基于 Mermaid 的 Transformer 层结构图,说明我们的学术阅读环境已经配置妥当!