読者です 読者をやめる 読者になる 読者になる

いものやま。

雑多な知識の寄せ集め

HMEについて学んでみた。(まとめ)

技術 AI ニューラルネットワーク HME

これまでの各記事は以下から。

HMEの構造

HMEは、次のような構造になっている:

シンプルな例
f:id:yamaimo0625:20160229193413p:plain

2階層にした例
f:id:yamaimo0625:20160229195838p:plain

エキスパートネットワークというのは、任意の学習器。
ニューラルネットワークなどが使われる。

ゲートネットワークというのは、各エキスパートネットワークの出力をどのような割合で使うのかを決定するためのもので、これ自体も一つの学習器。

プロパゲートノードというのは、エキスパートネットワークとゲートネットワークの出力から、その階層の最終的な出力を計算するノード。

HMEの出力の計算

HMEでは、次のように出力の計算を行う:

  1. エキスパートネットワーク iの出力  y_i を次のように求める:
     y_i = y_i(\boldsymbol{x}; \boldsymbol{\theta}_i)
    ただし、 \boldsymbol{\theta}_i はエキスパートネットワーク iのパラメータ。
  2. ゲートネットワークの出力  g_i を、次のように求める:
    1.  s_i = \boldsymbol{w}_i {}^{\mathrm{T}} \boldsymbol{x}
      ただし、 \boldsymbol{w}_i はゲートネットワークのエキスパートネットワーク iに関するパラメータ。
    2.  g_i = \frac{ \mathrm{exp}( s_i ) }{ \sum_j \mathrm{exp}( s_j ) }
  3. プロパゲートノードの出力  y を、次のように求める:
     y = \sum_i g_i y_i

複数の階層になっている場合、下の階層のHMEを上の階層のエキスパートネットワークとみなして計算を行っていくことになる。

HMEでの学習

HMEでの学習は、次のようにする:

  1. エキスパートネットワーク i について、値  h_{i} を、次のように求める:
     h_i = \frac{ g_i \mathrm{exp}( - \frac12 (d - y_i)^{2} ) }{ \sum_j g_j \mathrm{exp}( - \frac12 (d - y_j)^{2} ) }
  2. エキスパートネットワーク iについて、誤差関数の出力に関する偏微分  \frac{ \partial E }{ \partial y_i } を次のようにして、エキスパートネットワークの学習を行う:
     \frac{ \partial E }{ \partial y_i } = h_i (y_i - d)
  3. ゲートネットワークについて、誤差関数の中間層の出力に関する偏微分  \frac{ \partial E }{ \partial s_i } を次のようにして、ゲートネットワークの学習を行う:
     \frac{ \partial E }{ \partial s_i } = g_i - h_i

複数の階層になっている場合についてはHMEについて学んでみた。(その2) - いものやま。を参照。


このHMEを強化学習の関数近似に使う方法について、次は考えていきたい。

今日はここまで!