Dropoutによる近似ベイズ推論について2



以前に、Dropoutによる近似ベイズ推論に関する記事をあげました。

(adsbygoogle = window.adsbygoogle || ).push({});割と今更ですが、深層学習において、汎化性能を保つための工夫の一つであるDropoutを使って推論を行うことが、近似的にベイズ推論になっているという論文がありますので、それについて記します。また、実際に試験的...

上記では、ソフトマックス関数の出力値の平均を、カテゴリカル分布のパラメータと見て、その不確実性をエントロピーとして算出していました。

これについて、少し気になることがあったので、確認をしてみました。

エントロピー算出の検証

論文では、前回の記事のように具体的に計算は行っておらず、「カテゴリカル分布のパラメータが揺らぐので、それをエントロピーなり分散なりで計算すれば、深層学習の予測の不確実性を定量化できるだろう」と言っています。

この時、エントロピーを使ったとしても、定量化計算には例えば、

  • 出力ベクトル→Softmax→平均値→エントロピー
  • 出力ベクトル→平均値→Softmax→エントロピー

と算出してみると、どっちも問題なさそうな気がするのですが、どちらがより妥当なのかが疑問に思いました。

これについて、学習させるデータ、推論データ、ドロップアウトなどについて、乱数固定して、両方の結果を見比べてみました。

準備

もろもろインポートします。

乱数を固定して、CPUで学習させることにします。

GPUで乱数固定する場合は、Chainerであれば、cupyで設定することになります。

前回同様にMNISTについてサクッと学習させます。

ひとまずこれで準備完了です。

出力ベクトル→Softmax→平均値→エントロピー

モデルの出力値のソフトマックス関数の値について、モンテカルロドロップアウトサンプリングの平均値をとってエントロピーを計算させてみます。

これは前回記事と同じやり方になります。

結果についてはやはり前回同様、エントロピーが低いものは予測しやすい画像、エントロピーが高いものは予測しにくい画像が集まりました。

出力ベクトル→平均値→Softmax→エントロピー

次に、モデルの出力値のモンテカルロドロップアウトサンプリングの平均値について、ソフトマックス関数をとってエントロピー算出してみます。

コードを少し変更。

やっぱりピッタリ一致しませんでした。

ただし、傾向としては同じようなものを抽出してきている様子です。

おまけとまとめ

おまけなんですが、ドロップアウトなしの出力ベクトル→Softmax→エントロピーを計算させた結果が以下になります。

やっぱり似たようなものが出てきた笑

いずれの方法も、これらの結果を能動学習に用いるなどであれば、似たような効力は得られそうな気がします。

モンテカルロドロップアウトサンプリングを導出することで、ベイズの枠組みとして考えられることは、論文で理論的に定式化していますので、モンテカルロドロップアウトサンプリングから予測分布を導出する形まで、数式的には納得がいく気がします。

また、論文著者のサイトで以下のものがあります。

http://mlg.eng.cam.ac.uk/yarin/blog_2248.html

これのソフトマックス尤度の考えなどからすれば、やはり「出力ベクトル→Softmax→平均値→エントロピー」が今のところ一番納得できるやり方な気はするのですが、結果が同じでないということは微妙に何か違うことなので、この辺りは厳密にはどう考えればいいのかなーって思いました。

実験したソースコードは以下にまとめました。

GitHub: https://github.com/Gin04gh/datascience/blob/master/samples_deeplearning_python/dropout_bayesian_approximation_experiment.ipynb



 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です