🎓 レベル:標準 | 重要度:B(標準)
📎 前提:再帰型ニューラルネットワーク・Transformer(系列モデル)
要点(BLUF)
- 自己回帰モデルは、同時分布 を確率の乗法定理でそのまま に分解し、1要素ずつ条件付きで生成する生成モデルです。
- 最大の強みは厳密な尤度を計算できること。GANのような暗黙モデルや、VAEのような変分下界での近似と違い、対数尤度を直接最大化できます。
- 最大の弱みは生成が逐次で遅いこと。 要素を作るのに 回のフォワードが必要です。GPT系の大規模言語モデルはこの枠組みの最大規模の実装です。
1. 尤度の連鎖分解(チェインルール)
自己回帰モデルの出発点は、確率の**乗法定理(チェインルール)**そのものです。任意の同時分布は、要素に順序を一つ固定すれば、必ず次のように積に分解できます。
ここで は「 番目より前の全要素」を表します。
要するに: どんな複雑な同時分布も、「直前までを知った上で次の1個を当てる」条件付き分布の掛け算に厳密に書き換えられる、というだけの話です。近似は一切入っていません。自己回帰モデルがやるのは、この各因子 をニューラルネットワークでモデル化することだけです。
なぜ「厳密な尤度」が計算できるのか
この分解が無条件で成り立つのが効いています。対数を取ると積が和になり、
となります。各 をネットワークが出力する正規化済みの分布(離散ならソフトマックス、連続なら混合分布など)で表せば、右辺はそのまま厳密に評価できる対数尤度です。
これが自己回帰モデルの理論的な美点です。
- VAE は対数尤度に手が届かず、変分下界(ELBO)という下界を最大化します(→ オートエンコーダとVAE)。
- GAN はそもそも尤度を明示的に持たない暗黙的生成モデルです。
- 自己回帰モデルは を直接・厳密に計算して最大化します。だから最尤推定の理論(→ 最尤法・モーメント法(推定量の作り方と最尤推定量の漸近論)(統計))がそのまま使え、学習が安定します。
補足:ただし「厳密尤度が計算できる」ことと「真の分布をうまく表現できる」ことは別問題です。表現力はネットワークの容量と順序の選び方に依存します。
2. 逐次生成(サンプリング)
学習した各条件付き分布から、前から順に1個ずつ引いて、引いた値を次の条件に加える——これを繰り返すのが生成です。
- をサンプリングする
- いま得た を条件にして を引く
- を条件にして を引く
- … これを まで繰り返す
flowchart LR
S(("開始")) --> P1["p(x1) からサンプリング"]
P1 -->|"x1 を確定"| P2["p(x2 | x1) からサンプリング"]
P2 -->|"x1, x2 を確定"| P3["p(x3 | x1, x2) からサンプリング"]
P3 -->|"逐次に条件を拡張"| PN["p(xn | x1 … xn-1) からサンプリング"]
PN --> E(("系列 x1 … xn 完成"))
要するに: 生成は「左から右へ書き進める」作業です。途中で前に戻ることはなく、確定した過去だけを条件に次を決めます。だから1回のフォワードでは1要素しか出ません。ここが「逐次で遅い」という弱点の正体です。
連鎖分解と逐次生成は表裏一体
学習では尤度の分解 を最大化し、生成では同じ条件付き分布を前から順にサンプリングする——同じ分解を、評価に使うか生成に使うかの違いです。
graph TD
J["同時分布 p(x)"] -->|"乗法定理で分解"| C["条件付き分布の積 ∏ p(xt | x<t)"]
C -->|"和に直して最大化(学習)"| L["対数尤度 ∑ log p(xt | x<t)"]
C -->|"前から順に引く(生成)"| G["逐次サンプリング x1 → x2 → … → xn"]
3. 実装の系譜:画像・音声・言語
条件付き分布 を「何で」「どんな順序で」モデル化するかで、代表的なアーキテクチャが分かれます。共通する制約は因果性(causality)——予測時に未来の要素を覗いてはいけない、という一点です。
| 領域 | 代表モデル | 順序 | の作り方 |
|---|---|---|---|
| 画像 | PixelRNN / PixelCNN | ピクセルを左上から右下へ(ラスタ走査) | RNN / マスク付き畳み込み |
| 音声 | WaveNet | 波形サンプルを時間順 | 因果的(causal)な拡張畳み込み |
| 言語 | GPT系 | トークンを左から右へ | マスク付き自己注意(Transformer) |
画像:PixelRNN / PixelCNN
van den Oord ら(2016)が提案。画像のピクセルにラスタ走査順(左上から、行ごとに左→右、上→下)を入れて、各ピクセル(さらにRGBサブピクセル)を離散カテゴリ(0〜255)上のソフトマックスとして、それまでに生成済みのピクセルから予測します。
- PixelRNN:再帰型ニューラルネットワークの隠れ状態で過去ピクセルを要約。表現力は高いが学習が遅い。
- PixelCNN:再帰をマスク付き畳み込みに置き換えた版。フィルタの「現在ピクセルより後ろ(下・右)」の重みを0にマスクし、因果性を保ちます。畳み込みなので学習は並列化できて速い(生成は依然として逐次)。
落とし穴メモ:素朴なマスク付き畳み込みは受容野に**ブラインドスポット(盲点)**が生じます。後続の Gated PixelCNN は畳み込みを「縦スタック+横スタック」に分けてこれを解消しました。細部ですが「マスクだけでは不十分」という典型例です。
音声:WaveNet
波形を1サンプルずつ、過去サンプルから予測します。RNNを使わず**因果的な拡張畳み込み(dilated causal convolution)**を積むことで、長い時間範囲(広い受容野)を少ない層で扱います。やはり の積という同じ骨格です。
言語:GPT系(次トークン予測)
自己回帰の最大規模の実装です。文を構成するトークンに左→右の順序を入れ、各位置で次トークンの分布(語彙上のソフトマックス)を予測します。本体は Transformer のデコーダで、**マスク付き自己注意(causal self-attention)**により「各位置から見えるのは自分以前のトークンだけ」という因果性を強制します。
ここがTransformerの効きどころで、
- 学習時は並列:全位置の「次トークン予測」をマスク付き自己注意で一度のフォワードで同時に計算・採点できる(教師信号は入力を1つずらしたもの)。
- 生成時は逐次:1トークン出すたびにそれを入力末尾に足して、また1回フォワード——これは避けられません。
flowchart LR
subgraph 学習["学習(並列・マスク付き自己注意)"]
T["入力系列を一括投入"] -->|"全位置の次トークン予測を同時採点"| LL["∑ log p(トークン_t | 過去)"]
end
subgraph 生成["生成(逐次)"]
G1["次トークンを1個サンプル"] -->|"末尾に追加して再投入"| G1
end
4. teacher forcing と訓練/生成のギャップ
自己回帰モデルの学習はほぼ例外なく teacher forcing(教師強制) で行います。
- 学習時:各位置の条件 に、モデル自身の予測ではなく正解(ground truth)の過去を与えます。だから全位置の予測を独立に・並列に採点でき、勾配も安定します。
- 生成時:正解は存在しないので、条件はモデルが自分で生成した過去になります。
この訓練と生成の条件の食い違いを exposure bias(露出バイアス) と呼びます。学習中モデルは「常に正しい前文」しか見たことがないため、生成で一度ミスをして分布から外れた前文を作ると、その後の予測が次々ずれ、誤差が累積しやすくなります(長文生成での品質劣化の一因)。
要するに: teacher forcing は学習を速く安定させる代わりに、「自分の失敗を条件にした状況」をモデルに経験させません。緩和策として scheduled sampling(学習中に時々モデル自身の予測を条件に混ぜる)などが提案されていますが、大規模言語モデルでは素朴な teacher forcing でも実用上強力に機能しています。
5. 長所と短所
長所
- 厳密な尤度: を直接計算・最大化できる。尤度比較・密度推定・圧縮などに使え、最尤推定の理論にそのまま乗る。
- 高品質:条件付き分布を一つずつ丁寧に当てるため、画像・音声・テキストで高い品質を出せる。
- 学習が安定:教師あり的に「次を当てる」問題に帰着し、teacher forcing で並列・安定に最適化できる。GANの敵対的学習のような不安定さがない。
短所
- 生成が逐次で遅い: 要素の生成に 回の逐次フォワードが要る。高解像度画像や長文では決定的なボトルネック。学習は並列化できても生成は本質的に直列。
- 順序を人が決める:本来順序を持たないデータ(画像など)にも人工的な順序を入れる必要があり、選び方が性能・受容野に影響する。
- 長距離依存と誤差累積:有限の文脈しか持てず、exposure bias による誤差の累積も起きうる。
graph LR
A["自己回帰モデル"] -->|"長所"| B["厳密尤度・高品質・学習安定"]
A -->|"短所"| C["逐次生成で遅い(n要素にn回)"]
A -->|"短所"| D["順序を人が決める・誤差累積"]
比較の視点:拡散モデルは「ノイズ除去のステップ数」を減らせば速くでき、GANは1回のフォワードで生成できます。一方で自己回帰は厳密尤度という別の強みを持ちます。「速さ(GAN・蒸留した拡散)」「尤度(自己回帰)」「品質と安定(拡散)」のトレードオフとして整理すると見通しが良いです。
6. 大規模言語モデル(LLM)への直結
LLM は、要素=トークン・モデル=Transformerデコーダにした、大規模な自己回帰モデルそのものです。 本ノートの がそのまま「次トークン予測」になり、teacher forcing で事前学習し、生成は逐次デコードします。事前学習・微調整・推論最適化(KVキャッシュ等で逐次生成の遅さを緩和)といったLLM固有の論点は 大規模言語モデル 目次 に続きます。
⚠️ よくある誤解・落とし穴
- 「自己回帰=RNN専用」ではない。 自己回帰は という分解の枠組みの名前であって、特定アーキテクチャの名前ではありません。RNN(PixelRNN)でも、マスク付き畳み込み(PixelCNN・WaveNet)でも、マスク付き自己注意(GPT系)でも実装できます。むしろ近年の主流は Transformer ベースです。
- 順序の決め方は自明ではない。 言語や音声のように自然な時間順があるデータは良いですが、画像のように本来順序を持たないデータでは、ラスタ走査などの人工的な順序を入れます。順序が変われば各因子の条件も変わり、受容野や性能に影響します。
- 「逐次で遅い」のは生成だけ。 学習は teacher forcing と並列アーキテクチャ(畳み込み・自己注意)で並列化できます。遅いのは**生成(サンプリング)**で、 要素に 回のフォワードが原理的に必要、という点です。
- 厳密尤度=最高品質ではない。 対数尤度を厳密に最大化できることと、人が見て良いサンプルになることは別軸です。尤度は良くても知覚的な品質は別途評価が要ります。
対応するシミュレーション
simulations/autoregressive_generation.py:文字レベルの n-gram モデルを学習し、連鎖則 に従って「直前の数文字」を条件に次の文字を確率的に選び、新しい文字列を1文字ずつ自己回帰的に生成します。学習テキストに似た“それっぽい”出力ができること、ある文脈に続く文字の条件付き分布を可視化します。GPT 系はこの「次トークン予測」を Transformer で行う自己回帰モデルです(生成温度は 推論の実務)。
