パラメータ数がデータ数をはるかに上回るニューラルネットワークが、なぜ未知のデータでもうまく動くのでしょうか。常識的に考えれば、自由度が高すぎるモデルは訓練データを丸暗記して、テストデータでは外すはずです。ところが現実の深層学習は逆のことをします。パラメータを増やすほど、むしろ汎化性能が上がることさえあります。
この謎に古典的な汎化理論は答えられません。VC次元に基づくバウンドは「パラメータが多い=複雑=汎化しない」という素朴な見方をします。パラメータ数がデータ数を超えると、VCバウンドは「テスト誤差は100%以下」のような、何も言っていないに等しい結論(vacuous bound、空虚なバウンド)しか出せなくなります。
PAC-Bayesは、この行き詰まりを突破する現代の汎化理論です。鍵は発想の転換にあります。「1つの最良の仮説」を評価するのではなく、「仮説の上の確率分布」を評価するのです。学習前に置いた事前分布と、学習後の事後分布が、どれだけ離れたか(KLダイバージェンス)で複雑さを測ります。これにより、過剰パラメータ領域でも意味のある(non-vacuous、非空な)バウンドが得られます。
PAC-Bayesが活きる応用を2つ挙げておきます。1つは平坦な極小(flat minima)と汎化の関係です。SAMのような「平坦さを狙う最適化」がなぜ効くのかを、PAC-Bayesは理論的に説明します。もう1つは確率的ニューラルネットワークです。重みに分布を持たせたベイズニューラルネットの汎化保証は、PAC-Bayesがそのまま与えます。
本記事の内容
- PAC-Bayesの設定(事前分布Pと事後分布Q)と直感
- McAllester境界の意味と、測度変換による完全証明(Donsker–Varadhan・ガウスKL)
- 平坦な極小がなぜ汎化するのかをPAC-Bayesで読み解く
- 非空バウンドの歴史的意義(Dziugaite-Roy 2017)
- 情報理論(KL・相互情報量・f-ダイバージェンス)との接続
- Pythonでバウンドを計算し、平坦さと汎化の関係を可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
なぜ古典的な汎化理論では足りないのか
まず、汎化とは何かをはっきりさせましょう。私たちが本当に知りたいのは、未知のデータに対する誤り、すなわち期待リスク(汎化誤差) $R(h)$ です。仮説 $h$ をデータ分布 $\mathcal{D}$ から引いた点で評価したときの平均誤りです。
$$ \begin{equation} R(h) = \mathbb{E}_{(x,y)\sim\mathcal{D}}\big[\ell(h(x), y)\big] \end{equation} $$
しかし $\mathcal{D}$ は未知なので $R(h)$ は計算できません。手元にあるのは $n$ 個の訓練データだけで、そこから測れるのは経験リスク $\hat{R}(h)$ です。
$$ \begin{equation} \hat{R}(h) = \frac{1}{n}\sum_{i=1}^{n}\ell(h(x_i), y_i) \end{equation} $$
汎化理論の目標は、計算できる $\hat{R}(h)$ から、計算できない $R(h)$ を上から押さえることです。つまり「訓練でこれだけ当たったなら、未知データでもこれくらいは保証できる」と言いたいわけです。
古典的なアプローチは一様収束に基づきます。仮説クラス $\mathcal{H}$ 全体で $|R(h)-\hat{R}(h)|$ を一様に押さえ、その大きさを $\mathcal{H}$ の複雑さ(VC次元 $d_{\mathrm{VC}}$)で測ります。ざっくり書くと次の形です。
$$ \begin{equation} R(h) \le \hat{R}(h) + O\!\left(\sqrt{\frac{d_{\mathrm{VC}}}{n}}\right) \end{equation} $$
ここに過剰パラメータの罠があります。深いニューラルネットの $d_{\mathrm{VC}}$ はパラメータ数のオーダーで、数百万にもなります。一方データ数 $n$ はせいぜい数万です。すると $\sqrt{d_{\mathrm{VC}}/n} \gg 1$ となり、右辺は「誤りは1(=100%)以下です」という、当たり前すぎて無意味な結論になります。これがvacuousなバウンドです。
直感的に言えば、VCバウンドは「クラス全体で最悪のケース」を見ています。だから「これだけ表現力があるなら、いくらでも悪い仮説を選べる」と心配しすぎるのです。でも実際の学習は、その膨大なクラスの中から特定の良い仮説を選びます。最悪ケースで測るのをやめて、「実際に学習が選んだ仮説のあたり」だけを評価できれば、もっと締まったバウンドが得られるはずです。
この発想を数学にしたのがPAC-Bayesです。次の節で、その舞台設定を見ていきましょう。
PAC-Bayesの舞台:仮説の上の2つの分布
PAC-Bayesの核心は、1つの仮説 $h$ ではなく、仮説の上の確率分布を考えることです。登場するのは2つの分布です。
100万人の応募者から1人を選ぶ採用にたとえてみましょう。事前分布 $P$ は、応募書類を見る前に持っている「どんな人が良さそうか」の見込みです。事後分布 $Q$ は、書類審査と面接(=訓練データ)を経て更新された「この人たちが有望だ」という見込みです。PAC-Bayesは、$Q$ が $P$ からどれだけ動いたかで「どれだけ情報を使ったか(=複雑さ)」を測ります。
数学的にはこう約束します。
- 事前分布 $P$:データを見る前に決める、仮説空間上の分布。データに依存してはいけません。
- 事後分布 $Q$:データを見た後に決める分布。学習アルゴリズムが選びます。データに依存してよいです。
ここで注意してほしいのは、$P$ も $Q$ もベイズ統計の事前・事後分布そのものではない、という点です。PAC-Bayesの $Q$ は「ベイズ則で計算された厳密な事後分布」である必要はありません。任意の分布でよく、ただ「データを見た後に選んだ」という意味で事後分布と呼ばれます。
評価したい量も変わります。1つの $h$ のリスクではなく、$Q$ で平均した期待リスク $\mathbb{E}_{h\sim Q}[R(h)]$ を押さえます。これは「$Q$ から仮説をランダムに引いて使う」確率的な予測器(Gibbs予測器)のリスクです。

