TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

将棋でディープラーニングする その33(マルチタスク学習)

SL policy networkとValue networkは、12層までは同じ構成で、出力の数層のみが異なるため、12層まで同じネットワークでそこから2つの出力を行うようにして、SL policy networkとValue networkを同時に学習することを試してみた。

複数のタスクを同時に学習することを、マルチタスク学習といい、以下の論文では顔器官の座標と顔の角度を同時に学習することで精度が上がることが報告されている。
Facial Landmark Detection by Deep Multi-task Learning

マルチタスク学習を行うことで、SL policy networkとValue networkのネットワーク構成が一つになるため、指し手と価値の予測を同時に行えるようになり、対局時の処理時間も短縮できる効果がある。
精度も向上できれば、効果的な手法となる。

ネットワーク構成

SL policyとValue networkで12層目までを共有する。
SL policyは、12層の出力をそのまま出力とする。
Value networkは、13層目で全結合を行い、出力が1つの全結合層に接続する。

学習方法

SL policyの出力のsoftmax_cross_entropyとValue networkの出力のsigmoid_cross_entroyの和を損失として、SGDで学習する。

test accuracyは、SL policy、Value networkのそれぞれの出力で評価する。

検証結果

100万局面を学習データに使い、初期値からSL policy単体、Value network単体、マルチタスク学習した場合を比較した。
f:id:TadaoYamaoka:20170607233357p:plain
※凡例にsl_valが付くものがマルチタスク学習の結果

1エポック後のテストデータ1万局面のtest accuracyは以下の通り。

SL policy単体 0.2819378972053528
マルチタスク学習(SL policy) 0.28547564148902893
Value network単体 0.6400353908538818
マルチタスク学習(Value network) 0.6896619200706482

tain lossはマルチタスク学習したものはSL policy単体より大きくなっているが、Value networkのlossが足されているので妥当である。
減少の傾向は同じであるため、うまく学習できていると思われる。

test accuracyは、SL policy単体とマルチタスク学習のSL policyの出力でわずかにマルチタスク学習の方が一致率が高い。
Value network単体とマルチタスク学習のValue networkの出力では、マルチタスク学習の方が良い一致率になっている。

以上の結果から、マルチタスク学習は精度においても効果的であることが分かった。


RL policy networkの学習がうまくいかず保留していたが、RL policy networkでもマルチタスク学習を行うことで、Value networkの学習がある種の正則化として働いてうまく学習できるようになるのではないかと予測している。
それについては、別途検証したい。


マルチタスク学習は以下のコードで検証した。
https://github.com/TadaoYamaoka/DeepLearningShogi/blob/master/dlshogi/train_sl_policy_with_value.pygithub.com