いものやま。

雑多な知識の寄せ集め

HMEについて学んでみた。(その1)

○×ゲームに対して、強化学習ニューラルネットワークを組み合わせるということをやってきた。
その中で、複数のインスタンスを同時に学習していくのは、ある程度有効だということが分かった。

ただし、それらの結果を組み合わせる方法が必要という話になった。
それに対して、HME(Hierarchical Mixtures of Experts)を使う方法と、ドロップアウトを使う方法について言及した。

けれど、ドロップアウトを使う方法は、あまり上手くいかなかった。

そこで、もうひとつの方法、HMEを使う方法を考えてみたい。

そのために、まずはHMEについて学んでみた。

なお、参考にしたのは、以下の2本の論文:

HMEの構造

HMEはHierarchical Mixtures of Expertsの名前の通り、複数のエキスパートネットワーク(Expert Network、何らかの学習器)をツリー状の階層構造で連結させ、協調して働かせることで、一つの大きな学習器とする方法。

最も簡単な構造の場合、次のような構造になる:

f:id:yamaimo0625:20160229193413p:plain

この図の中のゲートネットワーク(Gating Network)というのは、各エキスパートネットワークの出力をどのような割合で使うのかを決定するためのもので、これ自体も一つの学習器になっている。
また、プロパゲートノード(Propagate Node)というのは、エキスパートネットワークとゲートネットワークの出力から、その階層の最終的な出力を計算するノードとなっている。

HMEでは、Hierarchicalという名前を冠している通り、この階層をツリー状に複数重ねることが出来る。
その場合、1つ下の階層を1つのエキスパートネットワークとみなすことになる。

例えば、階層を2層にすると、次のような構造になる:

f:id:yamaimo0625:20160229195838p:plain

これは、下の図の通り、1つ下の階層を1つのエキスパートネットワークとみなしていることになる:

f:id:yamaimo0625:20160229200607p:plain

HMEの出力の計算

HMEでは、入力  \boldsymbol{x} \in \mathbb{R}^{I} Iは入力の次元)に対して、エキスパートネットワークの出力  y_i \in \mathbb{R} とゲートネットワークの出力  g_i \in [0, 1] を求め、それらを使ってプロパゲートノードでその階層の出力  y \in \mathbb{R} を得ることになる。

エキスパートネットワークの出力の計算

エキスパートネットワークの出力  y_iは、単純に各エキスパートネットワークの出力の計算に従って求める。
例えば、エキスパートネットワークにニューラルネットワークを使うなら、単にそのニューラルネットワークでの出力を求めればいい。

ゲートネットワークの出力の計算

ゲートネットワークでは、各エキスパートネットワークに対応した重み  \boldsymbol{w}_i \in \mathbb{R}^{I} を用いて、出力  g_i を次のように求める:

 {\displaystyle
\begin{align}
s_i &= \boldsymbol{w}_i^{\mathrm{T}} \boldsymbol{x} \\
g_i &= \frac{ \mathrm{exp}(s_i) }{ \sum_j \mathrm{exp}(s_j) }
\end{align}
}

次のような図で表すと、分かりやすいかもしれない:

f:id:yamaimo0625:20160229202636p:plain

図にもある通り、ゲートネットワークの出力層では、ソフトマックス関数を使っている。
なので、シンプルなクラス分類のニューラルネットワークとみなすことも出来る。
(つまり、どのクラス(=エキスパートネットワーク)を使うべきなのかの度合いを返していると解釈することが出来る)

プロパゲートノードの出力の計算

プロパゲートノードでは、各エキスパートネットワークの出力  y_i とゲートネットワークの出力  g_i を使って、出力  y を次のように求める:

 {\displaystyle
y = \sum_i g_i y_i
}

なお、TD Learning of Game Evaluation Functions with Hierarchical Neural Architecturesでは、このように単純に線形結合する方法の他に、ゲートネットワークの出力  g_i が最も大きい値になっているエキスパートネットワークの出力  y_i だけを使う方法や、ゲートネットワークの出力  g_i をエキスパートネットワークの出力  y_i を使う確率とみなして、その確率に従って選んだ出力  y_i を使う方法についても述べている。

今日はここまで!