上の図は、仮説空間(重みベクトル)を1次元に潰した軸の上に、事前分布 $P$(青)と事後分布 $Q$(赤)を描いたものです。学習前は広く曖昧だった見込み $P$ が、データを見た後は特定の領域に集中した $Q$ になっています。この2つの分布のずれを定量化するのが、次に出てくるKLダイバージェンスです。$P$ から $Q$ へ大きく動くほど「たくさん情報を使った=複雑だ」とみなされます。
この「分布のずれ」がバウンドの主役になります。では、ずれをどう測り、どうバウンドに組み込むのかを見ていきましょう。
KLダイバージェンス:使った複雑さの代理
2つの分布の距離を測るのに、PAC-BayesはKLダイバージェンスを使います。
$$ \begin{equation} \mathrm{KL}(Q\,\|\,P) = \mathbb{E}_{h\sim Q}\!\left[\log\frac{Q(h)}{P(h)}\right] = \int Q(h)\log\frac{Q(h)}{P(h)}\,dh \end{equation} $$
直感はこうです。$\log(Q/P)$ は「$Q$ のもとで起きやすい仮説が、$P$ から見るとどれだけ意外か」を測ります。$Q$ が $P$ と一致していれば $\log(Q/P)=0$ で、KLはゼロです。$Q$ が $P$ から離れるほどKLは大きくなります。
PAC-Bayesの世界では、KLは「学習で使った複雑さ」の代理になります。$P$(先入観)から $Q$(学習結果)へ大きく動いたなら、それだけ訓練データの情報を取り込んだ=複雑なモデルを選んだ、ということです。逆に、ほとんど動いていない(KLが小さい)なら、シンプルなまま済んだことになります。

上の3枚の図は、同じ事前分布 $P$(青)に対して、事後分布 $Q$(赤)の動きを変えたときのKL値を示しています。左は $Q$ がほとんど動かずKL=0.32、中央はそこそこ動いてKL=0.99、右は大きく動いて鋭くなりKL=4.86です。$Q$ が $P$ から離れるほど、また $Q$ が鋭く尖るほど、KLが増えているのが読み取れます。鋭く尖るのも「特定の仮説に強く賭ける=情報を使う」ことなので、KLが増えるのです。
ここで大事な性質を1つ確認します。KLは $n$ では割られていません。後で見るように、バウンドの中でKLは $\sqrt{\mathrm{KL}/n}$ の形で現れます。つまりデータが増えれば、同じ複雑さ(同じKL)でもペナルティは薄まります。VCバウンドの $\sqrt{d_{\mathrm{VC}}/n}$ で $d_{\mathrm{VC}}$ がKLに置き換わった、と見ると対応がきれいです。違いは、$d_{\mathrm{VC}}$ がクラス固定なのに対し、KLは「実際に選んだ $Q$」に応じて小さくできる点です。
このKLを使って、いよいよ汎化バウンドの本体を書き下しましょう。
McAllester境界:PAC-Bayesの基本不等式
PAC-Bayesの最も有名な結果がMcAllester境界です。任意の事後分布 $Q$ に対して、確率 $1-\delta$ 以上で次が成り立ちます。
$$ \begin{equation} \mathbb{E}_{h\sim Q}[R(h)] \;\le\; \mathbb{E}_{h\sim Q}[\hat{R}(h)] + \sqrt{\frac{\mathrm{KL}(Q\,\|\,P) + \log\frac{n}{\delta}}{2(n-1)}} \end{equation} $$
この式が「成り立つかどうか」は訓練データの引き方に依存します。確率 $1-\delta$ 以上というのは、訓練データの引き方の $1-\delta$ の割合で右辺が左辺を上から押さえる、という意味です。$\delta$ を小さく(保証を強く)すると $\log(1/\delta)$ が増えてバウンドが緩む、という常識的なトレードオフが入っています。
各項の意味を読み解きましょう。
- 左辺 $\mathbb{E}_Q[R]$:知りたい量。事後分布 $Q$ で平均した期待リスク(未知データでの誤り)。
- 第1項 $\mathbb{E}_Q[\hat{R}]$:測れる量。$Q$ で平均した経験リスク(訓練データでの誤り)。
- 第2項:複雑さペナルティ。KLが小さいほど、$n$ が大きいほど小さくなります。
注目すべきは、この不等式は任意の $Q$ で成り立つことです。つまり右辺を最小にするような $Q$ を探せば、最も締まった保証が得られます。第1項(経験リスクを下げたい)と第2項のKL(事前から動きたくない)がせめぎ合い、その最適なバランスが良い $Q$ です。これはまさに「データへの当てはまり」対「複雑さ」のトレードオフで、正則化と同じ構造です。

