ChatGPTの仕組みから学ぶG検定対策講座⑤
Attentionの後で何をしているのか?MLP・GELU・残差接続
こんにちは。ゆうせいです。
前回は、Self-Attentionによって文章中のトークン同士の関係を調べ、必要な情報を取り込む仕組みを説明しました。
Transformer Blockの処理は、Self-Attentionだけでは終わりません。
Self-Attentionの後には、MLP(Multi-Layer Perceptron)と呼ばれるニューラルネットワークがあります。
Self-Attentionがトークン同士の情報交換を担当するのに対し、MLPは各トークンが持つ情報を個別に加工します。
今回は、Transformer Explainerの「MLP」を操作しながら、次の内容を確認します。
- Self-AttentionとMLPの役割の違い
- 768次元を3072次元へ拡張する理由
- GELU活性化関数
- 3072次元を768次元へ戻す処理
- 残差接続
- Layer NormalizationとDropout
Transformer BlockのMLPを開く
Transformer Explainerを開き、「Transformer Block」の中にある「MLP」をクリックしてください。
GPT-2 smallのTransformer Blockは、主に次の二つの処理で構成されています。
- Multi-Head Self-Attention
- MLP

GPT-2 smallでは、このTransformer Blockが12個積み重ねられています。各Blockを通るたびに、トークンの数値表現が少しずつ更新されます。
Self-AttentionとMLPの役割は異なる
Self-AttentionとMLPは、どちらもトークンの数値表現を変換しますが、役割が異なります。
| 処理 | 主な役割 | ほかのトークンとの情報交換 |
|---|---|---|
| Self-Attention | 文章中の関連する情報を集める | 行う |
| MLP | 集めた情報を各トークンの内部で加工する | 行わない |
Self-Attentionでは、あるトークンがほかのトークンを参照します。
例えば、次の文章を考えてみましょう。
この商品は性能が高い。
「高い」というトークンは、Self-Attentionによって「商品」や「性能」の情報を取り込みます。
その結果、「高い」が、山の高さではなく、性能の程度を表していると判断しやすくなります。
MLPは、Self-Attentionによって集めた情報を使い、それぞれのトークンの特徴をさらに加工します。
MLPは各トークンを個別に処理する
Self-Attentionでは、複数のトークンを同時に見て、それらの関係を計算しました。
一方、MLPは各トークンを一つずつ独立して処理します。
入力文が6個のトークンで構成されている場合、MLPには6個の768次元ベクトルが入力されます。
トークン1:768次元
トークン2:768次元
トークン3:768次元
トークン4:768次元
トークン5:768次元
トークン6:768次元
MLPは、それぞれのトークンに対して同じ変換を適用します。
トークン1:768 → 3072 → 768
トークン2:768 → 3072 → 768
トークン3:768 → 3072 → 768
トークン4:768 → 3072 → 768
トークン5:768 → 3072 → 768
トークン6:768 → 3072 → 768
MLPの中では、あるトークンが別のトークンを直接参照することはありません。
トークン同士の情報交換はSelf-Attentionで行い、MLPでは各トークンの情報を個別に加工するという分担になっています。
MLPは二つの線形変換で構成される
Transformer Explainerで使用されているGPT-2 smallのMLPには、二つの線形変換があります。
- 768次元から3072次元へ拡張する
- 3072次元から768次元へ戻す
二つの線形変換の間には、GELUという活性化関数が入ります。
768次元
↓
第1の線形変換
↓
3072次元
↓
GELU
↓
第2の線形変換
↓
768次元
Transformer Explainerでは、最初の線形変換で次元数を4倍に広げ、GELUを通した後、二つ目の線形変換で元の768次元へ戻す流れを確認できます。
線形変換とは何か
線形変換とは、入力された数値に重みを掛け、必要に応じてバイアスを加える処理です。
簡単な式で表すと、次のようになります。
出力 = 入力 × 重み + バイアス
ニューラルネットワークでは、重みとバイアスが学習によって調整されます。
例えば、3個の入力値から4個の出力値を作る場合、次のような変換が行われます。
[入力1, 入力2, 入力3]
↓
重みを掛けて加算
↓
[出力1, 出力2, 出力3, 出力4]
GPT-2 smallのMLPでは、768個の入力値を使って、3072個の出力値を作ります。
なぜ768次元を3072次元へ拡張するのか
768次元から3072次元へ広げると、モデルが情報を加工するための空間が大きくなります。
3072 = 768 × 4
元の768次元だけで処理するよりも、3072次元の広い空間へ一度展開したほうが、複雑な特徴の組み合わせを表現しやすくなります。
料理に例えると、狭いまな板よりも、広い調理台へ材料を広げたほうが、切る、混ぜる、分類するといった作業を行いやすくなります。
| 段階 | 料理の例 | MLPの処理 |
|---|---|---|
| 入力 | 材料を取り出す | 768次元のベクトル |
| 拡張 | 広い調理台へ材料を並べる | 3072次元へ変換 |
| 加工 | 切る、混ぜる、選別する | GELUによる非線形変換 |
| 出力 | 料理としてまとめる | 768次元へ戻す |
Transformer Explainerでは、この拡張によって、元の次元では捉えにくい複雑なパターンを表現しやすくなると説明されています。
次元を増やせば情報量も4倍になるのか
3072次元へ変換したからといって、元の情報量が単純に4倍になるわけではありません。
新しい事実や知識が外部から追加されるわけでもありません。
元の768個の数値を、学習済みの重みを使って、別の3072個の数値へ写し替えています。
重要なのは、同じ情報をより多くの観点から表現できるようになることです。
例えば、一つのトークンについて、次のような特徴の組み合わせを捉えやすくなります。
- 名詞として使われているか
- 肯定的な文脈か否定的な文脈か
- 人物、場所、物のどれに関係するか
- 文の主題にどの程度関係しているか
- 次のトークン予測にどの特徴が役立つか
ただし、3072個の各要素に、人間が理解できる明確な意味が一つずつ割り当てられているわけではありません。
線形変換だけでは複雑な関係を学びにくい
MLPには二つの線形変換があります。
しかし、二つの線形変換をそのまま連続させても、全体としては一つの線形変換と同じ種類の処理になってしまいます。
例えば、次のような処理を考えます。
入力
↓
線形変換A
↓
線形変換B
↓
出力
この二つは、計算上、一つの大きな線形変換としてまとめることができます。
それでは、ニューラルネットワークを深くする利点が小さくなります。
そこで、二つの線形変換の間に、活性化関数を入れます。
入力
↓
線形変換
↓
活性化関数
↓
線形変換
↓
出力
活性化関数によって非線形性が加わり、単純な直線だけでは表現できない複雑な関係を学習できるようになります。
GELUとは何か
GPT-2のMLPでは、GELUという活性化関数が使われます。
GELUは、Gaussian Error Linear Unitの略です。
活性化関数は、入力された数値をそのまま通すのではなく、値に応じて出力を変化させます。
簡単にいえば、次の処理を担当します。
どの情報を強く残し、どの情報を弱めるかを調整する
GELUは、入力値を滑らかに変換する活性化関数です。
Transformer Explainerでは、二つの線形変換の間にGELUを配置し、MLPへ非線形な変換を加えています。
ReLUとGELUの違い
GELUを理解するために、代表的な活性化関数であるReLUと比べてみましょう。
ReLUは、入力が0以下の場合は0を出力し、0より大きい場合は入力値をそのまま出力します。
入力が0以下の場合:0
入力が0より大きい場合:入力値をそのまま出力
| 入力 | ReLUの出力 |
|---|---|
| -3 | 0 |
| -1 | 0 |
| 0 | 0 |
| 1 | 1 |
| 3 | 3 |
ReLUでは、負の値をすべて0にします。
そのため、0の位置でグラフが折れ曲がります。
一方のGELUは、0を境に機械的に切り捨てるのではなく、入力値に応じて滑らかに変化します。
| ReLU | GELU |
|---|---|
| 負の値を原則として0にする | 負の値も一部残す |
| 0の位置で折れ曲がる | 滑らかに変化する |
| 単純で計算しやすい | 入力を段階的に調整する |
GELUは情報を滑らかに選別する
GELUのイメージは、完全なオンとオフを切り替えるスイッチというよりも、音量を滑らかに調整するつまみに近いものです。
ReLUを単純化すると、次のような判断です。
正なら通す。負なら止める。
GELUは、次のような判断に近くなります。
重要そうなら大きく通し、重要性が低そうなら弱めて通す。
実際には、GELUが人間のように情報の重要性を理解しているわけではありません。
学習された数値と活性化関数の働きによって、結果的に必要な特徴を残し、不要な特徴を弱められるようになります。
3072次元から768次元へ戻す
GELUで変換した後は、二つ目の線形変換を行います。
3072次元 → 768次元
Transformer Blockの入出力は768次元で統一されているため、MLPの出力も768次元へ戻します。
これにより、次のTransformer Blockへ同じ形式でデータを渡せます。
Transformer Block 1:768次元を入力し、768次元を出力
Transformer Block 2:768次元を入力し、768次元を出力
Transformer Block 3:768次元を入力し、768次元を出力
……
Transformer Block 12:768次元を入力し、768次元を出力
途中で3072次元へ広げるのは、内部で複雑な変換を行うためです。Blockの外へ出すときには、元の768次元へ戻します。
768次元へ戻すのは情報圧縮なのか
3072次元から768次元へ戻すため、オートエンコーダーのような情報圧縮を連想するかもしれません。
しかし、MLPの主な目的は、データを小さく保存することではありません。
3072次元の空間で非線形な変換を行い、その結果を次のTransformer Blockで扱える768次元へ射影することが目的です。
| 処理 | 主な目的 |
|---|---|
| オートエンコーダーの圧縮 | 少ない次元へ本質的な特徴をまとめる |
| TransformerのMLP | 高次元で特徴を加工し、元の形式へ戻す |
残差接続とは何か
Transformer Blockの図を見ると、Self-AttentionやMLPを迂回するような線があります。
これは、Residual Connectionです。
日本語では、残差接続またはスキップ接続と呼ばれます。
残差接続では、変換前の入力を、変換後の出力へ足します。
最終的な出力
= 元の入力
+ 層で変換した結果
例えば、MLPの入力をx、MLPによる変換をF(x)とすると、出力は次のように表せます。
x + F(x)
入力された情報をすべて作り直すのではなく、元の情報へ必要な変化だけを加える仕組みです。
残差接続を文章の修正に例える
残差接続は、文章を一から書き直すのではなく、元の文章に修正点を加える作業に例えられます。
元の文章が次の内容だったとします。
Transformerは文章を処理します。
これに補足情報を加えます。
トークン同士の関係をAttentionで計算する。
元の文章を捨てずに補足を加えると、次のようになります。
Transformerは、トークン同士の関係をAttentionで計算しながら文章を処理します。
残差接続も、元の情報を残しながら、各層で学習した変化を加えます。
残差接続が必要な理由
ニューラルネットワークを深くすると、多くの層を通じて複雑な特徴を学習できます。
一方で、層が深くなるほど、学習時の勾配が前の層まで伝わりにくくなることがあります。
これが、勾配消失問題です。
残差接続は、層を迂回する経路を用意します。
通常の経路
入力 → 複雑な変換 → 出力
残差接続を含む経路
入力 ─────────────┐
↓ │
複雑な変換 │
↓ │
変換結果 + 元の入力 ←┘
この近道を通じて、情報や勾配が前の層まで伝わりやすくなります。
Transformer Explainerでは、残差接続が深いモデルの学習を助け、勾配消失を軽減する仕組みとして説明されています。GPT-2では、各Transformer Block内のAttentionとMLPの周辺で残差接続が使われています。
残差接続は処理を省略する仕組みではない
スキップ接続という名前から、Self-AttentionやMLPの処理を実行せずに飛ばす機能だと誤解することがあります。
しかし、通常はSelf-AttentionやMLPの処理も実行されます。
その出力へ、処理前の入力を加えます。
| 誤解 | 実際の処理 |
|---|---|
| MLPを実行せずに飛ばす | MLPを実行し、元の入力も加える |
| 元の情報だけを使う | 元の情報と変換後の情報を組み合わせる |
| 計算量をなくす | 深いモデルを学習しやすくする |
Layer Normalizationとは何か
Transformer Blockでは、Layer Normalizationも使われます。
日本語では、層正規化と呼ばれます。
ニューラルネットワークの各層を通る数値は、極端に大きくなったり、ばらつきが大きくなったりすることがあります。
Layer Normalizationは、各トークンの特徴量について、平均や分散を基準に値を整えます。
イメージとしては、単位や尺度が異なる複数の数値を、比較しやすい状態へそろえる処理です。
| 正規化前のイメージ | 正規化後のイメージ |
|---|---|
| 値の大きさやばらつきが不安定 | 一定の範囲で扱いやすくなる |
| 層ごとに分布が変わりやすい | 学習が安定しやすくなる |
Transformer Explainerでは、GPT-2の各Transformer BlockでLayer NormalizationがSelf-AttentionとMLPの前に使われる構成が示されています。
Layer Normalizationはデータの意味を消さないのか
数値をそろえると、トークンが持っていた情報まで失われるように感じるかもしれません。
Layer Normalizationには、正規化した後の値を調整するための学習可能なパラメータがあります。
単純にすべての値を同じにするのではありません。
値の分布を整えたうえで、モデルが必要な大きさや位置関係を学習できるようにします。
Dropoutとは何か
Transformer Blockでは、Dropoutも使われます。
Dropoutは、学習中に一部の出力をランダムに無効化する正則化手法です。
通常の出力
[0.4, 0.8, -0.2, 0.5, 0.7]
Dropoutのイメージ
[0.4, 0, -0.2, 0, 0.7]
毎回同じ場所が無効になるわけではありません。
学習のたびに異なる場所がランダムに選ばれます。
特定のニューロンだけに頼ることを防ぎ、未知のデータにも対応しやすいモデルを作ることが目的です。
Transformer Explainerでは、Dropoutは過学習を抑えるための補助的な仕組みとして説明されています。推論時にはDropoutを無効にします。
研修チームに例えると
Dropoutは、ある業務を特定の社員一人だけに任せないことに例えられます。
いつも同じ社員だけが重要な作業を担当していると、その社員が不在になったときに業務が止まります。
学習中に担当者をランダムに休ませることで、ほかの社員も同じ作業を担当できるようにします。
| ニューラルネットワーク | 研修チームの例 |
|---|---|
| 特定のニューロンへ依存する | 特定の社員に業務が集中する |
| Dropoutで一部を無効にする | 担当者をランダムに休ませる |
| 複数のニューロンが特徴を学ぶ | 複数の社員が業務を習得する |
| 未知のデータへ対応しやすくなる | 担当者が変わっても業務を継続できる |
Transformer Block全体の流れ
ここまでに説明した処理をまとめると、Transformer Blockでは、おおよそ次の流れでトークンを処理します。
入力
↓
Layer Normalization
↓
Multi-Head Self-Attention
↓
残差接続で元の入力を加える
↓
Layer Normalization
↓
MLP
├ 768次元から3072次元へ拡張
├ GELUで非線形変換
└ 3072次元から768次元へ戻す
↓
残差接続でMLP前の入力を加える
↓
次のTransformer Blockへ
Self-Attentionでは、トークン間で情報を交換します。
MLPでは、各トークンが取り込んだ情報を個別に加工します。
Layer Normalizationで数値を扱いやすく整え、残差接続で元の情報と勾配の通り道を確保します。
学習時にはDropoutも使い、特定の経路への依存を抑えます。
12個のTransformer Blockで表現を深める
GPT-2 smallでは、同じ基本構造を持つTransformer Blockが12個積み重なっています。
ただし、それぞれのBlockで使用される重みは異なります。
そのため、すべてのBlockがまったく同じ処理結果を出すわけではありません。
下位のBlockでは、比較的基本的な関係が処理され、Blockを重ねるにつれて、より文脈を反映した表現へ変化していきます。
最初の埋め込み
「高い」というトークンの基本的な表現
↓
前半のTransformer Block
周囲の語や文法的な関係を反映
↓
後半のTransformer Block
文章全体の文脈や次トークン予測に必要な特徴を反映
↓
最終的な表現
複数のTransformer Blockを通じて、各トークンの表現が段階的に更新されます。
Transformer Explainerで確認するポイント
Transformer ExplainerのMLPとTransformer Blockを操作し、次の点を確認してください。
- Self-Attentionの出力がMLPへ渡される
- MLPはトークンを一つずつ独立して処理する
- 最初の線形変換で768次元から3072次元へ広がる
- 二つの線形変換の間にGELUがある
- 二つ目の線形変換で3072次元から768次元へ戻る
- Self-AttentionとMLPの周囲に残差接続がある
- Self-AttentionとMLPの前にLayer Normalizationがある
- GPT-2 smallでは同様のTransformer Blockが12個積み重なっている
今回のまとめ
- Transformer Blockは、Self-AttentionとMLPを中心に構成される
- Self-Attentionはトークン同士で情報を交換する
- MLPは各トークンを独立して加工する
- GPT-2 smallのMLPでは、768次元を3072次元へ拡張する
- 高次元へ広げることで、複雑な特徴を表現しやすくなる
- 二つの線形変換の間にはGELU活性化関数がある
- GELUによって非線形な関係を学習できる
- 処理後は3072次元から768次元へ戻す
- 残差接続は、元の入力へ変換結果を加える仕組みである
- 残差接続によって、深いモデルでも情報や勾配を伝えやすくなる
- Layer Normalizationは数値の分布を整え、学習を安定させる
- Dropoutは特定のニューロンへの依存を抑え、過学習を防ぐ
次回は、12個のTransformer Blockを通過した結果から、どのように次のトークンを選ぶのかを解説します。
Transformer Explainerを操作しながら、Logit、Softmax、Temperature、Top-k、Top-pの役割を確認します。
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。
最新の投稿
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座⑥
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座⑤
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座④
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座③
