Gin04ghデータ分析業務、予測モデル開発などを担当しています。勉強してきた技術などを適当に書いていければと思います。Python、R、SAS、JavaScript、PHP、Rubyらへんが得意です。深層学習において、汎化性能を保つための工夫の一つであるDropoutを使って推論を行うことが、近似的にベイズ推論になっているという論文がありますので、それについて記します。実際に試験的にMNIST画像分類で推論をしてみて、様子について確認してみようと思います。論文は下記になります。modelにおける変分ベイズ推論となる事を理論的に示しています。して考え、これがDropoutによってネットワークのユニットをランダムに0にすることと同じことを意味しています。予測分布は、以下のようにDropoutを適用したサンプリングの平均を取ることで得ます。dropout」と呼んでいます。dropoutで、予測分散を計算できることが示されています。エントロピーも、予測分布から一般的なエントロピーを計算させることができます。実際にDropoutを適用して深層学習モデルを学習し、Dropoutを適用したまま推論を繰り返して、予測分布を作成してみます。今回は論文と同様に、MNIST画像分類で実験的に行ってみます。コードは以下にもあげました。https://github.com/Gin04gh/datascience/blob/master/samples_deeplearning_python/dropout_bayesian_approximation.ipynbライブラリはChainerを使いました。ライブラリをもろもろインポート。tqdmまずデータを下記のように準備します。10000)"""モデルはちょっとだけ畳み込みも追加して、以下のようなCNNを作りました。'elapsed_time']))trainer.run()Pythonmodel.to_cpu()1model.to_cpu()推論させます。中としてDropoutを有効にします。上記の概要の通り、1回の推論を行うことで、カテゴリカル分布の観測値を得ることができ、これをサンプリング回数繰り返し推論させることで、「結局どのラベルにどれだけ振り分けられたのか」といった多項分布の観測値を得ることができ、これを平均を取ることで、一枚の画像につき、どのラベルであるかを表す予測分布が得られることになります。一枚の画像につき推論を繰り返した時に、全てのラベルに均等に振り分けられた場合、全てのラベルの確率が同じである一様分布ができます。いった画像は、どのラベルであるか検討がつかないという意味であり、つまり予測しにくい画像ということになります。逆に予測しやすい画像を推論した結果として得られるサンプリングの分布は、どんなDropoutパターンでも予測ラベルが集中しやすいものになります。上記の概要にも記した通り、この予測しにくさを定量化するため、今回はそれぞれの画像についてエントロピーを算出してみます。エントロピーは、確率分布の予測しにくさを表します。一般的に、確率分布が一様分布に従う時、エントロピーは最大になります。ラベル番号に絞ってエントロピーを算出し、予測しやすいそのラベルの画像と、予測しにくいそのラベルの画像をプロットするコードを書いてみました。30')plt.show()予想通りの結果で、うまくいっていそうです。画像で近似ベイズ推論で得られた予測分布のエントロピーが低かったもののTOP30、高かったもののTOP30を表示してみました。逆にエントロピーが高いものは、予測がしにくく、他のラベルと間違えやすい画像ですので、形がいびつであったり、汚い字が集まります。これを他の数字でも実行してみた結果が以下になります。エントロピーが低いものは、ただ真っ直ぐに線が引かれているだけで、あまり面白くないかもしれないです。エントロピーが高いものに関しては、字がかすれていたり、あと、線が太すぎても予測を間違えやすい傾向にあるようです。エントロピーが高いものは、かなりひどく、もはや人でも読めなさそうなものも見られます。