【Python】TensorFlowでDeep Q Networkを試してみた

# 概要
・強化学習を実装したときのメモ
・[超シンプルにTensorFlowでDQN (Deep Q Network) を実装してみる 〜導入編〜]
(http://blog.algolab.jp/post/2016/08/01/tf-dqn-simple-1/)さんを参考に実装
・⬆️非常にわかりやすく解説されてるからオススメ！
・最初は，**OpenAIのgym**使ってたんだけど，画面描写がどうもうまくいかなくてつんでたから**TensorFlow**でやった．（今度会ったら，筑波大・強化学習・最高戦力のとくおう君にでも聞こうかな）

# 背景
・HONDAのインターン行った時に，初めて強化学習触って興味を持った
・その時は，**TensorFlow**使って**自動運転のAIモデル**を作った
・プログラムはあらかじめ作られていて，自分は報酬関数（Q関数）をチューニングしただけ
・➡︎強化学習やってみたくなった！

# 環境
・OSX
・Python3

# 準備
・TensorFlow

```
$ pip install tensorflow
```

・matplotlib

```
$ pip install matplotlib
```

・[こちら](https://github.com/algolab-inc/tf-dqn-simple)からGitをダウンロードさせてもらいました．


# 実行
・モデルの訓練

```
$ python train.py
```


・テスト

```
$ python test.py
```


#結果
・エポック数30まではこんなかんじ
・９回目で初めて成功！
・その後は，少しコツを掴めてきたのか，３,４回に一回くらいの間隔で成功

```
EPOCH: 000/999 | WIN: 000 | LOSS: 0.0068 | Q_MAX: 0.0002
EPOCH: 001/999 | WIN: 000 | LOSS: 0.0520 | Q_MAX: 0.0003
EPOCH: 002/999 | WIN: 000 | LOSS: 0.0558 | Q_MAX: 0.0000
EPOCH: 003/999 | WIN: 000 | LOSS: 0.0474 | Q_MAX: -0.0005
EPOCH: 004/999 | WIN: 000 | LOSS: 0.0440 | Q_MAX: -0.0019
EPOCH: 005/999 | WIN: 000 | LOSS: 0.0443 | Q_MAX: -0.0028
EPOCH: 006/999 | WIN: 000 | LOSS: 0.0339 | Q_MAX: -0.0046
EPOCH: 007/999 | WIN: 000 | LOSS: 0.0381 | Q_MAX: -0.0068
EPOCH: 008/999 | WIN: 001 | LOSS: 0.0350 | Q_MAX: -0.0095
EPOCH: 009/999 | WIN: 001 | LOSS: 0.0553 | Q_MAX: -0.0128
EPOCH: 010/999 | WIN: 001 | LOSS: 0.0433 | Q_MAX: -0.0158
EPOCH: 011/999 | WIN: 002 | LOSS: 0.0430 | Q_MAX: -0.0201
EPOCH: 012/999 | WIN: 003 | LOSS: 0.0357 | Q_MAX: -0.0232
EPOCH: 013/999 | WIN: 004 | LOSS: 0.0432 | Q_MAX: -0.0236
EPOCH: 014/999 | WIN: 005 | LOSS: 0.0397 | Q_MAX: -0.0222
EPOCH: 015/999 | WIN: 005 | LOSS: 0.0437 | Q_MAX: -0.0227
EPOCH: 016/999 | WIN: 006 | LOSS: 0.0481 | Q_MAX: -0.0204
EPOCH: 017/999 | WIN: 007 | LOSS: 0.0656 | Q_MAX: -0.0130
EPOCH: 018/999 | WIN: 007 | LOSS: 0.0434 | Q_MAX: -0.0034
EPOCH: 019/999 | WIN: 007 | LOSS: 0.0424 | Q_MAX: -0.0019
EPOCH: 020/999 | WIN: 007 | LOSS: 0.0642 | Q_MAX: 0.0137
EPOCH: 021/999 | WIN: 008 | LOSS: 0.0465 | Q_MAX: 0.0441
EPOCH: 022/999 | WIN: 009 | LOSS: 0.0345 | Q_MAX: 0.0491
EPOCH: 023/999 | WIN: 010 | LOSS: 0.0436 | Q_MAX: 0.0217
EPOCH: 024/999 | WIN: 010 | LOSS: 0.0371 | Q_MAX: 0.0582
EPOCH: 025/999 | WIN: 011 | LOSS: 0.0502 | Q_MAX: 0.0838
EPOCH: 026/999 | WIN: 011 | LOSS: 0.0341 | Q_MAX: 0.1054
EPOCH: 027/999 | WIN: 012 | LOSS: 0.0420 | Q_MAX: 0.1422
EPOCH: 028/999 | WIN: 013 | LOSS: 0.0335 | Q_MAX: 0.1543
EPOCH: 029/999 | WIN: 014 | LOSS: 0.0370 | Q_MAX: 0.1583
EPOCH: 030/999 | WIN: 015 | LOSS: 0.0429 | Q_MAX: 0.1700
```

・中略して，エポック数980~999はこんなかんじ
・100発100中成功してますね〜
・報酬も安定して高い値を獲得していることがわかります

```
EPOCH: 980/999 | WIN: 856 | LOSS: 0.0058 | Q_MAX: 0.7769
EPOCH: 981/999 | WIN: 857 | LOSS: 0.0010 | Q_MAX: 0.7644
EPOCH: 982/999 | WIN: 858 | LOSS: 0.0004 | Q_MAX: 0.8117
EPOCH: 983/999 | WIN: 859 | LOSS: 0.0013 | Q_MAX: 0.7591
EPOCH: 984/999 | WIN: 860 | LOSS: 0.0025 | Q_MAX: 0.7604
EPOCH: 985/999 | WIN: 861 | LOSS: 0.0005 | Q_MAX: 0.7933
EPOCH: 986/999 | WIN: 862 | LOSS: 0.0102 | Q_MAX: 0.7585
EPOCH: 987/999 | WIN: 863 | LOSS: 0.0008 | Q_MAX: 0.7673
EPOCH: 988/999 | WIN: 864 | LOSS: 0.0010 | Q_MAX: 0.7975
EPOCH: 989/999 | WIN: 865 | LOSS: 0.0007 | Q_MAX: 0.7867
EPOCH: 990/999 | WIN: 866 | LOSS: 0.0021 | Q_MAX: 0.8062
EPOCH: 991/999 | WIN: 867 | LOSS: 0.0007 | Q_MAX: 0.7717
EPOCH: 992/999 | WIN: 868 | LOSS: 0.0022 | Q_MAX: 0.6096
EPOCH: 993/999 | WIN: 869 | LOSS: 0.0058 | Q_MAX: 0.7815
EPOCH: 994/999 | WIN: 870 | LOSS: 0.0022 | Q_MAX: 0.7558
EPOCH: 995/999 | WIN: 871 | LOSS: 0.0004 | Q_MAX: 0.7771
EPOCH: 996/999 | WIN: 872 | LOSS: 0.0010 | Q_MAX: 0.7514
EPOCH: 997/999 | WIN: 873 | LOSS: 0.0063 | Q_MAX: 0.7018
EPOCH: 998/999 | WIN: 874 | LOSS: 0.0049 | Q_MAX: 0.7713
EPOCH: 999/999 | WIN: 875 | LOSS: 0.0009 | Q_MAX: 0.7712
```
・画面描写
![block.gif](https://qiita-image-store.s3.amazonaws.com/0/377231/28446cb8-a194-b062-0319-d0488bdc8225.gif)




#最後に
・やっぱ強化学習面白いです！
・時間があるときエポック数を少なくして，どのあたりから飽和してくるのかちょっと検証したいと思います．
・報酬関数の部分を少しチューニングしてみたいと思います．


# 参考
・[超シンプルにTensorFlowでDQN (Deep Q Network) を実装してみる 〜導入編〜]
(http://blog.algolab.jp/post/2016/08/01/tf-dqn-simple-1/)
・[TensorFlow](https://www.tensorflow.org/install)