上の図は、経験リスク(青)の上に複雑さペナルティ(オレンジ)を積み上げて、期待リスクの上界を作る様子です。$n=5000$、$\delta=0.05$ で、KLを2・20・200と変えています。KL=2なら上界は0.105、KL=200でも0.314に収まっています。経験リスク0.08はどれも共通で、上に乗るペナルティだけがKLとともに増えていきます。重要なのは、KLが200という大きな値でも上界が0.3程度に留まる点です。$\sqrt{\cdot}$ と $2(n-1)$ の効果でKLが薄められるからで、これが過剰パラメータでも非空になる仕組みの一端です。
ここで自然な疑問が湧きます。なぜこんな形の不等式が成り立つのでしょうか。なぜ複雑さがちょうどKLで表れるのでしょうか。次の節で、導出の心臓部である「測度変換」を見ていきます。
McAllester境界の証明
この証明は読み飛ばしても大丈夫です。 ここから先は、上で天下りに与えたMcAllester境界を補題から一行ずつ証明する部分です。前半までで「KLで複雑さを測る」という考え方は押さえられているので、結論を使えれば十分という方は次の節(平坦な極小の話)へ進んでください。証明を自分の手で追いたい方、論文の付録を読めるようになりたい方のための部分です。
ここからは、先ほど天下りに与えたMcAllester境界を、一行ずつ完全に証明します。証明の心臓部は測度変換(change of measure)、すなわち「$Q$ に関する期待値を $P$ に関する期待値に移し替える」操作です。それを支える等式がDonsker–Varadhanの変分公式で、PAC-Bayesという理論はほぼこの一本の等式から流れ出ます。まずこの公式を独立に証明し、その後に集中不等式・Markov不等式・Jensenの不等式を順に重ねて最終形に到達します。
Donsker–Varadhanの変分公式
主張。 $P$ を仮説空間上の固定された確率測度とし、$\varphi$ を $\mathbb{E}_P[e^{\varphi}]<\infty$ を満たす任意の可測関数とする。このとき
$$ \begin{equation} \log \mathbb{E}_{h\sim P}\!\left[e^{\varphi(h)}\right] \;=\; \sup_{Q}\,\Big\{\, \mathbb{E}_{h\sim Q}[\varphi(h)] \;-\; \mathrm{KL}(Q\,\|\,P) \,\Big\} \end{equation} $$
が成り立つ。ここで $\sup$ は $P$ に対して絶対連続な($P$ がゼロを与える集合では $Q$ もゼロを与える)すべての確率測度 $Q$ にわたる上限であり、$\mathbb{E}_{h\sim Q}[\cdot]$ は $Q$ のもとでの期待値である。さらにこの上限は、$P$ を指数的に重み付けしたGibbs測度(指数傾斜分布)
$$ \begin{equation} \frac{dQ^*}{dP}(h) \;=\; \frac{e^{\varphi(h)}}{\mathbb{E}_{h’\sim P}\!\left[e^{\varphi(h’)}\right]} \end{equation} $$
で達成される。ここで $dQ^*/dP$ は $Q^*$ の $P$ に対する密度比(Radon–Nikodym微分、$P$ をものさしにしたときの $Q^*$ の相対密度)である。
証明。 まず Gibbs 測度 $Q^*$ を上のように定義する。分母 $Z := \mathbb{E}_{P}[e^{\varphi}]$ は正規化定数で、$\int dQ^* = \frac{1}{Z}\int e^{\varphi}\,dP = 1$ より $Q^*$ は確かに確率測度になっている。
証明の出発点は、$P$ に絶対連続な任意の $Q$ について $\mathrm{KL}(Q\|Q^*)\ge 0$ が成り立つという、KLダイバージェンスの非負性(Gibbsの不等式)である。これを展開して整理するだけで等式が出る。$\mathrm{KL}(Q\|Q^*)$ の定義に密度比を代入する。
$$ \begin{equation} \mathrm{KL}(Q\,\|\,Q^*) \;=\; \mathbb{E}_{h\sim Q}\!\left[\log\frac{dQ}{dQ^*}(h)\right] \end{equation} $$
ここで密度比 $\dfrac{dQ}{dQ^*}$ を、$P$ を経由して書き換える。連鎖律 $\dfrac{dQ}{dQ^*} = \dfrac{dQ}{dP}\cdot\dfrac{dP}{dQ^*}$ を使い、さらに $Q^*$ の定義から $\dfrac{dQ^*}{dP} = \dfrac{e^{\varphi}}{Z}$、よって $\dfrac{dP}{dQ^*} = \dfrac{Z}{e^{\varphi}}$ を代入すると、
$$ \begin{equation} \log\frac{dQ}{dQ^*} \;=\; \log\frac{dQ}{dP} + \log\frac{dP}{dQ^*} \;=\; \log\frac{dQ}{dP} \;-\; \varphi \;+\; \log Z \end{equation} $$
となる($\log\frac{Z}{e^{\varphi}} = \log Z – \varphi$ を使った)。これを $Q$ で期待値を取る。$\log Z$ は $h$ によらない定数なので期待値の外に出る。
$$ \begin{equation} \mathrm{KL}(Q\,\|\,Q^*) \;=\; \underbrace{\mathbb{E}_{Q}\!\left[\log\frac{dQ}{dP}\right]}_{=\,\mathrm{KL}(Q\|P)} \;-\; \mathbb{E}_{Q}[\varphi] \;+\; \log Z \end{equation} $$
第1項はまさに $\mathrm{KL}(Q\|P)$ の定義そのものである。また $\log Z = \log\mathbb{E}_P[e^{\varphi}]$ なので、移項すると
$$ \begin{equation} \log \mathbb{E}_P[e^{\varphi}] \;=\; \mathbb{E}_{Q}[\varphi] – \mathrm{KL}(Q\|P) + \mathrm{KL}(Q\,\|\,Q^*) \end{equation} $$
を得る。この式は任意の $Q$ について恒等的に成り立つ点が鍵である。左辺は $Q$ を含まない定数だから、右辺 $\mathbb{E}_{Q}[\varphi] – \mathrm{KL}(Q\|P)$ を $Q$ について最大化することは、最後の項 $\mathrm{KL}(Q\|Q^*)$ を最小化することと同じである。KLは非負で、$Q=Q^*$ のときちょうど $0$ になる。したがって
$$ \begin{equation} \sup_{Q}\Big\{\mathbb{E}_{Q}[\varphi] – \mathrm{KL}(Q\|P)\Big\} \;=\; \log\mathbb{E}_P[e^{\varphi}] \end{equation} $$
であり、上限は $Q=Q^*$(Gibbs測度)で達成される。これで変分公式が証明できた。$\blacksquare$
この公式から、任意の $Q$ について $\mathrm{KL}(Q\|Q^*)\ge 0$ を落とした不等式版
$$ \begin{equation} \mathbb{E}_{h\sim Q}[\varphi(h)] \;\le\; \mathrm{KL}(Q\,\|\,P) + \log \mathbb{E}_{h\sim P}\!\left[e^{\varphi(h)}\right] \end{equation} $$
がただちに従う。これがPAC-Bayes導出で実際に使う形である。データ依存の $Q$ に関する左辺を、データ非依存の $P$ に関する右辺(プラスKL)で上から押さえるところに、この不等式の価値がある。$P$ はデータを見る前に固定したので、$\mathbb{E}_P[e^{\varphi}]$ には大数の法則・集中不等式が遠慮なく使える。複雑さがちょうどKLで現れる根本理由が、この一行に凝縮されている。

