トランスフォーマーブロックの積み重ね方
メニューを表示するにはスワイプしてください
123456789101112131415161718192021222324252627282930313233343536373839404142434445import torch import torch.nn as nn class EncoderBlock(nn.Module): def __init__(self, embed_dim, num_heads, ff_dim): super().__init__() self.attn = nn.MultiheadAttention(embed_dim, num_heads, batch_first=True) self.norm1 = nn.LayerNorm(embed_dim) self.ff = nn.Sequential( nn.Linear(embed_dim, ff_dim), nn.ReLU(), nn.Linear(ff_dim, embed_dim) ) self.norm2 = nn.LayerNorm(embed_dim) def forward(self, x): attn_output, _ = self.attn(x, x, x) x = self.norm1(x + attn_output) ff_output = self.ff(x) x = self.norm2(x + ff_output) return x class StackedEncoder(nn.Module): def __init__(self, num_layers, embed_dim, num_heads, ff_dim): super().__init__() self.layers = nn.ModuleList([ EncoderBlock(embed_dim, num_heads, ff_dim) for _ in range(num_layers) ]) def forward(self, x): for layer in self.layers: x = layer(x) return x # Example usage: stack 4 encoder blocks for input text embeddings embed_dim = 64 num_heads = 4 ff_dim = 256 num_layers = 4 stacked_encoder = StackedEncoder(num_layers, embed_dim, num_heads, ff_dim) input_tensor = torch.rand(2, 10, embed_dim) # batch_size=2, seq_len=10 output = stacked_encoder(input_tensor) print("Stacked encoder output shape:", output.shape)
テキストをTransformerで処理する際、エンコーダまたはデコーダブロックを複数積み重ねて使用することが一般的です。上記のコードでは、PyTorchを用いてエンコーダブロックをスタックする方法を示しています。各EncoderBlockは、マルチヘッド自己注意機構、フィードフォワードネットワーク、レイヤーノーマライゼーションを含みます。StackedEncoderクラスは、これらのブロックを連続して構築し、あるブロックの出力を次のブロックの入力として渡します。この積み重ねにより、各層でテキストのより複雑な表現を学習することが可能となります。NLPタスク、例えばテキスト分類や翻訳などでは、ブロックを積み重ねることでデータ内のより深い関係性や文脈を捉えることができます。初期入力(テキストを埋め込みに変換したもの)は各エンコーダブロックを通過し、それぞれのブロックが入力と前層で学習した文脈に基づいて表現を洗練させていきます。
Transformerアーキテクチャは、主に3つのタイプに分類でき、それぞれ異なるNLPタスクに適しています。
エンコーダ専用モデル
- 構成: エンコーダブロックを積み重ねた構造。
- 主な用途: テキストの理解や解析に最適。テキスト分類、感情分析、固有表現抽出などが代表的な応用例です。BERTはこのタイプの代表例です。
デコーダ専用モデル
- 構成: デコーダブロックを積み重ねた構造。
- 主な用途: テキスト生成に特化。言語モデリングやコード補完などが該当します。GPTはデコーダ専用モデルの代表例です。
エンコーダ・デコーダモデル
- 構成: 入力を処理するエンコーダブロックと、出力を生成するデコーダブロックを組み合わせ、エンコーダからデコーダへ情報が流れます。
- 主な用途: 入力と出力がともにシーケンスとなるシーケンス間変換タスクに利用されます。機械翻訳、要約、質問応答などが該当し、T5やオリジナルのTransformerがこのアーキテクチャの例です。
まとめると、アーキテクチャの選択によって解決できるNLP課題が決まります。解析にはエンコーダ専用モデル、生成にはデコーダ専用モデル、シーケンス変換にはエンコーダ・デコーダモデルが適しています。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 2. 章 6
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 2. 章 6