← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:B(標準)

📎 前提:再帰型ニューラルネットワークTransformer(系列モデル)

要点(BLUF)


1. 尤度の連鎖分解(チェインルール)

自己回帰モデルの出発点は、確率の**乗法定理(チェインルール)**そのものです。任意の同時分布は、要素に順序を一つ固定すれば、必ず次のように積に分解できます。

p(x)=p(x1,x2,,xn)=t=1np(xtx1,x2,,xt1)=t=1np(xtx<t)p(x) = p(x_1, x_2, \dots, x_n) = \prod_{t=1}^{n} p(x_t \mid x_1, x_2, \dots, x_{t-1}) = \prod_{t=1}^{n} p(x_t \mid x_{<t})

ここで x<t=(x1,,xt1)x_{<t} = (x_1, \dots, x_{t-1}) は「tt 番目より前の全要素」を表します。

要するに: どんな複雑な同時分布も、「直前までを知った上で次の1個を当てる」条件付き分布の掛け算に厳密に書き換えられる、というだけの話です。近似は一切入っていません。自己回帰モデルがやるのは、この各因子 p(xtx<t)p(x_t\mid x_{<t}) をニューラルネットワークでモデル化することだけです。

なぜ「厳密な尤度」が計算できるのか

この分解が無条件で成り立つのが効いています。対数を取ると積が和になり、

logp(x)=t=1nlogp(xtx<t)\log p(x) = \sum_{t=1}^{n} \log p(x_t \mid x_{<t})

となります。各 p(xtx<t)p(x_t\mid x_{<t}) をネットワークが出力する正規化済みの分布(離散ならソフトマックス、連続なら混合分布など)で表せば、右辺はそのまま厳密に評価できる対数尤度です。

これが自己回帰モデルの理論的な美点です。

補足:ただし「厳密尤度が計算できる」ことと「真の分布をうまく表現できる」ことは別問題です。表現力はネットワークの容量と順序の選び方に依存します。


2. 逐次生成(サンプリング)

学習した各条件付き分布から、前から順に1個ずつ引いて、引いた値を次の条件に加える——これを繰り返すのが生成です。

  1. x1p(x1)x_1 \sim p(x_1) をサンプリングする
  2. いま得た x1x_1 を条件にして x2p(x2x1)x_2 \sim p(x_2\mid x_1) を引く
  3. (x1,x2)(x_1, x_2) を条件にして x3p(x3x1,x2)x_3 \sim p(x_3\mid x_1, x_2) を引く
  4. … これを xnx_n まで繰り返す
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要素しか出ません。ここが「逐次で遅い」という弱点の正体です。

連鎖分解と逐次生成は表裏一体

学習では尤度の分解 tp(xtx<t)\prod_t p(x_t\mid x_{<t}) を最大化し、生成では同じ条件付き分布を前から順にサンプリングする——同じ分解を、評価に使うか生成に使うかの違いです。

graph TD
    J["同時分布 p(x)"] -->|"乗法定理で分解"| C["条件付き分布の積 ∏ p(xt | x&lt;t)"]
    C -->|"和に直して最大化(学習)"| L["対数尤度 ∑ log p(xt | x&lt;t)"]
    C -->|"前から順に引く(生成)"| G["逐次サンプリング x1 → x2 → … → xn"]

3. 実装の系譜:画像・音声・言語

条件付き分布 p(xtx<t)p(x_t\mid x_{<t}) を「何で」「どんな順序で」モデル化するかで、代表的なアーキテクチャが分かれます。共通する制約は因果性(causality)——予測時に未来の要素を覗いてはいけない、という一点です。