上の図は、この測度変換の流れを模式化したものです。扱いにくい「$Q$ に依存する量」を、測度変換で「$P$ に関する量 + KL」に分解します。$P$ に関する量はデータ非依存で評価できるので、ここに集中不等式を当てられるようになります。
ステップ1:仮説ごとの指数モーメントを押さえる
次に、Donsker–Varadhan に流し込む関数 $\varphi$ を具体的に決め、その指数モーメント $\mathbb{E}_P[e^{\varphi}]$ を有界に保つ補題を用意する。損失は $\ell\in[0,1]$ と仮定する。各仮説 $h$ について、経験リスクと真リスクの二乗差を $n$ 倍したもの
$$ \begin{equation} \Delta(h) \;:=\; 2(n-1)\big(R(h)-\hat{R}(h)\big)^2 \end{equation} $$
を考える。主張する補題は、この $\Delta$ の $P$ のもとでの指数モーメントが小さく抑えられるというものである。
補題(Maurer–Seeger流)。 損失 $\ell\in[0,1]$ かつ $n$ 個のサンプルが独立同分布であれば、データ非依存な任意の固定仮説 $h$ について
$$ \begin{equation} \mathbb{E}_{S}\!\left[\,e^{\,2(n-1)\,(R(h)-\hat{R}(h))^2}\,\right] \;\le\; n \end{equation} $$
が成り立つ。ここで $\mathbb{E}_S$ は訓練標本 $S=\{(x_i,y_i)\}_{i=1}^n$ の引き方に関する期待値である。
証明のあらすじ。 固定 $h$ では $\hat{R}(h)=\frac1n\sum_i \ell(h(x_i),y_i)$ は $[0,1]$ 値の独立確率変数の平均で、その期待値は $R(h)$ である。Hoeffdingの不等式は、この平均が真値から $t$ 以上ずれる確率を $\Pr(|R(h)-\hat{R}(h)|\ge t)\le 2e^{-2nt^2}$ で押さえる。さらに二乗差の二値KLを使ったMaurerの精密化を用いると、非負確率変数 $X=(R-\hat R)^2$ の指数モーメントに対し $\mathbb{E}_S[e^{2(n-1)X}]\le n$ が得られる。直感的には、$2(n-1)X$ の裾は $X$ の指数的に小さい裾確率を $e^{2(n-1)x}$ で重み付け積分しても発散せず、$n$ 程度に収まる、ということである。$\square$
なお、Maurer (2004) の鋭い結果は $\mathbb{E}_S[e^{(n-1)\,\mathrm{kl}(\hat R\|R)}]\le 2\sqrt{n}$ であり($\mathrm{kl}$ は二値KL)、Pinskerの不等式 $\mathrm{kl}(\hat R\|R)\ge 2(\hat R-R)^2$ を併せると $\mathbb{E}_S[e^{2(n-1)(R-\hat R)^2}]\le 2\sqrt{n}$ が従う。ここで使う $\le n$ という上界は $2\sqrt{n}\le n$、すなわち $n\ge 4$ で成り立つ少し緩めの版である(実用上は $n$ は十分大きい)。この $n$ を使うことで、後段のMarkovの閾値が $n/\delta$ となり、最終形のlog項が扱いやすい $\log(n/\delta)$ にそろう。
要するに、ここで使う集中不等式(Hoeffding/Maurer)の結論は、$P$ から引いた固定仮説では二乗ずれの指数モーメントが $n$ で抑えられるという一点に尽きる。なぜ二乗差を使うかというと、後で平方根を開いて $\sqrt{\mathrm{KL}/n}$ の形を作るためである。
ステップ2:測度変換で $Q$ 側へ移す
ステップ1の補題は固定仮説(データ非依存)についてのものだった。これを $Q$ で平均した量へ橋渡しするために、Donsker–Varadhanの不等式版を $\varphi(h)=\Delta(h)=2(n-1)(R(h)-\hat{R}(h))^2$ に適用する。
$$ \begin{equation} \mathbb{E}_{h\sim Q}\big[\,2(n-1)(R(h)-\hat{R}(h))^2\,\big] \;\le\; \mathrm{KL}(Q\,\|\,P) + \log \mathbb{E}_{h\sim P}\!\left[e^{\,2(n-1)(R(h)-\hat{R}(h))^2}\right] \end{equation} $$
ここで右辺第2項の対数の中身は、$P$ がデータ非依存であることを使って期待値の順序を交換できる(Fubiniの定理。$P$ も標本 $S$ も互いに独立に動く)。すなわち $\mathbb{E}_{h\sim P}$ と $\mathbb{E}_S$ を入れ替えてよい。この交換ができるのは、まさに$P$ をデータを見る前に固定したおかげである。次のステップで、この $S$ に関する期待値にステップ1の補題を当てる。
ステップ3:Markov不等式で高確率イベントへ
確率 $1-\delta$ の保証を得るために、$S$ に関するMarkov不等式を使う。非負確率変数 $Y\ge 0$ に対し $\Pr(Y\ge a)\le \mathbb{E}[Y]/a$ が成り立つ。いま
$$ \begin{equation} Y \;:=\; \mathbb{E}_{h\sim P}\!\left[e^{\,2(n-1)(R(h)-\hat{R}(h))^2}\right] \end{equation} $$
とおく。$Y$ は標本 $S$ の関数である。その標本期待値はステップ2のFubiniとステップ1の補題から
$$ \begin{equation} \mathbb{E}_S[Y] \;=\; \mathbb{E}_{h\sim P}\Big[\,\mathbb{E}_S\big[e^{\,2(n-1)(R(h)-\hat{R}(h))^2}\big]\,\Big] \;\le\; \mathbb{E}_{h\sim P}[\,n\,] \;=\; n \end{equation} $$
と $n$ で押さえられる。Markov不等式に $a=n/\delta$ を代入すると、
$$ \begin{equation} \Pr_S\!\left(Y \ge \frac{n}{\delta}\right) \;\le\; \frac{\mathbb{E}_S[Y]}{n/\delta} \;\le\; \frac{n}{n/\delta} \;=\; \delta \end{equation} $$
を得る。対偶を取れば、確率 $1-\delta$ 以上で $Y < n/\delta$、すなわち $\log Y < \log(n/\delta)$ が成り立つ。これでステップ2の右辺第2項を、高確率で定数 $\log(n/\delta)$ に置き換えられる。以後はこの「良い」イベントの上で議論する。確率 $1-\delta$ 以上で
$$ \begin{equation} 2(n-1)\,\mathbb{E}_{h\sim Q}\big[(R(h)-\hat{R}(h))^2\big] \;\le\; \mathrm{KL}(Q\,\|\,P) + \log\frac{n}{\delta} \end{equation} $$
が成り立つ。両辺を $2(n-1)$ で割れば、$\mathbb{E}_Q[(R-\hat R)^2]$ の上界が手に入る。
ステップ4:Jensenの不等式で平方を外す
最後に、知りたいのは差の二乗の平均ではなく、差そのものの平均 $\mathbb{E}_Q[R-\hat R]=\mathbb{E}_Q[R]-\mathbb{E}_Q[\hat R]$ である。ここで凸関数 $x\mapsto x^2$ に対するJensenの不等式 $\big(\mathbb{E}_Q[Z]\big)^2 \le \mathbb{E}_Q[Z^2]$ を $Z=R(h)-\hat{R}(h)$ に適用する。これにより
$$ \begin{equation} \big(\mathbb{E}_Q[R]-\mathbb{E}_Q[\hat{R}]\big)^2 \;\le\; \mathbb{E}_Q\big[(R-\hat{R})^2\big] \;\le\; \frac{\mathrm{KL}(Q\,\|\,P) + \log\frac{n}{\delta}}{2(n-1)} \end{equation} $$
が確率 $1-\delta$ 以上で成り立つ。Jensenを使う理由は明快で、ステップ3で得たのが二乗差の上界だったのを、欲しい一乗差の上界に変換するためである(凸性のおかげで「平均の二乗 ≤ 二乗の平均」が成り立つ)。両辺の平方根を取り(左辺の差が正のとき意味があり、負なら主張は自明に成立する)、移項すると
$$ \begin{equation} \mathbb{E}_{h\sim Q}[R(h)] \;\le\; \mathbb{E}_{h\sim Q}[\hat{R}(h)] + \sqrt{\frac{\mathrm{KL}(Q\,\|\,P) + \log\frac{n}{\delta}}{2(n-1)}} \end{equation} $$
を得る。これがまさにMcAllester境界である。$\blacksquare$
証明の骨格を振り返ると、(0) Donsker–Varadhanで $Q$ を $P$ に移す土台を作り、(1) 固定仮説の二乗ずれの指数モーメントを集中不等式で $n$ に抑え、(2) 測度変換でその上界を $Q$ 側に持ち込み、(3) Markov不等式で確率 $1-\delta$ のイベントに移し、(4) Jensenで平方を外すという四段構え(プラス土台)になっている。各段で使う不等式が「なぜそれか」を一言で言えば、Donsker–Varadhan=測度変換、Hoeffding/Maurer=固定仮説の集中、Markov=高確率保証への変換、Jensen=二乗差から一乗差への変換、である。
ガウス事前・事後のKLを閉じた形で求める
McAllester境界を実際に数値で使うには、$\mathrm{KL}(Q\|P)$ を具体的に計算できなければならない。幸い、$P$ も $Q$ も対角ガウス分布なら、KLは閉じた形(解析式)で書ける。後の「平坦な極小」の議論はこの公式に全面的に依存するので、ここで導出しておく。
主張。 $d$ 次元の対角ガウス $Q=\mathcal{N}(\bm{\mu}_Q,\sigma_Q^2 I)$ と $P=\mathcal{N}(\bm{\mu}_P,\sigma_P^2 I)$ について、
$$ \begin{equation} \mathrm{KL}(Q\,\|\,P) \;=\; \frac{1}{2}\left[\, d\log\frac{\sigma_P^2}{\sigma_Q^2} \;-\; d \;+\; \frac{d\,\sigma_Q^2}{\sigma_P^2} \;+\; \frac{\|\bm{\mu}_Q-\bm{\mu}_P\|^2}{\sigma_P^2}\,\right] \end{equation} $$
が成り立つ。
証明。 まず KL の定義に密度を代入する。$d$ 次元ガウスの密度は $q(\bm{x}) = (2\pi\sigma_Q^2)^{-d/2}\exp\!\big(-\frac{\|\bm{x}-\bm{\mu}_Q\|^2}{2\sigma_Q^2}\big)$、$p$ も同様である。対数密度比は
$$ \begin{equation} \log\frac{q(\bm{x})}{p(\bm{x})} \;=\; \frac{d}{2}\log\frac{\sigma_P^2}{\sigma_Q^2} \;-\; \frac{\|\bm{x}-\bm{\mu}_Q\|^2}{2\sigma_Q^2} \;+\; \frac{\|\bm{x}-\bm{\mu}_P\|^2}{2\sigma_P^2} \end{equation} $$
となる(正規化定数の比から第1項、指数部の差から第2・第3項が出る)。これを $Q$ すなわち $\bm{x}\sim\mathcal{N}(\bm{\mu}_Q,\sigma_Q^2 I)$ について期待値を取る。各項を順に評価する。第1項は定数なのでそのまま。第2項は、$\mathbb{E}_Q[\|\bm{x}-\bm{\mu}_Q\|^2] = d\,\sigma_Q^2$(各成分の分散 $\sigma_Q^2$ を $d$ 個足したもの)を使うと
$$ \begin{equation} \mathbb{E}_Q\!\left[-\frac{\|\bm{x}-\bm{\mu}_Q\|^2}{2\sigma_Q^2}\right] \;=\; -\frac{d\,\sigma_Q^2}{2\sigma_Q^2} \;=\; -\frac{d}{2} \end{equation} $$
となる。第3項は、$\bm{x}-\bm{\mu}_P = (\bm{x}-\bm{\mu}_Q) + (\bm{\mu}_Q-\bm{\mu}_P)$ と分解してノルムを展開する。クロス項 $2(\bm{x}-\bm{\mu}_Q)^\top(\bm{\mu}_Q-\bm{\mu}_P)$ は $\mathbb{E}_Q[\bm{x}-\bm{\mu}_Q]=\bm{0}$ より期待値が消えるので、
$$ \begin{equation} \mathbb{E}_Q\big[\|\bm{x}-\bm{\mu}_P\|^2\big] \;=\; \underbrace{\mathbb{E}_Q\big[\|\bm{x}-\bm{\mu}_Q\|^2\big]}_{=\,d\,\sigma_Q^2} \;+\; \|\bm{\mu}_Q-\bm{\mu}_P\|^2 \end{equation} $$
となる。これを $2\sigma_P^2$ で割って第3項の期待値とする。3つの項を足し合わせると、
$$ \begin{equation} \mathrm{KL}(Q\|P) \;=\; \frac{d}{2}\log\frac{\sigma_P^2}{\sigma_Q^2} \;-\; \frac{d}{2} \;+\; \frac{d\,\sigma_Q^2 + \|\bm{\mu}_Q-\bm{\mu}_P\|^2}{2\sigma_P^2} \end{equation} $$
を得る。これは主張の式そのものである。$\blacksquare$
ここで標準正規事前 $P=\mathcal{N}(\bm{0}, I)$($\bm{\mu}_P=\bm{0}$, $\sigma_P^2=1$)と事後 $Q=\mathcal{N}(\bm{\theta}^*,\sigma^2 I)$ を代入すると、$\log\frac{1}{\sigma^2}=-\log\sigma^2$ より
$$ \begin{equation} \mathrm{KL}(Q\|P) \;=\; \frac{1}{2}\Big(\|\bm{\theta}^*\|^2 + d\,\sigma^2 – d – d\log\sigma^2\Big) \end{equation} $$
となり、後の「平坦な極小」の節で使う閉形式(記事中の同じ式)が導かれる。この式を $\sigma$ で見ると、$-d\log\sigma^2$ の項が $\sigma$ を大きくするほどKLを下げ、$d\sigma^2$ の項が逆に上げるため、両者の釣り合いで最適な $\sigma$ が決まる。平坦な極小ほど大きな $\sigma$ を許せるのでKLを小さくできる、という次節の議論は、まさにこの閉形式から読み取れる。
証明の2つの要を数値で確かめる
紙の上の証明を、ここで数値実験で裏取りしておきます。確かめるのは2点です。1つはDonsker–Varadhanの変分公式が「Gibbs測度 $Q^*$ で等号、それ以外の $Q$ では未満」になること、もう1つはガウス間KLの閉形式がモンテカルロ推定と一致することです。
import numpy as np
rng = np.random.default_rng(0)
# --- (1) Donsker-Varadhan: log E_P[e^phi] = sup_Q { E_Q[phi] - KL(Q||P) } ---
K = 6
P = rng.dirichlet(np.ones(K)) # 離散の事前分布(K個の仮説)
phi = rng.normal(size=K) * 1.5 # 任意の関数 phi
lhs = np.log(np.sum(P * np.exp(phi))) # 左辺 log E_P[e^phi]
Qstar = P * np.exp(phi); Qstar /= Qstar.sum() # Gibbs測度 Q* ∝ e^phi dP
def kl(Q, P):
m = Q > 0
return np.sum(Q[m] * np.log(Q[m] / P[m]))
rhs_gibbs = np.sum(Qstar * phi) - kl(Qstar, P) # Q*での E_Q[phi]-KL
# ランダムなQを大量に試し、どれも左辺を超えないことを確認
sup_random = max(np.sum(Q * phi) - kl(Q, P)
for Q in (rng.dirichlet(np.ones(K)) for _ in range(20000)))
print(f"左辺 log E_P[e^phi] = {lhs:.6f}")
print(f"Gibbs測度での右辺 = {rhs_gibbs:.6f} (左辺と一致するはず)")
print(f"ランダムQでの上限 = {sup_random:.6f} (左辺以下のはず)")
# --- (2) ガウス間KLの閉形式 vs モンテカルロ ---
d = 5
muQ, sQ = rng.normal(size=d), 0.7
muP, sP = rng.normal(size=d), 1.3
def kl_gauss_closed(muQ, sQ, muP, sP, d):
return 0.5 * (d*np.log(sP**2/sQ**2) - d
+ d*sQ**2/sP**2 + np.sum((muQ-muP)**2)/sP**2)
closed = kl_gauss_closed(muQ, sQ, muP, sP, d)
N = 4_000_000
X = muQ + sQ * rng.standard_normal((N, d)) # Q からサンプリング
logq = -0.5*d*np.log(2*np.pi*sQ**2) - np.sum((X-muQ)**2, 1)/(2*sQ**2)
logp = -0.5*d*np.log(2*np.pi*sP**2) - np.sum((X-muP)**2, 1)/(2*sP**2)
mc = np.mean(logq - logp) # E_Q[log q - log p]
print(f"ガウスKL 閉形式 = {closed:.5f}")
print(f"ガウスKL モンテカルロ = {mc:.5f}")
実行すると、Donsker–Varadhanの左辺 $\log\mathbb{E}_P[e^\varphi]$ は $1.035170$ で、Gibbs測度 $Q^*$ を代入した右辺も $1.035170$ とぴったり一致します。一方、ランダムに振った2万個の $Q$ の中で右辺が最大だったものでも $0.995068$ で、確かに左辺を超えません。等号がGibbs測度でのみ達成され、他のすべての $Q$ では未満という変分公式の主張が、そのまま数値に出ています。ガウス間KLのほうは、閉形式が $4.16115$、400万サンプルのモンテカルロ推定が $4.16161$ で、小数3桁まで一致します。導出した閉形式が正しいことの確認です。これで、証明の心臓部(測度変換)と実用部(ガウスKL)の両方が、数式と数値の両面から裏付けられました。
導出の流れが見えたところで、PAC-Bayesが実際の深層学習にどう光を当てるかを見ましょう。最初のテーマは「平坦な極小」です。
平坦な極小はなぜ汎化するのか
深層学習の経験則に「平坦な極小(flat minima)はよく汎化する」というものがあります。損失地形の谷底が広く平らな解は、谷底が鋭く尖った解(sharp minima)より汎化しやすい、という観察です。SAM(Sharpness-Aware Minimization)はこの平坦さを狙って最適化する手法で、実際に汎化を改善します。
PAC-Bayesは、この経験則に理論的な根拠を与えます。鍵は、事後分布 $Q$ を学習した重み $\theta^*$ の周りのガウス分布に取ることです。
$$ \begin{equation} Q = \mathcal{N}(\theta^*, \sigma^2 I) \end{equation} $$
これは「重みに分散 $\sigma^2$ のガウス雑音を乗せた確率的ネットワーク」を意味します。$\theta^*$ ぴったりでなく、その近所をランダムに使うイメージです。

