3 つの Transformer 形態
前 primer のブロックは、3 つの異なるアーキテクチャに組める。それぞれ別種のタスクに 最適化される。ブロック自体は変わらない —— 変わるのは 注意マスク、 そしてある場所のトークンが別の場所のトークンを見られるか否か。短い 4 トピック: 理解用の Encoder-only(BERT);生成用のDecoder-only(GPT —— 現代の LLM はすべてこれ);系列対系列のEncoder-Decoder ハイブリッド(T5、BART、元の Transformer); BERT を GPT に変える 1 行のコード —— 因果マスク(causal mask)。
Encoder-only —— BERT
文全体を一度に、双方向に読む。理解のために作られ、生成はしない。
encoder-only モデルは、注意マスクを持たない Transformer ブロックの積み重ね。各トークンが他の全トークンに注意する —— 左も右も。 出力は入力トークン毎に 1 つの文脈化ベクトル、各々が文全体に染められている。 BERT(2018)が代表例で、一族のテンプレートを定めた:RoBERTa、ALBERT、DeBERTa、 そして意味検索を支える文埋め込みモデル。
BERT の訓練法。双方向モデルは GPT のようには訓練できない —— 次トークン予測は自明だ、モデルは右を見て答えを写せばいい。BERT は代わりにマスク言語モデリングを使う:ランダムに 15% のトークンを隠し、特殊な[MASK] 記号に置き換え、両側の文脈で元を復元させる。デモはまさにこれ ——[MASK] スロットが左の「the cat」と右の「on the mat」から信号を引き、 「sat」を復元する。
得意なこと。各トークンが完全な文脈を見るので、encoder 出力は優れた表現になる。系列をラベルやその中のスパンへ写すタスク —— 感情分類、固有表現抽出、抽出型 QA、検索埋め込み —— が BERT の本拠地。 長年、「BERT を fine-tune」が NLP 分類問題の既定の第一手だった。
できないこと。生成。encoder は完全な入力を条件に全出力を一度に作る —— 「次トークン」の概念がなく、利用できる左→右の順序がなく、続きをサンプルする術もない。書くモデルが欲しいなら、双方向注意はまさに間違った道具、次の形態が要る。
Decoder-only —— GPT
左だけ見て次トークンを予測、追加、繰り返す。現代の LLM はすべてこの形態。
decoder-only モデルは同じブロックの積み重ねだが、因果マスク付き:各トークンは自分とその前のトークンにのみ注意でき、未来は決して見ない。 訓練目標は極めて単純 —— 各位置で同時に次トークンを予測する。これが GPT-2、GPT-3、 GPT-4、Llama、Qwen、DeepSeek、Mistral、Gemini のアーキテクチャ —— 本質的に今日の本番の全大規模言語モデル。
なぜこの形態が勝ったか。3 つの理由が重なった。第一、目標が自己教師ありで無制限:どんなテキストも訓練データになる、各位置の 「ラベル」はコーパスに既にある次トークンだから。人手注釈も、タスク専用データセットも不要 —— インターネット全体で次の単語を予測するだけ。第二、1 モデルが全タスクをこなす: テキスト続きとして枠付ければ、翻訳・要約・QA・コードが全て同じ次トークン問題になる。 第三、綺麗にスケールする —— 1 億パラメータで効いたレシピが 1000 億+ でも効いた。
訓練/推論の非対称。訓練時、モデルは系列全体を一度に見て全位置を並列予測 —— 因果マスクがそれを安全にする(位置 i は i+1 を覗いてズルできない)。 だが生成時はデモのループを回す:1 トークン予測、追加、長くなった系列を再投入、 再予測。だから 1,000 トークンの応答生成は 1,000 回の前向きを要し、KV キャッシュ(過去の key/value を保存し毎回再計算しない)が 推論の中心的最適化になる。
退役させるべき言い回し。「decoder-only」はやや誤解を招く名前 —— これらのモデルには decode する encoder がなく、cross-attention もない。 実際はただの因果言語モデル。「decoder」のラベルは元の encoder-decoder Transformer からの歴史的名残で、その decoder 半分は因果マスクと cross-attention の両方を持っていた。 現代の GPT は因果マスクを残し、cross-attention を捨て、名前を残した。
Encoder-Decoder —— T5、BART
入力を全部読み、それから出力を生成 —— cross-attention が橋渡し。
encoder-decoder 形態は 2017 年の元の Transformer で、前 2 つを組み合わせる。encoder(双方向、BERT 風)が入力全体を文脈ベクトル群 —— 固定の「memory」へ読み込む。decoder(因果、GPT 風)が出力を 1 トークンずつ生成する。両者の橋がcross-attention:各 decoder 層で、生成されたトークンが encoder の memory を振り返って見る。T5 と BART が最も有名な例。
cross-attention を正確に。decoder ブロックは実は 2 つの注意サブ層を持つ。 1 つ目はこれまで生成したトークン上の通常の因果自己注意(Q、K、V は全て decoder 由来)。 2 つ目が cross-attention:クエリは decoder 由来だが、キーと値は encoder の memory 由来。よって各出力トークンが「ソースのどの部分が今書いていることに 関係するか?」と問える。翻訳では、生成中の語が訳しているソース語を振り返る。
正しい形態である時。入力と出力が明確な境界を持つ別々の系列で、 入力が最初から完全に利用可能なとき、encoder-decoder が輝く。翻訳(仏入れ英出し)、 要約(長文入れ短要約出し)、音声認識が古典的な適合例。独立した encoder が入力に豊かな 双方向表現を与え、decoder が繰り返し参照できる。
それでも decoder-only に食われた理由。純 decoder でも翻訳はできる: 「French: … English: …」を与え、因果注意に両半を処理させればいい。理論上は不格好だが 実践で勝つ —— 2 スタックでなく 1 スタック、1 目標、そして明確な入出力分割のない 汎用指示追従にスケールする。GPT-3 の時代までに、分野は概ね decoder-only に集約した。 T5 系は焦点的な系列対系列タスクで依然強いが、最前線は decoder-only。
因果マスク
1 つの三角形の −∞ 行列が、BERT と GPT の全ての違い。
上の 3 形態は、突き詰めれば 1 つの問いに帰着する:トークンは未来を見られるか?encoder はイエス、decoder はノー。「ノー」を強制する機構が因果マスク —— そしてそれは滑稽なほど単純だ。自己注意 primer のスコア行列を思い出そう:n × nのグリッドで、第 (i, j) 要素はクエリトークン i がキートークンj にどれだけ注意するか。因果マスクは softmax の前に、j > i(キーがクエリに対し未来)の全要素を −∞ にする。
なぜ −∞、なぜ softmax の前か。softmax は各スコアを指数化する:e^(−∞) = 0。マスクされたセルは正規化後ちょうど重みゼロを寄与し、しかも —— 決定的に —— 分母にすら参加しない。残りの(過去 + 現在)セルが自分たちの間で再正規化し、 和が 1 になる。結果は厳密な下三角の注意行列:トークン i は全注意を トークン 0〜i に配り、それ以降はゼロ。コードでは大抵scores.masked_fill(mask == 0, float('-inf')) —— 1 行。
なぜこれが生成にまさに必要か。モデルが位置 i のトークンを 予測するとき、位置 0…i の情報のみ使わねばならない —— 推論時、i+1以降の位置はまだ存在しないから。因果マスクは訓練時もこれを保証し、 訓練時とテスト時の情報集合が完全に一致する。なければモデルはトークン i 自身 (やそれ以降)を覗いて i を予測することを学ぶ —— 訓練データで簡単に完璧、 生成では無用。マスクが「次トークン予測」を真の、ズルなしの学習問題にする。
統一像。Transformer ブロックは 1 つの固定設計。マスクが アーキテクチャを選ぶダイヤル:マスクなし → encoder(双方向、BERT);因果マスク → decoder(自己回帰、GPT);encoder スタック + 因果 decoder スタックを cross-attention で繋ぐ → encoder-decoder(T5)。同じブロック、同じ注意の数学、同じ FFN —— 1 つの三角行列が、理解するモデルか書くモデルかを決める。これで現代の LLM が組み上がる: トークン化 → 埋め込み + 位置 → N 個のマスク付きブロック → 最終 norm → 次トークン logits → サンプル → ループ。