DQN手法を用いた強化学習について

# 強化学習とは

木村によれば、『強化学習とは，試行錯誤を通じて環境に適応する学習制御の枠組である.教師付き学習と異なり，状態入力に対する正し い行動出力を明示的に示す教師が存在しない代わりに，一 連の行動に対して結果としての良し悪しを評価する「報酬」というスカラーの評価値が与えられ，これを手 がかりに学習を行うが，報酬や状態遷移には不確実性や時 間的遅れがある.そのため，一般に行動を実行した直後の 報酬をみるだけでは，学習主体はその行動が正しかったか どうかを判断できないという困難を伴う』[^1]である。

つまり、機械学習の肝である、全ての命令を予め覚えさせるのではなく、エージェント自信が学習することができる。

また、今後の開発のヒントになりそうな現代のキーワードも一緒に解説をしたい。

![AgentVsEnv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/0a5056a8-46dc-f25a-7f0d-a1f22223a124.png)


# コネクショニズム

エージェントのBrainクラス(policy)にNLMやCNNを用いることが一般的である。また、人間の神経細胞を模した並列処理の方法をニューラルネットワークという。ニューラルネットワークで研究を行う立場を「コネクショニズム」と言い、ニューラルネットワークを駆使して人工知能研究を行うことを「コネクショニスト」という。
　しかし、コネクショニズムにも限界があり、簡単な文法は生成できるものの、それ以降の構成的構造(構文,文章全体)を加味した出力はできなかった。[^2]
# フレーム理論

1974年にミンスキーが「A Framework for Representing Knowledge」の中でフレーム理論を提唱した。[^3]
フレーム理論を要約すると、以下の通りである。

・フレームとは「データ構造体」を指し、人間は実生活の中で、認識を行う上で、フレームを柔軟的に使用する。
・フレームは「リビングルームにいる」「誕生日会を開催している」などである。
・フレームはノードを結びつけたネットワーク構造を有している。フレームのトップは固定されてる。その下位は感覚器官とのリンクや、インスタンス、データとやりとりを行うスロットがある。
・これらのフレームの一連した動きをフレームシステムといい、情報検索システムに於いて結合している。
# フレーム問題[^4]

1984年にダニエル・デネットが問題を例示している。
原文が非常に優れているので、Deeplで翻訳したものを転記したい。

'''
昔々、あるところにR1と名付けられたロボットがいました。R1の仕事は、自分の身を守ることだけ。ある日、設計者の計らいで、大切なエネルギー源である予備のバッテリーが、時限爆弾のある部屋に閉じ込められていることを知ることになった。R1は、その部屋とドアの鍵を探し出し、電池を救出する計画を立てた。部屋の中にはワゴンがあり、電池はワゴンに乗っていた。R1は「PULLOUT（Wagon, Room, t）」と呼ばれるある動作をすると、電池が部屋から取り出されるという仮説を立てた。すぐに行動したところ、爆弾が爆発する前に電池を部屋から出すことに成功しました。しかし、残念なことに、爆弾はワゴンの中にもありました。R1は、爆弾が部屋の中のワゴンの上にあることは知っていたが、ワゴンを引っ張れば電池と一緒に爆弾が出てくることに気づかなかったのだ。哀れなR1は、そのような当たり前のことを見逃していたのだ。
振り出しに戻った。設計者は、「解決策は明らかだ。次のロボットは、意図した行為の意味だけでなく、その行為の副作用に関する意味も、計画を立てる際の記述から推測して認識できるようにしなければならない」。彼らは次のモデルを「R1D1」と名付けた。R1D1」は「R1」が陥ったのと同じような状況に置かれ、「PULLOUT（Wagon, Room, t）」というアイデアを思いつくと、設計通りにその行動の意味を考え始めました。ワゴンを部屋の外に出しても部屋の壁の色は変わらないことを推論し、さらに「ワゴンを外に出すと、ワゴンに付いている車輪よりも多くの回転数を回すことになる」という暗黙の了解を証明しようとしたところで、爆弾が爆発した。
振り出しに戻る。関連性のある暗示と関連性のない暗示の違いを教え、関連性のない暗示を無視するように教えなければならない」と設計者は言った。そこで彼らは、意味合いをプロジェクトに関連するものと関連しないものにタグ付けする方法を開発し、その方法を次のモデル「R2D1」に搭載した。R2D1に、自分の祖先を絶滅させることを明確にしたテストを課したとき、彼らはハムレットのように、爆弾の入った部屋の外に座っているR2D1を見て驚いた。何とかしろ！」と彼らは爆弾に向かって叫んだ。私はそうしている」と、それは言い返した。無関係だと判断した何千もの意味合いをせっせと無視している」。無関係な暗黙の了解を見つけたら、それを無視しなければならないリストに入れて......」と言って、爆弾は爆発した。
これらのロボットはすべてフレームの問題を抱えている。R2D2のような鋭い洞察力とリアルタイム性を持ったロボットを作るには、フレーム問題を解決しなければならない。フレーム問題は、一見すると、ロボット工学にとって厄介な技術的問題であり、人工知能（AI）の研究者にとっては、単なる好奇心をくすぐるパズルのように見える。しかし私は、この問題は、原理的にはアクセス可能であるにもかかわらず、何世代もの哲学者が気づかなかった、新しくて深い認識論的問題であり、AIの斬新な手法によって明るみに出されたが、まだ解決には至っていないと考える。多くのAI関係者は、フレーム問題の深刻さを同様に高く評価しています。ある研究者は、「我々は、知的ロボットを設計するという目標をあきらめ、他の誰かが設計した知的ロボットを破壊する銃を設計するという課題に転じた」と言った。
'''
# 心の社会[^5]