上の図は、損失地形(グレーの等高線)の上に、学習した重み $\theta^*$(赤点)を中心とするガウス事後 $Q$ を描いたものです。青の楕円とドットが、$Q$ から引いた重みのばらつきを表します。私たちは1点 $\theta^*$ ではなく、この雲全体を予測器として評価することになります。
このとき、McAllester境界の2つの項が次のように変わります。
第1項 $\mathbb{E}_Q[\hat{R}]$ は「$\theta^*$ の周りに $\sigma$ の摂動を加えたときの平均訓練損失」です。ここで平坦・鋭いの差が効きます。平坦な極小では、$\theta^*$ から多少ずれても損失はあまり上がりません。だから $\sigma$ をそれなりに大きくしても $\mathbb{E}_Q[\hat{R}]$ が悪化しません。鋭い極小では逆で、少しずれただけで損失が跳ね上がります。

上の図は、平坦な極小(緑)と鋭い極小(赤)に同じ幅 $\sigma$ の摂動を加えたときの損失の上がり方を比べています。平坦極小では摂動帯(緑の網掛け)の中で損失がほとんど上がりません。鋭い極小では同じ摂動帯(赤の網掛け)でも損失が急上昇します。だから鋭い極小で経験リスクを保つには $\sigma$ を小さくせざるを得ず、そのぶんKL項が大きくなります。
第2項のKLも $\sigma$ で決まります。事前を $P=\mathcal{N}(0, I)$、事後を $Q=\mathcal{N}(\theta^*, \sigma^2 I)$ とすると、ガウス間のKLは閉じた形で書けます。
$$ \begin{equation} \mathrm{KL}(Q\,\|\,P) = \frac{1}{2}\Big(\|\theta^*\|^2 + d\,\sigma^2 – d – d\log\sigma^2\Big) \end{equation} $$
ここで $d$ は重みの次元です。$\sigma$ を大きくすると、$-d\log\sigma^2$ の項が効いてKLが下がります(ただし $d\sigma^2$ の項とのバランスで下限はあります)。つまり$\sigma$ を大きくできるほどKLは小さくできるのです。
ここで平坦さの利点がはっきりします。平坦な極小では $\sigma$ を大きく取っても経験リスクが悪化しません。だから大きな $\sigma$ を選んでKLを小さくでき、バウンド全体が締まります。鋭い極小では $\sigma$ を大きくすると経験リスクが爆発するので、$\sigma$ を小さく抑えるしかなく、KLが大きくなってバウンドが緩みます。

