PPO解説・実験(Pendulum-v0)
1強化学習勉強会
東北大 林部・大脇研究室
M1 納谷克海
強化学習勉強会@7/17
2強化学習勉強会
目次
1. アルゴリズム
2. 実証(Pendulum-v0)
3強化学習勉強会
目次
1. アルゴリズム
2. 実証(Pendulum-v0)
4強化学習勉強会
導入(復習?)
Policy Optimization(Policy-Based)
方策π(a|s)を直接学習
〇連続値問題
Q-Learning(Value-Based)
行動価値関数Q(s,a)を学習
〇離散値問題
多腕バンディット問題
(離散値問題)
RLアルゴリズムの系譜
エージェント
環境
行動At状態St 報酬Rt
MDP(マルコフ決定過程)
1. 環境の情報は状態Stに集約され、それをも
とにエージェントはその方策に従ってAtを
選択する。
2. 環境はエージェントの選んだ行動Atに対し
て報酬Rtをエージェントに返し、状態Stを
新たな状態St+1に更新する
3. エージェントは、その時点までの観測結
果St,At,Rtに基づいて方策を改善
4. 1~3を方策が収束するまで繰り返す
5強化学習勉強会
価値関数、行動価値関数
価値関数:ある状態sにおいて、方策πに従う行動選択とMDPによる状態遷移を繰り返したときに期待できる収
益
𝑣π(𝑠) = 𝑬π[𝐺𝑡|𝑆𝑡 = 𝑠]
強化学習の目的「価値関数𝑣πを全ての状態sについて最大化する方策を見つけること」
𝑣π 𝑠 =
𝑎
π(𝑎|𝑠)
𝑠′
𝑝 𝑠′
𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′
+ γ𝑣π(𝑠′
)
価値関数はベルマン方程式(価値関数)を用いて再帰的に解くことができる
𝑝 𝑠′
𝑠, 𝑎 :状態遷移確率
r(s,a,s’):報酬期待値
γ:割引率
ある状態sが与えられたときに最適な行動aを知りたい!=行動の価値を示す行動価値関数を定義
𝑞π(𝑠, 𝑎) =
𝑠′
𝑝 𝑠′
𝑠, 𝑎 [𝑟 𝑠, 𝑎, 𝑠′
+ γ𝑣π(𝑠′
)]
𝑞π(𝑠, 𝑎) =
𝑠′
𝑝 𝑠′
𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′
+ γ
𝑎′
π(𝑎′
|𝑠′
)𝑞π(𝑠′
, 𝑎′
)]
ベルマン方程式(行動価値関数)
6強化学習勉強会
PPOとは
PPO(Proximal Policy Optimization)
• Policy Optimizationベースの手法
• 環境とのやり取りによるデータ取得と、「代理」目的関数の最適化を交互に繰り返す。
• TRPO(Trust Region Policy Optimization)とA3C(Asynchronous Advantage Actor-Critic)を発
展させたアルゴリズム
• TRPOより簡単な実装でサンプル効率が良い
• ロボット制御のような連続値問題でも、Atariでも従来手法より良い結果
TRPO ?
A3C ?
Actor-Critic ?
7強化学習勉強会
Actor-Criticついて(1/2)
エージェントが担う方策評価と方策改善の機能を分離
方策改善→行動器(Actor)
方策評価→評価器(Critic)
をそれぞれモデル化して交互に学習しながら最適方策を学習する。
〇Actorのモデル化
連続的な行動空間→ガウス方策
𝜋 𝑎 𝑠, θ =
1
(2π) 𝑑/2|Σθ(𝑠)|1/2
exp(−
1
2
𝑎 − 𝜇 𝜃 𝑠
𝑇
Σθ 𝑠 −1
𝑎 − 𝜇 𝜃 𝑠 )
Σθ(𝑠)
𝜇 𝜃 𝑠 状態sの平均値の関数近似
状態sの共分散行列の関数近似
S
1
S
2
θ
𝜇 𝜃
S
3
Σθ
Action
sampling
行動器
Actor
評価器
Critic
環境
方策評価
状態St 報酬Rt
行動At
出力
学習は?
8強化学習勉強会
Actor-Criticついて(2/2)
〇Criticのモデル化
価値関数をパラメータωでモデル化したVω(s)をNNで学習
パラメータωを最適化するために目的関数が必要
𝐿 𝑐𝑟𝑖𝑡𝑖𝑐 ω = 𝑡=0
𝑇−1
|𝛿𝑡+1(ω)|2
𝛿𝑡+1 ω = 𝑅𝑡+1 + 𝛾𝑉ω 𝑆𝑡+1 − 𝑉ω(𝑆𝑡)
一方、Actorの学習には方策勾配法を用いるが、方策勾配には
アドバンテージ関数が含まれている。
また、TD誤差のπに関する期待値はアドバンテージ関数に等しくなる。
これより、Actorの損失関数が、方策勾配とTD誤差の積で近似できる。
𝐿 𝑎𝑐𝑡𝑜𝑟 ω ≡ −𝐽 θ ∼ −
1
𝑇
𝑡=0
𝑇−1
(𝑙𝑜𝑔π(𝐴 𝑡|𝑆𝑡, θ))𝛿𝑡+1 ω
Actor :πθ
Critic :Vω
環境
行動At
報酬Rt+1
ωを更新
𝐿 𝑐𝑟𝑖𝑡𝑖𝑐 ω = 𝑡=0
𝑇−1
|𝛿𝑡+1(ω)|2
𝛿𝑡+1 ω = 𝑅𝑡+1 + 𝛾𝑉ω 𝑆𝑡+1 − 𝑉ω(𝑆𝑡)
TD誤差
Θを更新
𝐿 𝑎𝑐𝑡𝑜𝑟 ω = −
1
𝑇
𝑡=0
𝑇−1
(𝑙𝑜𝑔π(𝐴 𝑡|𝑆𝑡, θ))𝛿𝑡+1 ω
𝑆𝑡 → 𝑆𝑡+1
∇𝐽 θ ∼ −
1
𝑇 𝑡=0
𝑇−1
(∇𝑙𝑜𝑔π 𝐴 𝑡 𝑆𝑡, θ Aπ)
方策勾配定理
これでActorが誤差逆伝搬法で学習できる!
アドバンテージ関数
Aπ = 𝑞π 𝑠, 𝑎 − 𝑣π(s)
行動aが平均的な行動選択と比べて
どれだけ有利かを表す
9強化学習勉強会
A3Cについて
3つの”A”
1. Advantage
2. Actor-Critic
3. Asynchronous
Advantage
𝛿𝑡+1 = 𝑅𝑡+1 + 𝛾𝑉ω 𝑆𝑡+1 − 𝑉ω 𝑆𝑡
価値関数V(t)の更新
を最小化するように更新
1step先を見る
これを2step以上先まで動かして更新する
𝛿𝑡+𝑛 =
𝑘=1
𝑛
𝛾 𝑘−1
𝑅𝑡+𝑘 + 𝛾 𝑛
𝑉ω 𝑆𝑡+𝑘 − 𝑉ω 𝑆𝑡
nを増やすと先の状態を学習に取り入れる
→大きいほうが良い気もするが、大きすぎると未完成な報酬や
価値関数を使うので不安定になる
Asynchronous
非同期的なマルチエージェントな分散学習
エージェントを複数動かし、個々の経験を
集めて学習
→全体としてはランダムに、早く学習できる
10強化学習勉強会
TRPO(詳しい解説は省略)
1度方策関数が劣化すると、その後の報酬が得られないため、改善が困難になる。
よってニューラルネットの重みを慎重に更新する必要がある。
→更新前後の重みのKL情報量に制約を設ける
L θ = 𝐸
πθ 𝑎 𝑠
πθ𝑜𝑙𝑑 𝑎 𝑠
𝐴θ(𝑠, 𝑎)
パラメータの更新
θ 𝑘+1 = 𝑎𝑟𝑔𝑚𝑎𝑥 𝐿(θ 𝑘, θ)
s.t. 𝐷 𝐾𝐿(θ| θ 𝑘 ≤ 𝛿
Surrogate advantage
(代理アドバンテージ)
𝐷 𝐾𝐿(θ| θ 𝑜𝑙𝑑 = 𝐸[𝐷 𝐾𝐿(πθ ∙ 𝑠 ||π 𝑜𝑙𝑑 ∙ 𝑠 )]
実装が複雑!
𝐸
πθ 𝑎 𝑠
πθ𝑜𝑙𝑑 𝑎 𝑠
𝐴θ(𝑠, 𝑎) − 𝛽𝐷 𝐾𝐿(πθ ∙ 𝑠 ||π 𝑜𝑙𝑑 ∙ 𝑠 )
の最大化問題に帰着
11強化学習勉強会
PPO
TRPOとは別のアプローチで更新量に制約を設ける
PPO-Penalty : KL情報量を使用。
PPO-Clip : KL情報量を不使用。こっちのほうが精度良い
𝐿 𝐶𝑃𝐼
θ = 𝐸
πθ 𝑎 𝑠
πθ𝑜𝑙𝑑 𝑎 𝑠
𝐴θ(𝑠, 𝑎) = 𝐸 𝑟𝑡(θ)𝐴θ(𝑠, 𝑎)
𝑟𝑡 θ =
πθ 𝑎 𝑠
πθ𝑜𝑙𝑑 𝑎 𝑠
TRPOのSurrogate advantage(代理アドバンテージ)
TRPOではKL情報量を制約(正則化)→PPOでは𝑟𝑡 θ に制
約
𝐿 𝐶𝐿𝐼𝑃
θ = 𝐸 min 𝑟𝑡 θ 𝐴θ, 𝑐𝑙𝑖𝑝(𝑟𝑡 θ , 1 − 𝜀, 1 + 𝜀)𝐴θ
12強化学習勉強会
PPO
(1 − 𝜀) 𝐴 𝑡
(1 + 𝜀) 𝐴 𝑡
PPO-Clipで方策を更新
(Actor)
価値関数の更新
(Critic)
13強化学習勉強会
目次
1. アルゴリズム
2. 実証(Pendulum-v0)
14強化学習勉強会
ハイパーパラメータ
 NNの大きさ(方策、価値関数) : 1層(32,) 2層(64,64) 4層(128,128,128,128)
 報酬の割引率 γ : 0.9, 0.99, 0.999
 PPO-Clip ε : 0.1 0.2 0.3
 価値関数の学習率 : 0.01 0.001 0.0001
 方策の学習率 : 0.003 0.0003
 エポック数 : 3000
 エピソード長 : 200step
は固定
PPOをPendulum-v0(OpenAI Gym)環境で、様々なハイパーパラメータで実験
15強化学習勉強会
NNの大きさ変更
NNの大きさ
• [32]
• [64, 64] ←デフォル
ト
• [128, 128, 128, 128]
で比較
[64, 64]が安定
[32]はぶんぶん回る(制御できていない?)
[128,128,128,128]はなかなか振り上げられない
[32] [128,128,128,128][64,64]
16強化学習勉強会
報酬の割引率の大きさ変更
報酬の割引率を
• 0.90
• 0.99(デフォルト)
• 0.999
で比較
割引率が小さすぎる(未来の価値を重視する)
→安定しない
0.90 0.9990.99
17強化学習勉強会
PPO-Clipの大きさ変更
PPO-Clipを
• 0.1
• 0.2(デフォルト)
• 0.3
で比較
Clipが小さい→学習が安定しない
Clipが大きい→学習が安定するものの、
そもそもうまく学習しない
0.1 0.30.2
18強化学習勉強会
価値関数の更新率の大きさ変更
価値関数の更新率を
• 0.01
• 0.001(デフォルト)
• 0.0001
で比較
デフォルト値である0.01が最も早く安定
小さすぎると学習しない
0.01 0.00010.001
19強化学習勉強会
方策の更新率の大きさ変更
方策の更新率を
• 0.003
• 0.0003
で比較
方策の更新率が小さすぎると全然学習しない
0.003 0.0003
20強化学習勉強会
感想
• 今まで何となく使っていた強化学習のアルゴリズムについて、改めて調べることで
理解が深まった。
• 昔読んで理解ができなかった本や資料を今改めてみると少し理解できるようになっていた。
• 解説記事もいろいろ読んだが、やはり原著論文から逃げてはいけない
(各解説記事のパラメータの名前や記号が異なったりする)
21強化学習勉強会
参考資料
• (PPOの原著論文) Proximal Policy Optimization Algorithms, John Schulman, et al., OpenAI, 2017,
https://arxiv.org/abs/1707.06347
• (A3Cの原著論文) Asynchronous Methods for Deep Reinforcement Learning, Volodymyr Mnih, el al., 2016
https://arxiv.org/abs/1602.01783
• ゼロから始める深層強化学習(NLP2018講演資料)
https://www.slideshare.net/pfi/nlp2018-introduction-of-deep-reinforcement-learning
• OpenAI解説記事
https://openai.com/blog/openai-baselines-ppo/
• SpinningUp
https://spinningup.openai.com/en/latest/algorithms/ppo.html
• 各種Qiita記事
• 【強化学習】実装しながら学ぶA3C【CartPoleで棒立て:1ファイルで完結】
https://qiita.com/sugulu/items/acbc909dd9b74b043e45
• 【強化学習】実装しながら学ぶPPO【CartPoleで棒立て:1ファイルで完結】
https://qiita.com/sugulu/items/8925d170f030878d6582
• 【論文】Proximal Policy Optimization Algorithms (PPO, 2017)
https://qiita.com/keisuke-nakata/items/87b742bcb09149b6d8d1
など
22強化学習勉強会
参考資料(以前に読んだ本)
現場で使える!Python深層強化学習入門 強化学習と
深層学習による探索と制御 (AI & TECHNOLOGY)
つくりながら学ぶ! 深層強化学習
~PyTorchによる実践プログラミング~
機械学習スタートアップシリーズ Pythonで学ぶ強化学
習 [改訂第2版] 入門から実践まで (KS情報科学専門書)
PytorchでQ学習からA2Cまで実装
わかりやすい
ただこれだけだと内容は薄い
Kerasで各種アルゴリズム実装
強化学習についてかなり網羅的
に収録
ただコードは難解
KerasでREINFORCEから最適化問題な
ど
強化学習の応用まで収録
アルゴリズムの説明がわかりやすい

強化学習アルゴリズムPPOの解説と実験

Editor's Notes

  • #6 価値関数 Eは方策πに従うエージェントが所与のMDPに従って状態遷移して得られるすべての行動履歴についての期待値を意味します。 この価値関数を再帰的に解くのがベルマン方程式 この価値関数はある状態の価値 ある状態sが与えられた時の最適な行動aを知りたい→行動の価値を行動価値関数によって定義 時刻tのときに方策πに従わず、行動aをとる その後は方策に従う よって方策πの重みづけの項は1となる ここで価値関数のベルマン方程式は、状態sと行動aを引数とする関数を方策πで重みづけして足し上げている
  • #8 エージェントの方策評価、方策改善の機能を二つに分ける 方策を改善、方策πに従って行動Atを行う→Actor 方策の評価をしてActorを改善する→Critic Actorのモデル化として、連続値問題の例としてガウス方策 多次元正規分布として定義されるガウスモデルを用いる。
  • #9 Criticが価値関数をパラメータωによる関数近似でモデル化し、ActorがCriticによる方策評価をTD誤差として受け取って方策勾配法により方策改善を行う
  • #15 #NNの大きさ変更 python main.py run 0713_ppo_pendulum --env Pendulum-v0 --algo ppo --steps 200 --epochs 3000 python main.py run 0713_ppo_pendulum_NN_4 --env Pendulum-v0 --algo ppo --hid 32 --l 1 --steps 200 --epochs 3000 #報酬の割引 python main.py run 0713_ppo_pendulum_gamma_1 --env Pendulum-v0 --algo ppo –-gamma 0.9 --steps 200 --epochs 3000 python main.py run 0713_ppo_pendulum_gamma_1 --env Pendulum-v0 --algo ppo –-gamma 0.99 --steps 200 --epochs 3000 #PPO-Clip(ソースコード変更) python main.py run 0713_ppo_pendulum_clip_1 --env Pendulum-v0 --algo ppo --steps 200 --epochs 3000 python main.py run 0713_ppo_pendulum_clip_3 --env Pendulum-v0 --algo ppo --steps 200 --epochs 3000 #価値関数の学習率 python main.py run 0713_ppo_pendulum_vf_1 --env Pendulum-v0 --algo ppo --steps 200 --epochs 3000 python main.py run 0713_ppo_pendulum_vf_3 --env Pendulum-v0 --algo ppo --steps 200 --epochs 3000 #方策の学習率 python main.py run 0713_ppo_pendulum_pf_1 --env Pendulum-v0 --algo ppo --steps 200 --epochs 3000
  • #18 python -m spinup.run ppo --env Pendulum-v0 --exp_name 0713_ppo_pendulum_clip_1 --steps_per_epoch 200 epochs 3000 --clip_ratio 0.1
  • #20 python -m spinup.run ppo --env Pendulum-v0 --exp_name 0713_ppo_pendulum_clip_1 --steps_per_epoch 200 epochs 3000 --clip_ratio 0.1
  • #21 python -m spinup.run ppo --env Pendulum-v0 --exp_name 0713_ppo_pendulum_clip_1 --steps_per_epoch 200 epochs 3000 --clip_ratio 0.1
  • #23 python -m spinup.run ppo --env Pendulum-v0 --exp_name 0713_ppo_pendulum_clip_1 --steps_per_epoch 200 epochs 3000 --clip_ratio 0.1