剖析 Transformer

使用 PyTorch 的 Transformer 模型

James Chapman

Curriculum Manager, DataCamp

改变一切的论文…

 

  • Ashish Vaswani 等:《Attention Is All You Need》(arXiv:1706.03762)
    • 注意力机制
    • 为文本建模优化
    • 应用于大型语言模型(LLM)

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

改变一切的论文…

 

  • Ashish Vaswani 等:《Attention Is All You Need》
    • 注意力机制
    • 为文本建模优化
    • 应用于大型语言模型(LLM)

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

改变一切的论文…

 

  • Ashish Vaswani 等:《Attention Is All You Need》
    • 注意力机制
    • 为文本建模优化
    • 应用于大型语言模型(LLM)

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

拆解 Transformer…

 

编码器块
  • 多个相同的层
  • 读取处理输入序列
  • 生成具备上下文的数值表示
  • 使用自注意力前馈网络

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

拆解 Transformer…

 

解码器块
  • 编码后的输入序列 → 输出序列

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

拆解 Transformer…

 

位置编码
  • 编码序列中每个 token 的位置
  • 顺序对序列建模至关重要

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

拆解 Transformer…

注意力机制
  • 关注重要 token 及其关系
  • 提升文本生成

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

拆解 Transformer…

注意力机制
  • 关注重要 token 及其关系
  • 提升文本生成
自注意力
  • 为 token 重要性加权
  • 捕获长程依赖

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

拆解 Transformer…

注意力机制
  • 关注重要 token 及其关系
  • 提升文本生成
自注意力
  • 为 token 重要性加权
  • 捕获长程依赖
多头注意力
  • 将输入拆分为多个"头"
  • 各头捕捉不同模式,表示更丰富

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

拆解 Transformer…

 

逐位置前馈网络
  • 简单神经网络进行变换
  • 各 token 独立变换
  • 与位置无关/"逐位置"

学术论文《Attention Is All You Need》中的 Transformer 架构示意图。

使用 PyTorch 的 Transformer 模型

PyTorch 中的 Transformer

 

  • d_model:模型输入的维度
  • nheads:注意力头数量
  • num_encoder_layers:编码器层数
  • num_decoder_layers:解码器层数
import torch.nn as nn


model = nn.Transformer(
d_model=512,
nhead=8,
num_encoder_layers=6,
num_decoder_layers=6
)
print(model)
使用 PyTorch 的 Transformer 模型
Transformer(
  (encoder): TransformerEncoder(
    (layers): ModuleList(
      (0-5): 6 x TransformerEncoderLayer(
        (self_attn): MultiheadAttention(
          (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)
        )
        (linear1): Linear(in_features=512, out_features=2048, bias=True)
        (dropout): Dropout(p=0.1, inplace=False)
        (linear2): Linear(in_features=2048, out_features=512, bias=True)
        (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.1, inplace=False)
        (dropout2): Dropout(p=0.1, inplace=False)
      )
    )
    (norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
  )
  ...
使用 PyTorch 的 Transformer 模型
  (decoder): TransformerDecoder(
    (layers): ModuleList(
      (0-5): 6 x TransformerDecoderLayer(
        (self_attn): MultiheadAttention(
          (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)
        )
        (multihead_attn): MultiheadAttention(
          (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)
        )
        (linear1): Linear(in_features=512, out_features=2048, bias=True)
        (dropout): Dropout(p=0.1, inplace=False)
        (linear2): Linear(in_features=2048, out_features=512, bias=True)
        (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (norm3): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.1, inplace=False)
        (dropout2): Dropout(p=0.1, inplace=False)
        (dropout3): Dropout(p=0.1, inplace=False)
      )
    )
    (norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
  )
)
使用 PyTorch 的 Transformer 模型

让我们来练习!

使用 PyTorch 的 Transformer 模型

Preparing Video For Download...