上の図は、$\sigma$ を動かしたときのトレードオフです。$\sigma$ が大きいほど経験リスク(赤)は増えますが、複雑さペナルティ(オレンジ)はKLが減るため下がります。合計のPAC-Bayesバウンド(青)はU字を描き、$\sigma\approx0.80$ で最小値0.297を取ります。この「ちょうど良い $\sigma$」の存在が、確率的ネットワークの良さを示しています。平坦極小ではこのU字の谷が低い位置に来るので、より良い保証になります。
つまりPAC-Bayesは「平坦さ=摂動への頑健さ=大きな $\sigma$ が許される=小さなKL=締まったバウンド」という因果の鎖で、平坦な極小の汎化を説明します。経験則が理論で裏打ちされる、美しい例です。
では、このバウンドは実際の深層ネットで「意味のある数値」を出せるのでしょうか。次の節で歴史的なブレークスルーを紹介します。
非空バウンド:Dziugaite-Roy 2017の衝撃
PAC-Bayesは理論的にエレガントですが、長らく「実際の深層ネットで意味のある数値が出るのか」は疑問でした。VCバウンドが無意味だったのと同じく、PAC-Bayesも机上の空論ではないか、という懸念です。
この疑問に明快な答えを出したのが、Dziugaite と Roy の2017年の論文です。彼らはMNISTの分類問題で、過剰パラメータのニューラルネット(パラメータ数がデータ数を大きく超える)に対し、non-vacuous(非空)なPAC-Bayesバウンドを実際に計算してみせました。
彼らのアイデアは、PAC-Bayesバウンドそのものを最適化目標にすることでした。事後 $Q=\mathcal{N}(\theta, \Sigma)$ の平均 $\theta$ と分散 $\Sigma$ を、McAllester型のバウンドが最小になるよう直接学習したのです。これは「バウンドを締めるように $Q$ を選ぶ」という、PAC-Bayesの精神を素直に実行したものです。
結果、テスト誤差の上界として、実際のテスト誤差に近い意味のある数値(誤差率で言えば数十%という、1=100%を大きく下回る値)が得られました。過剰パラメータでもバウンドが空虚にならなかったのです。

