<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>階層ベイズ :: 確率と確率的計算のチュートリアル（機械翻訳）</title><link>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/index.html</link><description>どちらも直感的に間違っている二つの極端 Chibanyは日誌をつけている。弁当を持ってきた学生ごとに、それがとんかつかハンバーグかを記録している。しばらくすると、日誌は次のようになった。各学生について、弁当の総数 $n_i$ のうちとんかつを持ってきた回数 $k_i$ が記されている：
学生 とんかつ $k_i$ 合計 $n_i$ 生の割合 $k_i / n_i$ Alyssa 70 100 0.70 Ben 28 40 0.70 Carmen 6 10 0.60 Diego 3 5 0.60 Emi 2 2 1.00 Farid 0 1 0.00 Chibanyは各学生について、その学生がとんかつを持ってくる確率の真の値 $\theta_i$ を信頼できる形で推定したい。二つの明らかな方策はどちらも失敗する：
プーリングなし — 各学生を独立に推定する。 単純に生の割合 $k_i / n_i$ を使う。Alyssaの場合（70/100）は問題ない。しかし Emiは弁当を2回しか持ってきておらず、どちらもとんかつだったため、この方法では $\theta_{\text{Emi}} = 1.00$ となる。つまり、たった2データポイントの根拠で、Emiは常にとんかつを持ってくると確信を持って言えることになる。**Farid（0/1）**はさらに悪い：弁当を1回持ってきてハンバーグだったというだけで、彼は0%のとんかつ率、つまり絶対にとんかつを持ってこない人間だと宣言されてしまう。誰もこれらの結果を信じないだろう。
完全プーリング — 全員共通の割合を用いる。 全弁当をまとめて集計する：$158$回中$109$回がとんかつなので、全員について $\theta = 109/158 \approx 0.69$（実際には $0.690$で、データ数の多い AlyssaとBenが支配的）となる。これはEmi/Faridの問題を解決するが、学生間の実際の差異を捨て去ってしまう — そして学生同士には違いがあると考える十分な理由がある。</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Thu, 02 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/index.xml" rel="self" type="application/rss+xml"/><item><title>ベータ分布</title><link>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/the-beta-distribution/index.html</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/the-beta-distribution/index.html</guid><description>ベータ分布（確率に対する事前分布） 部分的にプールするには、$\theta \in [0, 1]$ という率に対する事前分布 — 結果そのものが確率となるような確率分布 — が必要です。自然な選択はベータ分布であり、$\text{Beta}(a, b)$ と書き表します。これがこの章で登場する唯一の新しい記法です。
使用前に定義：ベータ分布 $\text{Beta}(a, b)$ は、0 から 1 の間の単一の数 $\theta$ に対する確率分布です。二つの形状パラメータ $a &gt; 0$ および $b &gt; 0$ を持ち、最も直感的な読み方はソフトなカウントとしてです：
$a$ は「想像の中で見たトンカツの事前個数」、$b$ は「想像の中で見たハンバーガーの事前個数」です。
期待値は
$$\mathbb{E}[\theta] = \frac{a}{a + b},$$であり、合計 $a + b$ は事前サンプルサイズのように機能します — 大きくなるほど、分布は平均値の周りにより鋭く集中します。知っておくべきいくつかの形状：
$\text{Beta}(1, 1)$ は一様 — すべての率が等しく起こりやすい（$[0,1]$ 上の一様分布）。 $\text{Beta}(8, 2)$ は0.8 付近に集中 — 「トンカツ率が高いと強く予想している。」 $\text{Beta}(2, 5)$ は低い方に歪んでいる、平均 $\approx 0.29$ — 「おそらく低い率だろう。」</description></item><item><title>部分プーリングと縮小推定</title><link>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/partial-pooling-and-shrinkage/index.html</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/partial-pooling-and-shrinkage/index.html</guid><description>部分プーリングと縮小推定 6人の学生が共通の母集団事前分布 $\text{Beta}(a, b)$ — たとえば $\text{Beta}(6, 4)$ — を共有すると仮定しよう。これは「典型的な学生はおよそ60%のとんかつ弁当 ($\tfrac{6}{6+4} = 0.6$) を持ってくる、事前強度 $a + b = 10$ 弁当」という意味である。各学生の推定値はそれぞれのベータ二項事後分布の平均 $(a + k_i) / (a + b + n_i)$ となる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import jax.numpy as jnp names = ["Alyssa", "Ben", "Carmen", "Diego", "Emi", "Farid"] k = jnp.array([70, 28, 6, 3, 2, 0]) n = jnp.array([100, 40, 10, 5, 2, 1]) a, b = 6.0, 4.0 # shared population prior: mean 0.6, strength 10 population_mean = a / (a + b) raw = k / n posterior_mean = (a + k) / (a + b + n) # Beta-Binomial posterior mean per student print(f"population mean = {population_mean:.2f}\n") for name, r, pm in zip(names, raw, posterior_mean): print(f" {name:7s} raw {float(r):.2f} -&gt; pooled {float(pm):.3f} (shift {float(pm - r):+.3f})") 出力：</description></item><item><title>事前分布の学習</title><link>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/learning-the-prior/index.html</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/learning-the-prior/index.html</guid><description>母集団の事前分布はどこから来るのか？ これまで $(a, b) = (6, 4)$ を手動で固定してきた。しかし、この章が約束していたのは事前分布を学習することだった。階層モデルはすでにその答えを内包している：$(a, b)$ 自体が潜在変数であり、それ自身の分布を持つため、このチュートリアルで他のすべての未知数を推論したのと同様に、学生のデータから推論することができる。
$(a, b)$ に広く弱情報的なハイパー事前分布（「母集団の事前分布に対する事前分布」、つまり「それなりにもっともらしい母集団の形状の範囲を表すが、特定の形にはコミットしない」もの）を設定する。以下では $0.5 \le a, b \le 20$ の一様なボックス分布を使用する（範囲を広げても、境界が極端にならない限り推定値はほとんど変わらない）。そして全学生のカウントを観測し、各候補 $(a, b)$ の値をデータへの当てはまりの良さで重み付けする。これはまさに重点サンプリング——第5章とGenJAXチュートリアルで使った手法そのものを、今回はハイパーパラメータというひとつ上のレベルに向けて適用したものだ。
候補 $(a, b)$ をスコアリングするには、それが学生のカウント $k_i$ に割り当てる確率が必要だ——しかし $(a, b)$ はその学生の率 $\theta_i$ の分布を教えてくれるだけで、その値は教えてくれない。そこですべての可能な $\theta_i$ について平均をとる：これは §2 で $\text{Beta}(a,b) \to \text{Beta}(a+k, b+n-k)$ という更新を可能にしたのと同じベータ・二項共役性を、逆方向に使うものだ。この平均はきれいな閉形式（ベータ・二項周辺分布）を持つ：
$$p(k_i \mid n_i, a, b) = \binom{n_i}{k_i} \frac{B(a + k_i, b + n_i - k_i)}{B(a, b)},$$ここで $\binom{n_i}{k_i}$ は二項係数（「$n_i$ 個から $k_i$ 個を選ぶ」）、$B(\cdot,\cdot)$ はベータ関数——ベータ分布の正規化定数であり、JAX では betaln がその対数を計算する。これを暗記する必要はない；母集団をスコアリングするために学生全体の対数をただ合計するだけだ：
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 import jax import jax.numpy as jnp import jax.random as jr from jax.scipy.special import betaln, gammaln k = jnp.array([70, 28, 6, 3, 2, 0]) n = jnp.array([100, 40, 10, 5, 2, 1]) def log_binom_coeff(n, k): # gammaln = log of the Gamma function (a continuous factorial); this is log of "n choose k". return gammaln(n + 1) - gammaln(k + 1) - gammaln(n - k + 1) def population_loglik(a, b): """log p(all students' counts | a, b), theta integrated out (Beta-Binomial).""" per_student = (log_binom_coeff(n, k) + betaln(a + k, b + n - k) - betaln(a, b)) return per_student.sum() # Importance sampling over (a, b): draw many candidate populations from a broad # hyperprior, weight each by how well it explains the data, report the weighted mean. key = jr.PRNGKey(0) ka, kb = jr.split(key) N = 20000 a_samples = jr.uniform(ka, (N,), minval=0.5, maxval=20.0) # broad hyperprior on a b_samples = jr.uniform(kb, (N,), minval=0.5, maxval=20.0) # broad hyperprior on b log_w = jax.vmap(population_loglik)(a_samples, b_samples) w = jnp.exp(log_w - log_w.max()) w = w / w.sum() a_post = jnp.sum(w * a_samples) b_post = jnp.sum(w * b_samples) print(f"inferred a ~= {float(a_post):.2f}") print(f"inferred b ~= {float(b_post):.2f}") print(f"implied population tonkatsu rate ~= {float(a_post / (a_post + b_post)):.3f}") 出力：</description></item><item><title>つながりとまとめ</title><link>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/connections-and-summary/index.html</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://josephausterweil.github.io/probintro/ja/structure/hierarchical-bayes/connections-and-summary/index.html</guid><description>ノーフリーランチとのつながり 第7章で到達した地点に立ち戻ろう。**ノーフリーランチ（NFL）**定理は、学習者が必ず事前分布を持ち込まなければならないことを証明した――帰納的バイアスは任意ではなく、すべての仮説を等しく考慮する学習者はまったく汎化できないからだ。これは終身刑のように聞こえる：誰かが学習者にバイアスを与えなければならない。
階層的ベイズはその抜け道だ。事前分布は依然として必要――NFLは廃止されていない――だが、学習者は事前分布を生まれながらに持つのではなく、関連する問題についてのデータから獲得することができる。各学生は小さな学習問題であり、「学生はだいたい60%とんかつを好む傾向がある」ということを発見するのは集団レベルだ。そして発見されたそのバイアスこそが、ほとんどデータのない全く新しい学生についての合理的な推測を可能にする。階層は、バイアスを手作業で選びたくないときに帰納的バイアスがどこから来るかを示している。
超仮説 この考え方には名前がある：超仮説（overhypothesis）――第一レベルの仮説がどのような傾向を持つかについての第二レベルの仮説だ。この用語はNelson Goodman（『事実・虚構・予測』Fact, Fiction, and Forecast, 1955）のもので、彼の「帰納の新しい謎」の一部として作られた。その後**Kemp、Perfors &amp; Tenenbaum（2007）**が、私たちが使ってきた階層的ベイズの定式化を正確に与えた。「同じ種類の物体は形を共有する傾向がある」（形状バイアス）を学んだ子どもは超仮説を獲得している：それは特定の物体の形を教えてくれるわけではないが、どんな種類の規則を期待すべきかを教えてくれるため、次の物体は一つの例から学べる。これは$(a, b)$を推論することと同じ動きだ：多くの問題から事前分布の形を学ぶことで、各新問題にはほとんどデータが不要になる。（用語の紹介のみ――導出はしない。）
チュートリアルの他の部分とのつながり すでに見た（あるいは今後見る）内容への三つの簡単なつながりを示す――再導出はしない：
DPMMは階層モデルである。第6章のディリクレ過程混合モデルには、DP集中度$\alpha$というハイパーパラメータがあり、クラスター構造の上に位置して、いくつのクラスターが現れる傾向があるかを制御する。これは、各グループの率ではなくいくつのグループが存在するかに適用された、あなたが今構築したのと同じトップレベルの「事前分布に対する事前分布」の構造だ。 この図はベイズネットである。§4の$(a, b) \to \theta_i \to k_i$という図は有向グラフィカルモデル――学生の繰り返しプレートを持つベイズネット――だ（プレートは単に「このサブグラフを学生一人につき一回繰り返す」という省略記法だ）。今後予定されているこのチュートリアルのベイズネット章でその言語が正確に定義される；ここでの内容はすべてそれと整合している。 **縮小（シュリンケージ）は第4章の妥協の拡大版だ。**事後分布の平均$(a + k)/(a + b + n)$は、第4章の精度加重による事前分布とデータのブレンドの正確な類似物だ――当時はパラメータ一つだったが、今は集団全体で共有される学習済み事前分布によって結びついている。 まとめ 主要な学習ポイント **両極端はどちらも失敗する。**少数のデータからのプーリングなし（各ユニットを単独で推定）は不条理で過信した推定を与え、完全プーリング（一つの共有推定）は実際の差異を消す。部分プーリングが原理的な中間点だ。 **縮小（シュリンケージ）。**階層モデルは各推定を共有集団に向けて引き寄せる――**データが少ないユニットで最も強く、データが多いユニットではほとんど引き寄せない。**推定値は互いから自動的に「力を借り合う」。 ベータ二項分布。$\text{Beta}(a, b)$は率に対する事前分布（$a, b$ = 事前の成功・失敗のソフトカウント、平均$a/(a+b)$）であり、$n$回中$k$回を観測すると$\text{Beta}(a + k, b + n - k)$に更新される。事後分布の平均$(a + k)/(a + b + n)$は、一つの式での縮小を表す。 事前分布を学ぶことは、一つ上のレベルでの推論にすぎない。$(a, b)$にハイパー事前分布を置き、ユニットを観測し、尤度によって候補集団を重み付けする（重点サンプリング、第5章から変わらない）。事前分布はそれ自身の事前分布を持つ――これは整合的であり、無限後退ではない。 これがノーフリーランチへの答えだ。NFLは学習者に帰納的バイアスが必要だと言う；階層は、学習者がそのバイアスを与えられるのではなく関連する問題から獲得する場所だ。 練習問題 自分で試してみよう シフトを予測せよ。何も実行する前に：新しい学生Gretaが4個の弁当を持ってきて、すべてとんかつだったとする（4/4）。集団事前分布$\text{Beta}(6, 4)$の下で、彼女の部分プーリング推定$(a+k)/(a+b+n)$はいくらか？彼女の縮小はEmi（2/2）より大きいか小さいか？コードで確認せよ。 より強い事前分布、より弱い事前分布。$\text{Beta}(6, 4)$の代わりに$\text{Beta}(60, 40)$で縮小セルを再実行せよ――同じ平均（0.6）だが十倍の強さだ。実行前に：データが少ない学生は0.6に向かってより強く引き寄せられるか、より弱く引き寄せられるか？$a + b$を事前のサンプルサイズとして使って説明せよ。 限界としての完全プーリング。（いくつかの値を試すことで）$a + b \to \infty$で平均を固定したとき、各学生の推定が集団平均に収束することを示せ――すなわち無限に強い事前分布は完全プーリングに等しい。$a + b \to 0$にするとどうなるか？ **推論と仮定。**異なるPRNGKeyシードで§5の重点サンプリングセルを数回再実行せよ。推論された集団率はどの程度ばらつくか？Nを20000から200000に増やせば安定するか？「重点サンプリングはノイズが多い」という注釈に関連付けよ。 参考文献 Gelman, A., Carlin, J. B., Stern, H. S., Dunson, D. B., Vehtari, A., &amp; Rubin, D. B. (2013). Bayesian Data Analysis (3rd ed.). CRC Press ――階層モデル・部分プーリング・縮小の標準的な解説（第5章）。 Goodman, N. (1955). Fact, Fiction, and Forecast. Harvard University Press ――「帰納の新しい謎」の一部として超仮説という用語を作った。 Kemp, C., Perfors, A., &amp; Tenenbaum, J. B. (2007). Learning overhypotheses with hierarchical Bayesian models. Developmental Science, 10(3), 307–321. https://doi.org/10.1111/j.1467-7687.2007.00585.x ――Goodmanの超仮説の階層的ベイズによる定式化；帰納的バイアス（形状バイアス、物体対物質）が獲得される場としての階層。 Special thanks to JPCCA for their generous support of this tutorial series.</description></item></channel></rss>