いものやま。

雑多な知識の寄せ集め

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

昨日はHMEでの学習について説明した。

これでHMEについての説明自体は終わりなんだけど、せっかくなので、論文内で言及されているHMEの成果についても。

参照している論文は、以下のもの:

TD Learning of Game Evaluation Functions with Hierarchical Neural Architectures

非連続な関数の回帰

この論文では、非連続な関数の回帰を、以下の4つで試して、結果を比較している:

  • 普通の多層ニューラルネットワーク
  • HME
  • Meta-Pi(HMEと同様の階層構造で、ただしエラーを持ったアーキテクチャ
  • 知識ベース(HMEと同様の階層構造で、ゲートネットワークの出力を問題の知識を使って行う)

具体的には、次の非連続な関数の回帰を行う:

 {
f(x) = \left\{ \begin{array}{ll}
\mathrm{sin}( 2 \pi x + \pi ) + 1 & (0 \le x \le 0.5) \\
\mathrm{sin}( 2 \pi x - \pi ) - 1 & (0.5 < x \le 1)
\end{array} \right.
}

グラフは論文の図3.7を見てほしいけど、この関数は x = 0.5で非連続になっている。

なお、知識ベースのゲートネットワークは、 0 \le x \le 0.5のときと 0.5 \lt x \le 1のときとで、使うエキスパートネットワークを切り替えるようにしている。

結果の詳細は論文の表3.2、表3.3を参照。
また、図3.8、図3.9を見ると、それぞれの結果がどうだったのかが分かりやすいと思う。

結果の概要だけ書くと、以下の通り:

このように、論文では(知識ベースを除けば)HMEが有効であることが示されている。
また、活性化関数の感度の調整が重要であるとしている。

ただ、個人的には、HMEとMeta-Piに本質的な違いがあるとは思えない。
というのも、一方の誤差関数が最小になっていれば、他方の誤差関数も最小になるという関係があるはずなので。
活性化関数の感度が影響したことも踏まえると、誤差関数の違いにより、勾配を求めたときのベクトルの長さがHMEとMeta-Piで違っていて、それにも関わらず同じステップ幅で学習をしたことで、この違いが生まれたんだと思う。
(活性化関数の感度を変えると、勾配のベクトルの長さが変わる(向きは同じはず)ことに注意)

○×ゲームの状態価値関数の関数近似

また、この論文では、○×ゲーム、および、バックギャモンの終盤について、強化学習の状態価値関数の関数近似を、先に述べた4つで試し、結果を比較している。
そのうち、○×ゲームに対する結果について。

なお、この学習では、出力の重みに関する勾配を使ってオンライン学習する方法ではなく、数回のゲーム行って得られた結果を訓練データとしてオフライン学習する方法が使われている。
また、学習の進捗具合の把握には、簡単なルールに基づいて動くAIとの対戦結果を使っている。

ちなみに、この簡単なルールというのは、自分のリーチがかかっていたら勝つ/相手のリーチがかかっていたら防ぐ/そうでなければランダム、というもので、このAIに対して勝率がもっとも高くなるのは、初手に角をとる手。
その場合、勝率が約61%となる。
(詳しくは論文の付録Cを参照)

結果は表4.9にまとまっている。
また、図4.3、図4.4を見ると、学習の進み具合が分かりやすい。

結果の概要は、以下の通り:

  • 普通の多層ニューラルネットワークだと、中間層のユニット数が80個だと約60%の勝率になる。
  • HMEだと、中間層のユニット数が40個のエキスパートネットワークを2つ使うと、59%強の勝率になる。
  • Meta-Piだと、中間層のユニット数が40個のエキスパートネットワークを2つ使うと、59%弱の勝率になる。

興味深いのは、普通の多層ニューラルネットワークのときに、中間層のユニット数が80個も必要になっていること。
○×ゲームはルールの簡単さに反して、意外と近似しにくい状態関数を持つらしい。

それと、HMEはエキスパートネットワークが2つのシンプルな構造の結果がよかったというのも興味深い。
より大きな構造だと、あまりうまくいかなかったらしい。
以下、論文の「4.2.3 Experimental Results」の「Tic-Tac-Toe Experiment 1: Monolithic vs. Mixture of Experts」より引用:

The best HME architectures used only two expert networks, because larger hierarchies did not perform.

論文では、どうしてそのような結果になったのかについては、特に言及されていない。

HMEではゲートネットワークの出力にソフトマックス関数を使うので、近似的にはいずれかのエキスパートネットワークのみを使うことになっている。
なので、より大きな構造にしたときに、おそらく1つ1つのエキスパートネットワークをより小さくしていたと思うんだけど、その小ささでは分割された状態価値関数を近似するには弱くなりすぎていたんじゃないかなと思う。
そして、複数インスタンスを同時に学習させたときの様子から考えると、おそらく○×ゲームの状態価値関数は、中央に○がある場合と角に○がある場合とで非連続になっていて、2つのエキスパートネットワークがあれば十分なんだと思う。
そういったことから、エキスパートネットワークの数は2つに抑えて、その代わり1つのエキスパートネットワークを十分に大きくしたときに、もっともいい結果が出たんだと思う。


いずれにせよ、HMEがいい結果を出していることは、確か。
ただし、その階層構造をどのようにすればいいのかは、タスクに依存する部分が大きく、試行錯誤が必要かもしれない。

今日はここまで!