はじめに
本当はベイズニューラルネットのことを書いていこうと思ったら、初歩的なことから書き始めて力尽きた...。
決定論的なニューラルネットワーク
ニューラルネットワーク
まずは決定論的な(すなわち確率的でない)ニューラルネットワークについて述べます。 これはよく知られている通り、第 $l$ 層目のパラメータを $\theta _ l$、微分可能な非線形関数(活性化関数)を $f _ l(\cdot)$ とするときに $L$ 層のニューラルネットワーク $f (\cdot; \theta)$を
$$ f (\cdot ; \theta) = f _ L \circ f _ {L - 1} \circ \cdots \circ f _ l \circ \cdots \circ f _ 1 (\cdot) $$
と合成関数の形式で構成します。ここでは $ l - 1$ 層の出力が $l$ 層の入力になっている一本道のニューラルネットワークを想定しましたが、実際には分岐があったり飛びがあったりしてもよく、ループがなければ問題ありません。
学習では $\theta = \{\theta _ 1, \cdots, \theta _ l, \cdots, \theta _ L \}$ を何らかの損失関数 ${\rm Loss} ( \theta; D )$ に基づいて最小化します。このとき $f (\cdot ; \theta)$ に対して、 $y _ i = f (x _ i; \theta)$ となっているべきというサンプル $D = \{ (x _ i, y _ i) \} _ {i=1, \cdots, N} $が使える場合を教師あり学習、$x _ i$ しかない場合を教師なし学習と言います。
$x _ i$ しかない場合でも、例えば $x _ i = f (x _ i ; \theta)$ となるように損失関数を設定したり(こうした場合、適当な第 $l$ 層までにデータを要約した情報を有してくれていることを期待する)することができ、これは自己符号化器の学習などと言われます。
学習
ニューラルネットワークの学習は
$$ \arg \min _ \theta {\rm Loss}(\theta; D) $$
を求めることにより実施されます。しかし、$\theta$ に関して強烈な非線形性を有する上記の損失関数${\rm Loss (\theta; D)}$ を直接最小化することは通常不可能です。そこで最小値となる必要条件として
$$ \frac{\partial }{\partial \theta _ l} {\rm Loss} (\theta ; D) = 0 \ \ \ \ \ (l = 1, \cdots, L) $$
を取り上げ、この条件を満たすように勾配法による更新を実施していきます。勾配法による更新則は
$$ \theta _ l \leftarrow \theta _ l - \alpha \frac{\partial }{\partial \theta _ l} {\rm Loss} (\theta ; D) $$
となります。$\alpha$ は定数の場合もあれば、更新ステップに応じて変動させる場合もあります。この更新を続けていれば、いずれ勾配が $0$ であるという必要条件を満たす解に落ち着くことが期待できますが、これはあくまで必要条件であり、最小値にたどり着いている保証はありません。局所解または鞍点にいる可能性もあります。
ところで教師あり学習で最小二乗誤差を損失関数に選択した場合、これは出力データにガウスノイズが生じている場合における最尤推定をしているのと同等です。最尤推定には"ある条件"のもとで推定として良いとされる諸性質(一致推定量であること、二次の漸近有効性を有すること等)が備わっているのですが、その"ある条件"をニューラルネットワークは通常満たしていないため、そもそも最尤解に辿り着くこと自体を突き詰めても有用な解が得られる保証はありません。
ニューラルネットワークの最尤推定
ニューラルネットワークに対して最尤推定を実施するというのは
$$ p(y \mid f(x ; \theta)) $$
なる確率モデルに対して尤度関数
$$ \prod _ i p(y _ i \mid f(x _ i ; \theta)) $$
を最大化する試みです。この $p$ に対して ${\rm Normal}(y _ i \mid f(x _ i ; \theta), \sigma )$ という分布を選んだ際の最尤推定が最小二乗法に相当するのでした。尤度関数は積があり取り扱いづらいので、対数を取って
$$ \log \prod _ i p(y _ i \mid f(x _ i ; \theta)) = \sum _ i \log p (y _ i \mid f(x _ i ; \theta)) $$
として最大化するのが一般的です。ここで対数を取った場合の最大化の結果得られる $\hat \theta$ は対数を取る前の最大化の結果と同じであるので心配は無用です(対数関数は単調増加だ)。この対数尤度関数に負符号を付けて最小化問題に仕立て上げることで、よく言われる損失関数というものが出てきます。例えばクラス分類で用いられる損失関数、交差エントロピー損失関数はベルヌーイ分布やカテゴリ分布の最尤推定を考えて、上記のように負の対数尤度を計算すると現れてきます。
すなわち、尤度関数を ${\rm Likelihood} (\theta; D)$ とすると、ニューラルネットワークの損失関数 ${\rm Loss(\theta ; D)}$ が
$$ {\rm Loss(\theta ; D)} = - \log {\rm Likelihood} (\theta; D) = - \sum _ i \log p (y _ i \mid f(x _ i ; \theta)) $$
という形式で"しばしば"表されているということです。しかし、例えばマージン最大化として知られるヒンジ損失関数に関しては、それを負の対数尤度として導出するような確率分布 $p$ が存在しないことが知られており、ニューラルネットワークで使われる損失関数のあらゆるものを、確率モデルから導出できるとは限らないということです。
正則化
さて、最尤推定と損失関数の関係を見てきましたが、そもそもニューラルネットワークでは最尤推定を良しとする強い動機は無かったりします。推定のバリアンスは大きく膨らむ可能性がある上に、手元のデータを表現するようなことばかりに集中し、過剰適合・過学習が生じる場合がほとんどです。そこで、多くの場合は正則化項 ${\rm Reg}(\theta)$ を損失関数 ${\rm Loss} (\theta ; D)$ に加算した、
$$ {\rm Loss} (\theta ; D) + {\rm Reg}(\theta) $$
を新たな損失関数として設定することとなります。$\theta$ に対して何らかのペナルティを与えることで、何でもかんでも表現できてしまうことを防ぎます。この正則化項によって、出来上がる予測モデルの性能はかなり大きく左右され、学習時の大きな課題は、$\theta$ を求める手続きそれ自体よりも、より良い ${\rm Reg} (\theta)$ の設定方法やパラメータ $\theta$ の設定の仕方(つまりニューラルネットワークの構成)を見つけるところになる場合が殆どです。
通常はパラメータ更新には用いない検証用のデータ $D _ {\rm val}$ を準備し、
$$ {\rm Loss}(\theta; D _ {val}) + {\rm Reg}(\theta) $$
を評価することで、パラメータの更新が"今回の"ニューラルネットワークの構造ないし正則化項の設定によって上手く行っているのかを検討します。
具体的な $\rm Reg$ としては ${\rm Reg}(\theta) = \lambda || \theta || _ 2$ というようにパラメータベクトルの二乗ノルムに適当な係数 $\lambda$ を乗じたものが利用されたりします。これにより、パラメータベクトルは原点を中心とした二次関数が構成され、原点に近いほどペナルティが小さくなり、自ずと、大きな値を取らないように学習が進むことになります。損失とペナルティのどちらをどの程度優先するかを決めているのが $\lambda$ であるという認識で良いでしょう。
具体的な応用では、ある程度 $\rm Reg$ の関数は決めてしまい、その係数 $\lambda$ を調整することが多いです。また、調整の検討項目にはパラメータ更新時の学習率 $\alpha$ なども含まれ、これら学習の進みを左右するパラメータたちをハイパーパラメータと呼びます。また、検証データを用いてハイパーパラメータを調整することをハイパーパラメータ探索等と言います。
応用上はgrid searchやrandom search、bayes optimization等が利用され、近年はbayes optimizationの一種を実装しているOptuna等が利用されることが増えました。
MAP推定と正則化の関連
確率的なニューラルネットワークに入る前に、MAP推定という手法と正則化項付きの学習の関連を見ておきます。ニューラルネットワークの損失関数は
$$ {\rm Loss} (\theta ; D) + {\rm Reg}(\theta) $$
と設定されるのでした、一方で ${\rm Loss} (\theta ; D)$ の項はある確率モデル $p(\cdot \mid \theta)$ を用いた負の対数尤度になっているケースがあるという話をすでにしました。今、推定する $\theta$ というパラメータは結局のとこを不確実なのだから、これを確率変数であることにしてしまい、確率モデル $p(\cdot \mid \theta) $ に加えて $p(\theta)$ という分布も一緒に考え、
$$ p(\cdot, \theta) = p(\cdot \mid \theta)p(\theta) $$
を設計することをモデリングと見なすことにします。ここで、$p(\theta)$ は通常は事前分布と呼ばれます。この同時分布に対してニューラルネットワークを導入すると
$$ p(\cdot, \theta) = p(y \mid f(x ; \theta))p(\theta) $$
という分布を考えることができ、これに対して具体的なデータ $D$ を入れてやることで
$$ p(D, \theta) = \prod _ i p(y _ i \mid f(x _ i ; \theta))p(\theta) = {\rm Likelihood} (\theta ; D) p(\theta) $$
という形式の何らかが出来上がります。この同時分布に対して、対数を取って負符号を与えると
$$ - \log {\rm Likelihood} (\theta ; D) p(\theta) = - \log {\rm Likelihood} (\theta ; D) - \log p(\theta) $$
なる式が出ます。これを最小化するのが、MAP推定と呼ばれる手法になります。 このMAP推定と正則化項付きの損失関数最小化との関連を見るために、今、$p $ として適当な指数型分布
$$ p = \exp( - {\rm Reg}(\theta) + {\rm Const}) $$
を選ぶことにしましょう。すると
$$ \begin{align} - \log {\rm Likelihood} (\theta ; D) p(\theta) &= - \log {\rm Likelihood} (\theta ; D) - \log p(\theta) \\ & = - \log {\rm Likelihood} (\theta ; D) - \log \{ \exp( - {\rm Reg}(\theta) + {\rm Const}) \} \\ & = - \log {\rm Likelihood} (\theta ; D) + {\rm Reg}(\theta) + {\rm Const} \end{align} $$
という形式で表されることになります。こうすると、損失関数と負の対数尤度、正則化項と事前分布の対応がついたことになります(${\rm Const}$ 項は最小化にとって無意味な項)。例えば正則化項に $\lambda ||\theta|| _ 2$ を選ぶことは、事前分布として平均 $0$ で分散が $1/2\lambda$ の正規分布を選ぶことに相当します。