【dqn】dqnで遊んでみた♬

0pt   2018-10-12 09:39
IT技術情報局

時代はDQNということで、久しぶりに遊んでみた。というか、ここからひと月毎日DQNで遊んでみようと思う。

その心機一転、Exampleから一つずつ遊び倒す。
まずは、インストールだが、以前の環境で動かそうとしたら、怒られた。

>python ddpg_pendulum.py Using TensorFlow backend. Traceback (most recent call last): File "ddpg_pendulum.py", line 8, in <module> from rl.agents import DDPGAgent ImportError: No module named 'rl' >pip install keras-rl Collecting keras-rl Requirement already satisfied: keras>=2.0.7 in c:userstosioanaconda3libsite-packages (from keras-rl) (2.2.2) Requirement already satisfied: keras-preprocessing==1.0.2 in c:userstosioanaconda3libsite-packages (from keras>=2.0.7->keras-rl) (1.0.2) Requirement already satisfied: pyyaml in c:userstosioanaconda3libsite-packages (from keras>=2.0.7->keras-rl) (3.12) Requirement already satisfied: scipy>=0.14 in c:userstosioanaconda3libsite-packages (from keras>=2.0.7->keras-rl) (0.18.1) Requirement already satisfied: h5py in c:userstosioanaconda3libsite-packages (from keras>=2.0.7->keras-rl) (2.6.0) Requirement already satisfied: six>=1.9.0 in c:userstosioanaconda3libsite-packages (from keras>=2.0.7->keras-rl) (1.10.0) Requirement already satisfied: numpy>=1.9.1 in c:userstosioanaconda3libsite-packages (from keras>=2.0.7->keras-rl) (1.14.5) Requirement already satisfied: keras-applications==1.0.4 in c:userstosioanaconda3libsite-packages (from keras>=2.0.7->keras-rl) (1.0.4) Installing collected packages: keras-rl Successfully installed keras-rl-0.4.2

ということで、Exampleを動かせるようになりました。
ということで、まず倒立振り子を動かします。
うまく動きました。
次にちょっと気になっていた、あの秘書面接の話をやってみようと思います。
【参考】
DQNに秘書を面接させたら、美しい結果が得られた話

説明は上記のサイトを参照願います。
ということで、ここでは面接20人、100人、そして1000人をやってみました。
プログラムは上記サイトのとおりですが、以下だけ変更します。

NUMS = 100 # 応募者数 . . . #env = Secretary(n=10) #env.play() d = DQNSecretary(n=NUMS, recycle=False) h = d.train(nb_steps=200000, log_interval=10000, verbose=1) d = DQNSecretary(n=NUMS, recycle=True) h = d.test(nb_episodes=1, verbose=1, visualize=True) h = d.test(nb_episodes=1000, visualize=False, verbose=0) rwds = h.history['episode_reward'] win_rate = sum(rwd > 0 for rwd in rwds) / len(rwds) print('採用成功率(1000回):' + str(win_rate)) visualize_adopting(d.env) visualize_q(d, 1) for i in range(2, 10): visualize_q(d, i)

学習のnb_stepは面談者数に応じて、面談者数倍しました。

h = d.train(nb_steps=200000, log_interval=10000, verbose=1)

ということで、例えば面談者100人については、以下のような出力が得られました。

Testing for 1 episodes ... 100人中2人目(暫定順位:1位) 100人中3人目(暫定順位:1位) 100人中4人目(暫定順位:1位) 100人中5人目(暫定順位:1位) 100人中6人目(暫定順位:4位) 100人中7人目(暫定順位:2位) 100人中8人目(暫定順位:2位) 100人中9人目(暫定順位:2位) 100人中10人目(暫定順位:7位) 100人中11人目(暫定順位:6位) 100人中12人目(暫定順位:9位) 100人中13人目(暫定順位:2位) 100人中14人目(暫定順位:5位) 100人中15人目(暫定順位:8位) 100人中16人目(暫定順位:15位) 100人中17人目(暫定順位:16位) 100人中18人目(暫定順位:9位) 100人中19人目(暫定順位:8位) 100人中20人目(暫定順位:13位) 100人中21人目(暫定順位:11位) 100人中22人目(暫定順位:13位) 100人中23人目(暫定順位:19位) 100人中24人目(暫定順位:16位) 100人中25人目(暫定順位:1位) 100人中26人目(暫定順位:15位) 100人中27人目(暫定順位:16位) 100人中28人目(暫定順位:5位) 100人中29人目(暫定順位:18位) 100人中30人目(暫定順位:5位) 100人中31人目(暫定順位:20位) 100人中32人目(暫定順位:3位) 100人中33人目(暫定順位:23位) 100人中34人目(暫定順位:33位) 100人中35人目(暫定順位:34位) 100人中36人目(暫定順位:19位) 100人中37人目(暫定順位:11位) 100人中38人目(暫定順位:1位) あなたは4番目に優秀な応募者を採用しました。 最良の応募者は55人目でした。 Episode 1: reward: 0.000, steps: 38 採用成功率(1000回):0.351

なんとなく、ウワンだといい人がいれば採用しちゃいそうですが、DQNはちゃんと25人目のそこまでの1位の人をスルーして38人目まで待っています。エライ!

ということで、100人にしても成功率の理論値1/e=0.3678、で37人スキップの通りの結果をほぼ導いています。
それにしても100人いてもそこから最善の秘書を3割以上の確率で選べるというのはすごいと思う。

また、収束性もほぼ同じで、例えば20人の場合の収束性は10人とほぼ同じでした。
68747470733a2f2f71696974612d696d6167652d

20人と100人を並べると以下のとおり、どちらも理論値辺りで採用戦略を変更しているのが分かります。
68747470733a2f2f71696974612d696d6167652d
68747470733a2f2f71696974612d696d6167652d
二人目の採用については、20人だと正解をだせそうですが、100人いると山がちょっとありますが、難しいかもしれません。
68747470733a2f2f71696974612d696d6167652d
68747470733a2f2f71696974612d696d6167652d
実は、1000人もやってみましたが、こちらはほとんど学習できていません。
※ここはネットワークモデルの改善で行けるかためしてみたいと思います
あと、お気づきのとおり、グラフで日本語が文字化けしていますが、今のところ原因不明なのでこのまま載せることとしました、ご容赦ください

まとめ

・秘書面接のDQNは100人までスケールできることが分かった

・1000人だと学習ができなかったのでネットワークを改善して再トライしたい
・グラフで文字化けしているが、原因不明である
・ロジックなどの解析はしていないので、次回以降に記載したい

Source: python tag

   ITアンテナトップページへ
情報処理/ITの話題が沢山。