○×ゲームに対して、強化学習にニューラルネットワークを組み合わせるということをやってきた。
その中で、複数のインスタンスを同時に学習していくのは、ある程度有効だということが分かった。
ただし、それらの結果を組み合わせる方法が必要という話になった。
それに対して、HME(Hierarchical Mixtures of Experts)を使う方法と、ドロップアウトを使う方法について言及した。
けれど、ドロップアウトを使う方法は、あまり上手くいかなかった。
そこで、もうひとつの方法、HMEを使う方法を考えてみたい。
そのために、まずはHMEについて学んでみた。
なお、参考にしたのは、以下の2本の論文:
- TD Learning of Game Evaluation Functions with Hierarchical Neural Architectures
- Hierarchical Mixtures of Experts and the EM Algorithm
HMEの構造
HMEはHierarchical Mixtures of Expertsの名前の通り、複数のエキスパートネットワーク(Expert Network、何らかの学習器)をツリー状の階層構造で連結させ、協調して働かせることで、一つの大きな学習器とする方法。
最も簡単な構造の場合、次のような構造になる:
この図の中のゲートネットワーク(Gating Network)というのは、各エキスパートネットワークの出力をどのような割合で使うのかを決定するためのもので、これ自体も一つの学習器になっている。
また、プロパゲートノード(Propagate Node)というのは、エキスパートネットワークとゲートネットワークの出力から、その階層の最終的な出力を計算するノードとなっている。
HMEでは、Hierarchicalという名前を冠している通り、この階層をツリー状に複数重ねることが出来る。
その場合、1つ下の階層を1つのエキスパートネットワークとみなすことになる。
例えば、階層を2層にすると、次のような構造になる:
これは、下の図の通り、1つ下の階層を1つのエキスパートネットワークとみなしていることになる:
HMEの出力の計算
HMEでは、入力 (は入力の次元)に対して、エキスパートネットワークの出力 とゲートネットワークの出力 ] を求め、それらを使ってプロパゲートノードでその階層の出力 を得ることになる。
エキスパートネットワークの出力の計算
エキスパートネットワークの出力 は、単純に各エキスパートネットワークの出力の計算に従って求める。
例えば、エキスパートネットワークにニューラルネットワークを使うなら、単にそのニューラルネットワークでの出力を求めればいい。
ゲートネットワークの出力の計算
ゲートネットワークでは、各エキスパートネットワークに対応した重み を用いて、出力 を次のように求める:
次のような図で表すと、分かりやすいかもしれない:
図にもある通り、ゲートネットワークの出力層では、ソフトマックス関数を使っている。
なので、シンプルなクラス分類のニューラルネットワークとみなすことも出来る。
(つまり、どのクラス(=エキスパートネットワーク)を使うべきなのかの度合いを返していると解釈することが出来る)
プロパゲートノードの出力の計算
プロパゲートノードでは、各エキスパートネットワークの出力 とゲートネットワークの出力 を使って、出力 を次のように求める:
なお、TD Learning of Game Evaluation Functions with Hierarchical Neural Architecturesでは、このように単純に線形結合する方法の他に、ゲートネットワークの出力 が最も大きい値になっているエキスパートネットワークの出力 だけを使う方法や、ゲートネットワークの出力 をエキスパートネットワークの出力 を使う確率とみなして、その確率に従って選んだ出力 を使う方法についても述べている。
今日はここまで!