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をひも解く...

 

位置エンコーディング
  • 各トークンの系列内の_位置_を符号化
  • 順序は系列モデリングに不可欠

学術論文「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をひも解く...

注意機構
  • 重要なトークンと関係に注目
  • 文章生成を改善
自己注意
  • トークン重要度の重み付け
  • 長距離依存関係を捉える
マルチヘッド注意
  • 入力を複数のヘッドに分割
  • 各ヘッドが異なるパターンを捉え、表現が豊かに

学術論文「Attention Is All You Need」に示されたTransformerのアーキテクチャ。

PyTorchで学ぶTransformerモデル

Transformerをひも解く...

 

位置ごとのフィードフォワードネットワーク
  • 変換を適用するシンプルなNN
  • 各トークンを_独立_に変換
  • 位置非依存("position-wise")

学術論文「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モデル

Laten we oefenen!

PyTorchで学ぶTransformerモデル

Preparing Video For Download...