上の図は、過剰パラメータNNに対する3つの値を対数軸で比べたものです。VCバウンド(グレー)は1(=100%、赤破線)を大きく超え、何も保証しないvacuousな状態です。一方、PAC-Bayes(青、Dziugaite-Roy型)は0.20程度で1を下回り、実際のテスト誤差0.03(緑)に近い意味のある保証を与えます。これがnon-vacuousの意味です。
この仕事が画期的だったのは、汎化理論が「最悪ケースの抽象論」から「実際のネットで計算できる定量的保証」へ橋を架けたからです。以降、PAC-Bayesは深層学習の汎化を説明する有力な枠組みとして急速に発展しました。圧縮に基づくバウンド、データ依存の事前分布、より締まった不等式(Catoni境界、Maurer境界など)が次々に提案されています。
バウンドの形を少し変えると、もっと締まることがあります。次にその例を見ておきましょう。
より締まったバウンド:kl形式
McAllester境界の $\sqrt{\cdot}$ 形式は分かりやすいですが、実は緩めです。より締まったバウンドは、リスクそのものの間の二値KL(ベルヌーイ分布のKL)で書かれます。
$$ \begin{equation} \mathrm{kl}\big(\mathbb{E}_Q[\hat{R}]\,\big\|\,\mathbb{E}_Q[R]\big) \;\le\; \frac{\mathrm{KL}(Q\,\|\,P) + \log\frac{2\sqrt{n}}{\delta}}{n} \end{equation} $$
ここで $\mathrm{kl}(a\|b) = a\log\frac{a}{b} + (1-a)\log\frac{1-a}{1-b}$ は、成功確率 $a$ と $b$ の2つのベルヌーイ分布の間のKLです。左辺が小文字 $\mathrm{kl}$、右辺の分子が大文字 $\mathrm{KL}$ である点に注意してください。役割が違います。
なぜこちらが締まるのでしょうか。$\sqrt{\cdot}$ 形式は二値KLを下から二次式で近似(Pinskerの不等式)したものに相当します。近似する前の二値KLを直接使うほうが、当然タイトです。特に経験リスクが0に近いとき(訓練でほぼ完璧に当たるとき)、二値KL形式は劇的に締まります。これは「訓練誤差が小さいほど速い収束」を捉えているからで、深層学習のように訓練誤差をほぼ0にできる場面で威力を発揮します。
実用上は、この不等式を $\mathbb{E}_Q[R]$ について数値的に解いて上界を得ます。Dziugaite-Royもこの二値KL形式を使いました。
バウンドの形を改良する話はここまでにして、最後にPAC-Bayesがより広い理論とどうつながるかを見ましょう。情報理論との接続です。
情報理論との接続
PAC-Bayesの中心にKLダイバージェンスがいることは、情報理論との深いつながりを示唆します。実際、汎化を情報の観点から捉える見方が近年盛んです。
最も基本的な接続はKLと符号長です。$\mathrm{KL}(Q\|P)$ は「$P$ を符号化の基準に使ったとき、$Q$ から来るデータを表すのに余分にかかるビット数(nat単位)」と解釈できます。だから「事前 $P$ から事後 $Q$ への移動コスト=学習で取り込んだ情報量」とみなせます。複雑さを情報量で測る、という発想です。
もう一歩進めると相互情報量が現れます。学習アルゴリズムを「データ $S$ を受け取って仮説 $W$ を出す確率写像」と見ると、汎化ギャップは仮説とデータの相互情報量 $I(W; S)$ で押さえられます(Xu-Raginsky 2017の情報理論的汎化バウンド)。
$$ \begin{equation} \big|\,\mathbb{E}[R(W)] – \mathbb{E}[\hat{R}(W)]\,\big| \;\le\; \sqrt{\frac{2\sigma^2\, I(W; S)}{n}} \end{equation} $$
直感は明快です。アルゴリズムが訓練データを覚えすぎる($W$ が $S$ に強く依存する)ほど、相互情報量 $I(W;S)$ が大きくなり、汎化ギャップが広がる。逆に、訓練データの細部に依存しないアルゴリズムは汎化します。PAC-Bayesのデータ依存事前を使った版では、KL項の期待値がちょうどこの相互情報量に対応します。「事前から事後への移動量を平均すると、データと仮説の相互情報量になる」というわけです。