領域代表モデル順序p(xtx<t)p(x_t\mid x_{<t}) の作り方
画像PixelRNN / PixelCNNピクセルを左上から右下へ(ラスタ走査)RNN / マスク付き畳み込み
音声WaveNet波形サンプルを時間順因果的(causal)な拡張畳み込み
言語GPT系トークンを左から右へマスク付き自己注意(Transformer

画像:PixelRNN / PixelCNN

van den Oord ら(2016)が提案。画像のピクセルにラスタ走査順(左上から、行ごとに左→右、上→下)を入れて、各ピクセル(さらにRGBサブピクセル)を離散カテゴリ(0〜255)上のソフトマックスとして、それまでに生成済みのピクセルから予測します。

落とし穴メモ:素朴なマスク付き畳み込みは受容野に**ブラインドスポット(盲点)**が生じます。後続の Gated PixelCNN は畳み込みを「縦スタック+横スタック」に分けてこれを解消しました。細部ですが「マスクだけでは不十分」という典型例です。

音声:WaveNet

波形を1サンプルずつ、過去サンプルから予測します。RNNを使わず**因果的な拡張畳み込み(dilated causal convolution)**を積むことで、長い時間範囲(広い受容野)を少ない層で扱います。やはり p(xtx<t)p(x_t\mid x_{<t}) の積という同じ骨格です。

言語:GPT系(次トークン予測)

自己回帰の最大規模の実装です。文を構成するトークンに左→右の順序を入れ、各位置で次トークンの分布(語彙上のソフトマックス)を予測します。本体は Transformer のデコーダで、**マスク付き自己注意(causal self-attention)**により「各位置から見えるのは自分以前のトークンだけ」という因果性を強制します。

ここがTransformerの効きどころで、

flowchart LR
    subgraph 学習["学習(並列・マスク付き自己注意)"]
        T["入力系列を一括投入"] -->|"全位置の次トークン予測を同時採点"| LL["∑ log p(トークン_t | 過去)"]
    end
    subgraph 生成["生成(逐次)"]
        G1["次トークンを1個サンプル"] -->|"末尾に追加して再投入"| G1
    end

4. teacher forcing と訓練/生成のギャップ

自己回帰モデルの学習はほぼ例外なく teacher forcing(教師強制) で行います。

この訓練と生成の条件の食い違いexposure bias(露出バイアス) と呼びます。学習中モデルは「常に正しい前文」しか見たことがないため、生成で一度ミスをして分布から外れた前文を作ると、その後の予測が次々ずれ、誤差が累積しやすくなります(長文生成での品質劣化の一因)。

要するに: teacher forcing は学習を速く安定させる代わりに、「自分の失敗を条件にした状況」をモデルに経験させません。緩和策として scheduled sampling(学習中に時々モデル自身の予測を条件に混ぜる)などが提案されていますが、大規模言語モデルでは素朴な teacher forcing でも実用上強力に機能しています。


5. 長所と短所

長所

短所

graph LR
    A["自己回帰モデル"] -->|"長所"| B["厳密尤度・高品質・学習安定"]
    A -->|"短所"| C["逐次生成で遅い(n要素にn回)"]
    A -->|"短所"| D["順序を人が決める・誤差累積"]

比較の視点:拡散モデルは「ノイズ除去のステップ数」を減らせば速くでき、GANは1回のフォワードで生成できます。一方で自己回帰は厳密尤度という別の強みを持ちます。「速さ(GAN・蒸留した拡散)」「尤度(自己回帰)」「品質と安定(拡散)」のトレードオフとして整理すると見通しが良いです。


6. 大規模言語モデル(LLM)への直結

LLM は、要素=トークン・モデル=Transformerデコーダにした、大規模な自己回帰モデルそのものです。 本ノートの tp(xtx<t)\prod_t p(x_t\mid x_{<t}) がそのまま「次トークン予測」になり、teacher forcing で事前学習し、生成は逐次デコードします。事前学習・微調整・推論最適化(KVキャッシュ等で逐次生成の遅さを緩和)といったLLM固有の論点は 大規模言語モデル 目次 に続きます。


⚠️ よくある誤解・落とし穴


対応するシミュレーション

simulations/autoregressive_generation.py:文字レベルの n-gram モデルを学習し、連鎖則 p(x)=tp(xtx<t)p(x)=\prod_t p(x_t\mid x_{<t}) に従って「直前の数文字」を条件に次の文字を確率的に選び、新しい文字列を1文字ずつ自己回帰的に生成します。学習テキストに似た“それっぽい”出力ができること、ある文脈に続く文字の条件付き分布を可視化します。GPT 系はこの「次トークン予測」を Transformer で行う自己回帰モデルです(生成温度は 推論の実務)。

n-gramで連鎖則と自己回帰生成


関連ノート