ミンスキーによれば、心を構成する小さなプロセスを「エージェント」と呼び、そのエージェントが蜘蛛の巣の用に互いを結びつけた集合を「心の社会」とした。

そして、下記のような推論を行なった。

1.エージェントはいくつかの階層に別れ、下位から上位に情報の伝達を行う。
2.エージェントはただ指示に従い実行する者と全体を理解して命令を下す者がいる。
3.上記の仕組みは、心といえるだろう。しかし、心を規定してはいけない。
4.行動的なエージェントの他に抑制するエージェント、点検するエージェントもいるはずである。
5.エージェントはそれら、実行しながら、何らかの「報酬」を得ているに違いない。
# 実装

実装部では、OpenIAのGym「Airbot」とその環境の「StableBaselines」を使用各Policyに従い学習し、その変化を描画した。また、学習曲線も導出を行なった。


前処理、後処理が助長であるため、コードの主要部分のみを抜粋した。

全体のコードはこちら

https://github.com/sugiyama404/acrobot

```python
import shutil

train_cnt = [0,25000,50000,75000,100000,125000,150000]
dir_f = ['negative_control/','traning_25000/','traning_50000/','traning_75000/','traning_100000/','traning_125000/','traning_150000/']

for item in dir_f:
    file_exit=os.path.exists(item)
    if file_exit:
        shutil.rmtree(item)
        print(item + " ディレクトリーの削除に成功しました。")

for item in csv_files:
    csv_exit=os.path.isfile(item)
    if csv_exit:
        os.remove(item)
        print(item + " ファイルの削除に成功しました。")

for index, item in enumerate(train_cnt):
    
    model = DQN(policies, env_vec, verbose=0)
    folder_name = dir_f[index]

    if item != 0:
        model.learn(total_timesteps=item)
        model.save(policies + "-Acrobot" + str(item))


    env = VecVideoRecorder(env_vec, video_folder=folder_name,
                                record_video_trigger=lambda step: step == 0, video_length=1000,
                                name_prefix="tran")

    evaluate(env, model, n_step=10000, n_ave=100)
```
airbotの動きをgif化した。
gifが重くてアップロードできないため、リンクにした。

MlpPolicy

https://github.com/sugiyama404/acrobot/blob/main/MlpPolicy_image.gif

LnMlpPolicy

https://github.com/sugiyama404/acrobot/blob/main/LnMlpPolicy_image.gif



# 各手法の教育曲線(移動平均線)

![Unknown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/7c0c2b73-e80b-e3ba-7ba4-36b6da084819.png)

[^1]: [強化学習の基礎](http://sysplan.nams.kyushu-u.ac.jp/gen/papers/paper2012/A_BasisOfRL.pdf '強化学習の基礎')

[^2]: [認知過程のコネクショニスト・モデル](https://repository.dl.itc.u-tokyo.ac.jp/record/31676/files/KJ00002360177.pdf "認知過程のコネクショニスト・モデル")

[^3]: Minsky, Marvin (1974): "A Framework for Representing Knowledge",Cambridge, MA: MIT AI Lab

[^4]: DANIEL C. DENNETT (1984): "Cognitive wheels: the frame problem of AI." C. Hookway ed., Minds, Machines and Evolution, Cambridge University Press

[^5]: マーヴィン・ミンスキー著　安西祐一郎訳、心の社会、産業図書、1990