ややプログラム紀行

博士2年のプログラムに関する日記

PACベイズ

openreview.net
という論文で汎化性能を測るための様々なモデル複雑度の性能が比較されていて、その中でもPAC-Bayesian Theoremに基づく指標たちの性能が良かったらしいのでちょっと勉強した

PACベイズ

まずPACベイズを知らなかったのでそこから勉強をはじめたけど、↓が参考になった
arxiv.org

そもそもPAC(Probably Approximately Correct)学習っていうのは具体的なアルゴリズムとかじゃなくフレームワークのことで、ざっくりいうと仮説集合Hが「サンプル数を十分多くすることで高い確率で分類誤差が十分小さくなるような仮説を選択できるアルゴリズムが存在する」時にHはPAC学習可能という*1
で、この枠組みをベイズ推定にも持ち込もうとしたのがPACベイズらしい

ただ、初めて知ったときはかなり混乱したけどベイズとは名ばかりで、実態はかなりベイズ推定からかけ離れてる(気がする)*2

通常のPAC学習との違いは事前分布と事後分布というのが導入される点で*3、事前分布を用いて事後分布の複雑度を評価(基本的にKLダイバージェンス)することで事後分布による汎化誤差を上から抑えるのが大抵の流れになっている

PACベイズにはかなり多くの変種が存在するようで、それ自体結構深いジャンルっぽい

PAC Bayesian measure

SGDなり何なりをして訓練データからニューラルネットを学習するわけだけど、得られたネットワークの汎化誤差がどうなってるかを評価したい

様々な評価方法が存在する中で、今のPACベイズの考えを用いてそれなりにnon-vacuousな汎化誤差の評価ができるらしいのがこの論文
arxiv.org
この論文はもともと下の論文のアイディアを現代風に拡張したものらしい*4

papers.nips.cc

この論文のメインアイディアは、ネットワークの汎化誤差そのものを直接上から抑えようとするんじゃなく、確率的に揺らしたネットワークを評価する(だから(Not) bounding 〜らしい)
確率的に揺らしたネットワークを事後分布と見ることでPACベイズを適用することができて、後は揺らし方を調整することで汎化誤差の上界を最適化するのが基本方針になっている
現代版の方の論文では、揺らし方の調整の部分を現代風にした(具体的にはネットワークを学習した後、上界をSGDを用いて最適化する)


そもそも何で確率的に揺らしたネットワークを考えるんだよ!って話だけど、これには(一応)flat minimaが汎化誤差に影響を与えているっていう仮説が関係している
まず前提として最終的に知りたいのは元のネットワークの汎化誤差な訳だから、PACベイズによる評価が上手くいくためには事後分布の誤差が元のネットワークの誤差とある程度似ている必要がある
そこでもし学習したネットワークがflat minimaに存在していた場合、その周囲の誤差はネットワークのそれと近い値になることが期待できるわけだから、そのflat minimaのあたりで確率的に揺れてるネットワークを事後分布とすることで上手くいきそうな気がする
さらに、flatであればあるほど事後分布が感覚的に大きくなるわけだから、事前分布とマッチしやすくなり(つまりKLダイバージェンスが小さくなり)結果として汎化誤差の上界が小さくなりそう、、、という話らしい

正直上界の最適化が必ずしもflat minimaと結びつくとは思えないけれど、ともかく確率的なネットワークを考えることで元のネットワークの周辺も考慮できるようになるというのが本質っぽい

*1:元々はアルゴリズム多項式時間で仮説を選択できることも条件に入ってたけど無視されることが多い?

*2:[1901.05353] A Primer on PAC-Bayesian Learning とかがPACベイズベイズ推定の関係について言及してた

*3:ここでいう事前分布と事後分布はベイズ推定の文脈よりかなり自由な定義で、サンプルに依存しない分布とサンプルに依存する(しなくてもいい)分布くらいの意味合い

*4:タイトルにエヴァ感を感じたけど元ネタとかあんのかな