前回はドロップアウトを実装したニューラルネットワークを強化学習の関数近似に使う実験をした。
けど、結果としてはうまくいかなかった。
そこで、次はHMEを強化学習の関数近似に使うのを試してみる。
HMEについては、以下を参照:
HMEの出力の重みに関する勾配計算
HMEを強化学習の関数近似に使うためには、誤差関数の重みに関する勾配ではなく、出力の重みに関する勾配を求める必要がある。
以下では、下のような1階層のHMEについて考えていく:
HMEの重み(パラメータ)には、以下のものがある:
- エキスパートネットワークのパラメータ
- ゲートネットワークのパラメータ
これらを使って、次のように出力が計算される:
- エキスパートネットワークの出力 を次のように求める:
- ゲートネットワークの出力 を、次のように求める:
- プロパゲートノードの出力 を、次のように求める:
このとき、勾配 、 がどうなるのかをそれぞれ計算していく。
まず、 から。
パラメータ が影響を与えるのは、エキスパートネットワークの出力 とHMEの出力 。
したがって、次のようになる:
ここで、 はエキスパートネットワークの出力の重みに関する勾配なので、エキスパートネットワークに(関数近似のための)ニューラルネットワークを使っていれば、誤差逆伝播法で計算できるし、エキスパートネットワークが下の階層のHMEであれば、今やっている方法で(再帰的に)計算できる。
次に、。
パラメータ が影響を与えるのは、、ゲートネットワークのすべての出力 、それとHMEの出力 。
したがって、次のようになる:
ここで、は、以下のように計算できる:
これで全部計算できるようになった。
ただし、ゲートネットワークの重みに関する勾配を求めるときには、エキスパートネットワークの出力が必要になっていることに注意。
なので、
- エキスパートネットワークの出力 と勾配 を計算する。
- ゲートネットワークの出力 と勾配 を計算する。(勾配の計算にはエキスパートネットワークの出力 を使う)
- 勾配 を計算する。(勾配の計算にはゲートネットワークの出力 を使う)
- HMEの出力 を計算する。
という手順で、HMEの出力と勾配を計算することになる。
今日はここまで!