# Reinforcement Learning : day 8 CartPole(CNN) # Aproach NNにCNNを組み込んで学習させる。 通常得られる4つの状態(カート位置、カート速度、棒角度、棒角速度)は使用せず、ゲーム画像のみを使用する。 CNNを使ったアプローチとして下記を検討する 1. 状態$S^{t}$ のみの画像を状態とする 2. 状態$S^{t}$ と 過去状態$S^{t-i}$ の画像を状態とする ## Aproach 1. 状態$S^{t}$ のみの画像をinputとする ## Structure of NN ![](https://i.imgur.com/XYvR1fw.png) 詳細はこちら ※独自クラスの定義ですが、雰囲気で察してください ``` python nn = TorchNN(3, Layer("conv1", torch.nn.Conv2d, 32, None, (), {"kernel_size":3, "stride":1,}), Layer("relu1", torch.nn.ReLU, None, None, (), {}), Layer("pool1", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}), Layer("conv2", torch.nn.Conv2d, 32, None, (), {"kernel_size":2, "stride":1,}), Layer("relu2", torch.nn.ReLU, None, None, (), {}), Layer("pool2", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}), Layer("conv3", torch.nn.Conv2d, 32, None, (), {"kernel_size":2, "stride":2,}), Layer("relu3", torch.nn.ReLU, None, None, (), {}), Layer("pool3", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}), Layer("conv4", torch.nn.Conv2d, 16, None, (), {"kernel_size":2, "stride":2,}), Layer("relu4", torch.nn.ReLU, None, None, (), {}), Layer("pool4", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}), Layer("conv5", torch.nn.Conv2d, 16, None, (), {"kernel_size":2, "stride":1,}), Layer("relu5", torch.nn.ReLU, None, None, (), {}), Layer("pool5", torch.nn.MaxPool2d, None, None, (), {"kernel_size":2, "stride":2,}), Layer("view6", torch.nn.Identity, 16*2*4,"reshape(x,-1)", (), {}), Layer("fc6", torch.nn.Linear, 64, None, (), {}), Layer("norm6", torch.nn.BatchNorm1d, 0, None, (), {}), Layer("relu6", torch.nn.ReLU, None, None, (), {}), Layer("fc7", torch.nn.Linear, 16, None, (), {}), Layer("norm7", torch.nn.BatchNorm1d, 0, None, (), {}), Layer("relu7", torch.nn.ReLU, None, None, (), {}), Layer("output",torch.nn.Linear, self.env.env.action_space.n, None, (), {}), ) ``` ## Learning 400 episode まで試したがうまく収束せず. ![](https://i.imgur.com/An9Vhpw.gif) ## Aproach 2.(1) 状態$S^{t}$ と 状態$S^{t-2}$ と 状態$S^{t-4}$の画像をinputとする CNNは3段構成 ## Structure of NN ![](https://i.imgur.com/RvY7PYB.png) ## Learning 1000 episode 以上試したがうまくいかず・・・。 ![](https://i.imgur.com/i79ux90.gif) ## Aproach 2.(2) 状態$S^{t}$ と 状態$S^{t-1}$の画像をinputとする CNNは1段構成 ## Structure of NN ![](https://i.imgur.com/3Lznsnl.png) ## Learning 300 spisode とかの中では一番マシな気がする ![](https://i.imgur.com/Y3WARTj.gif) # Discussion 似たようなことをしている[サイト](https://pylessons.com/CartPole-PER-CNN/) 台の速度や棒の角速度を数フレームで捉えるのは難しい。 ただ、台の位置や速度、棒の角度や角速度を正確に得られるシーンは少ないため、画像での学習というのがノーマルな気はする。 ただ、学習が遅いのが難点。