上の図は、$n=10000$ のときKL(または相互情報量)と汎化ギャップ上界の関係を描いたものです。KL=10ならギャップ上界は0.034、KL=100で0.078、KL=400で0.146と、KLとともに単調に増えます。$\sqrt{\cdot}$ の形なので、KLが小さいうちは急に、大きくなると緩やかに増えます。「使った情報が少ないほど汎化する」という情報理論の直感が、そのまま数値に表れています。
さらに視野を広げると、KLはf-ダイバージェンスの一員です。$f(t)=t\log t$ と取ったときのf-ダイバージェンスがKLです。PAC-Bayesのバウンドはχ²ダイバージェンスやRényiダイバージェンスなど、他のf-ダイバージェンスを使った版にも一般化されています。どの距離尺度を使うかで、バウンドの締まり方や成り立つ条件が変わります。f-ダイバージェンスの統一的な見方を押さえておくと、これらの一般化が見通しよく理解できます。
PAC-Bayes・情報理論的バウンド・f-ダイバージェンス。一見バラバラなこれらは、「事前から事後への移動量で複雑さを測る」という1つの思想で貫かれています。
それでは、ここまでの理論をPythonで手を動かして確かめましょう。
Pythonでバウンドを計算し、平坦さと汎化を可視化する
理論を2つの実験で裏付けます。1つ目は、ガウス事前・事後でKLを閉じた形で計算し、McAllesterバウンドを評価することです。2つ目は、平坦な極小と鋭い極小で摂動への頑健性と汎化ギャップを実測し、両者の関係を見ることです。
まず、ガウス間のKLとMcAllesterバウンドを計算します。
import numpy as np
def kl_gaussian(theta, sigma, d):
"""事前 P=N(0,I)、事後 Q=N(theta, sigma^2 I) のKL(閉形式)。"""
theta_norm2 = np.sum(theta ** 2)
return 0.5 * (theta_norm2 + d * sigma ** 2 - d - d * np.log(sigma ** 2))
def mcallester_bound(emp_risk, kl, n, delta=0.05):
"""McAllester境界の右辺。"""
return emp_risk + np.sqrt((kl + np.log(n / delta)) / (2 * (n - 1)))
# 例: 30次元の重み、ノルムそこそこの解
np.random.seed(0)
d = 30
theta = np.random.randn(d) * 0.4 # ||theta||^2 ~ 数程度
emp_risk = 0.08
n = 5000
for sigma in [0.3, 0.6, 1.0]:
kl = kl_gaussian(theta, sigma, d)
b = mcallester_bound(emp_risk, kl, n)
print(f"sigma={sigma}: KL={kl:.2f}, バウンド上界={b:.3f}")
このコードは、事後の分散 $\sigma$ を変えながらKLとバウンドを計算します。出力では、$\sigma$ が小さい(0.3)とKLが大きくバウンドも緩み、$\sigma$ を1.0に近づけるとKLが小さくなりバウンドが締まる傾向が確認できます。事前 $P=\mathcal{N}(0,I)$ に対し、$\sigma=1$ に近いほど $Q$ の広がりが $P$ に揃ってKLが小さくなるためです。これは「適度に広い事後(確率的ネット)が複雑さを抑える」という理論と一致します。
次に、平坦な極小と鋭い極小で摂動頑健性と汎化ギャップを実測します。1次元の重みパラメータを考え、訓練損失に平坦な極小(曲率小)と鋭い極小(曲率大)を置きます。テスト損失は分布シフトで極小位置が少しずれる設定にします。
import numpy as np
rng = np.random.default_rng(42)
a_flat, a_sharp = 0.5, 6.0 # 訓練損失の曲率(小=平坦, 大=鋭い)
delta_shift = 0.35 # 分布シフトによる極小位置のずれ
def train_loss(theta, center, a):
return a * (theta - center) ** 2
def test_loss(theta, center, a):
# テストでは極小位置が delta_shift だけずれる
return a * (theta - (center + delta_shift)) ** 2
sigmas = np.linspace(0.0, 1.0, 11)
results = {}
for name, center, a in [("flat", -2.0, a_flat), ("sharp", 2.0, a_sharp)]:
tr, te = [], []
for s in sigmas:
# 事後 Q = N(theta*, s^2) からサンプリング
th = center + s * rng.standard_normal(4000)
tr.append(np.mean(train_loss(th, center, a)))
te.append(np.mean(test_loss(th, center, a)))
results[name] = (np.array(tr), np.array(te))
gap = {k: results[k][1] - results[k][0] for k in results} # テスト−訓練
print("平坦極小 訓練損失 sigma=0,0.5,1.0:",
[round(results['flat'][0][i], 3) for i in [0, 5, 10]])
print("鋭い極小 訓練損失 sigma=0,0.5,1.0:",
[round(results['sharp'][0][i], 3) for i in [0, 5, 10]])
print("平坦極小 汎化ギャップ sigma=0,1.0:",
[round(gap['flat'][i], 3) for i in [0, 10]])
print("鋭い極小 汎化ギャップ sigma=0,1.0:",
[round(gap['sharp'][i], 3) for i in [0, 10]])
実行すると、平坦極小の訓練損失は $\sigma$ とともに 0 → 0.122 → 0.500 と緩やかに上がるのに対し、鋭い極小は 0 → 1.517 → 6.122 と急上昇します。摂動への頑健性が桁違いに違うことが数値で確認できます。汎化ギャップは、平坦極小が $\sigma$ によらず約0.06〜0.07に留まるのに対し、鋭い極小は約0.74〜0.78と一桁大きくなります。平坦極小のほうが汎化ギャップが小さい、という経験則がはっきり再現されました。
最後に、この結果を可視化します。
import numpy as np
import matplotlib.pyplot as plt
# 上のセルの sigmas, results, gap をそのまま使う
fig, axes = plt.subplots(1, 2, figsize=(11, 4.4))
ax = axes[0]
ax.plot(sigmas, results["flat"][0], "-o", label="平坦極小 訓練損失")
ax.plot(sigmas, results["sharp"][0], "-s", label="鋭い極小 訓練損失")
ax.set_xlabel("摂動の標準偏差 σ(事後Qの広がり)")
ax.set_ylabel("摂動後の平均訓練損失")
ax.set_title("摂動への頑健性")
ax.legend()
ax = axes[1]
ax.plot(sigmas, gap["flat"], "-o", label="平坦極小")
ax.plot(sigmas, gap["sharp"], "-s", label="鋭い極小")
ax.set_xlabel("摂動の標準偏差 σ")
ax.set_ylabel("汎化ギャップ(テスト損失 − 訓練損失)")
ax.set_title("汎化ギャップ")
ax.legend()
plt.tight_layout()
plt.show()

左のグラフから、平坦極小(緑)は摂動 $\sigma$ を大きくしても訓練損失がほとんど上がらず、鋭い極小(赤)は急激に悪化することが読み取れます。これはPAC-Bayesでいう「平坦極小では大きな $\sigma$(広い事後)が許される」ことそのものです。右のグラフから、平坦極小の汎化ギャップが一貫して小さく、鋭い極小は大きいことが分かります。摂動頑健性と汎化が連動している、という理論の核心が数値で裏付けられました。広い事後を取れる解(平坦極小)はKLを小さくでき、PAC-Bayesバウンドが締まる。だから汎化する。実験はこの因果の鎖を支持しています。
まとめ
本記事では、PAC-Bayes汎化バウンドについて解説しました。
- 発想の転換:1つの仮説でなく、仮説の上の分布(事前 $P$ と事後 $Q$)を評価します。複雑さは $Q$ が $P$ からどれだけ動いたか、すなわち $\mathrm{KL}(Q\|P)$ で測ります。
- McAllester境界:$\mathbb{E}_Q[R] \le \mathbb{E}_Q[\hat{R}] + \sqrt{(\mathrm{KL}+\log(n/\delta))/(2(n-1))}$。KLは $n$ で薄まるので、過剰パラメータでも非空になりえます。
- 導出の核心:測度変換(Donsker–Varadhan変分公式)で、データ依存の $Q$ をデータ非依存の $P$ に移し、その代償としてKLが現れます。
- 平坦な極小:事後をガウス摂動に取ると、平坦な極小は大きな $\sigma$ を許し、KLを小さくでき、バウンドが締まります。平坦さが汎化する理論的根拠です。
- 歴史的意義:Dziugaite-Roy 2017が実NNで非空バウンドを達成し、汎化理論を「机上の空論」から「計算できる保証」へ進めました。
- 情報理論との接続:KLは符号長、相互情報量、f-ダイバージェンスとつながります。「使った情報量で複雑さを測る」という一貫した思想です。
PAC-Bayesは、深層学習の汎化という現代的な謎に、確率分布と情報理論の言葉で切り込む強力な枠組みです。VC理論の限界を越え、平坦な極小や確率的ネットワークの良さを定量的に説明します。
次のステップとして、以下の記事も参考にしてください。