Contenu connexe
Similaire à Start Deep Reinforcement Learning with RL4J (20)
Start Deep Reinforcement Learning with RL4J
- 1. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential
Start Deep Reinforcement Learning with RL4J
RL4J で始める深層強化学習
- 2. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 1
自己紹介
– 名前: 田上 悠樹 (Yuki TAGAMI)
– 職業: エンジニア
– 所属: UL Systems
– 役割: 基幹系システムのアプリケーション設計・開発
- 3. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 2
本日 お伝えしたい内容
『価値』という指標を頼りに
アプリケーションがひとりでに振る舞う
強化学習の不思議な世界観
- 4. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 3
目次
– 深層強化学習の説明
強化学習
深層学習
深層 + 強化学習
– RL4J を使った深層強化学習
深層強化学習のフレームワーク DL4J / RL4J
デモアプリの概要
クラスの説明
パラメーターの説明
– デモ
ビールゲーム風のデモ
- 5. ULS 4
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential
深層強化学習の説明
15分でざっくり説明
- 6. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 5
機械学習の概要
教師あり学習
学習開始に必要なもの
ラベル付きデータ
図の引用: MS&E 238 Blog, Stanford University, https://mse238blog.stanford.edu/2017/07/choftun/the-building-blocks-of-machine-learning/
教師なし学習
学習開始に必要なもの
データ
強化学習
学習開始に必要なもの
エージェント
環境
- 7. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 6
強化学習の関連トピック
AWS Deep Racer
https://aws.amazon.com/deepracer
Open AI Gym
https://gym.openai.com
AlphaGo Zero
https://deepmind.com
- 8. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 7
強化学習(Reinforcement Learning)とは
ごくごく ざっくり言うと、
– こんな状況のときに、
– こんな行動したら、
– こんな良いこと、悪いことがある、
– というのを判断して
– 試行錯誤しながら学習する機械学習の1つ。
状態: State
行動: Action
報酬: Reward
価値: Value
方策: Policy
- 9. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 8
強化学習のキーワード (Cart Pole を例に)
–キーワード:( エージェント / 環境 / 行動 / 状態 / 報酬 / 価値 )
エージェント
(ゲームプレイヤー)
環境
(ゲームの世界)
『行動』
環境に対する はたらきかけ。
右ボタンや 左ボタンで、カートを左右に動かす
『状態』
行動によって変化する環境の状況。
台車の現在の位置、棒の角度や速度 など
『報酬』
行動を起こした結果として得る 良し悪しの即時評価。
例: ある一定以上傾いたら 0点, それ以内なら 1点 など
『方策』
頭脳にあたる部分。
最終的な行動選択や、
状況評価を担う。
『価値』
今の方策・状態のもと、今後
得られる累計報酬和(収益)
に対する期待値
行動の主体 行動によって
はたらきかけられる対象
- 10. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 9
強化学習の流れ
– 試行錯誤のループを通じて学習
『現状の把握 → エージェントの行動 → 環境からの報酬・次状態の獲得』 という一連の
ステップを何度も経験して、得られる収益が最大になるように行動選択を学習していく。
教師なし学習・教師あり学習と違い、学習用のデータは最初から与えられない。
状態を鑑みて、行動してみは報酬を得るという一連のデータを繰り返しサンプリング。
エージェント 環境
行動 t
報酬 t+1 , 状態 t+1
報酬 t+2 , 状態 t+2
報酬 t+3 , 状態 t+3
行動 t+2
行動 t+1
行動 t+3 へ経験を
積んでいく
- 11. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 10
強化学習の具体的なアルゴリズム
強化学習全体の枠組みは、前頁までのとおり。
では、具体的にどう行動選択を学習していていくのか?
その為の具体的なアルゴリズムは何種類も存在する。
Q-Learning
SARSA
DQN (Deep Q-Network) ★
Double DQN ★
Async N-step Q-Learning ★
Actor Critic
A2C
A3C ★
TTPO
PPO
他にも色々 …
※ ★ マークは、後述のRL4Jでも提供されているアルゴリズム
― 具体的なアルゴリズム ―
- 12. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 11
Q学習
– Q学習(Q-Learning)
もし「こんな状態のときに、こんな行動したら、これだけの価値が得られる」 が分かれば、
「置かれた状況において、得られる価値が一番高い行動を選択する」 という考え方。
– 行動価値関数 (Q関数)
上記を表現する関数として、Q関数(引数: 状態と行動、戻り値: 予想した価値) を設定。
前述の試行錯誤のループを通じて予想値を是正して、誤差を縮めていく。
Q関数
状態
行動
Q関数によって予想
行動価値(Q値)
引用: https://ja.wikipedia.org/wiki/Q学習 s: 状態(時刻 t と t+1 ) a: 行動 r:報酬 α:学習率 γ:割引率
観測をもとにしたQ値と、現在 予想したQ値の差分
観測された報酬・次状態をもとにしたQ値 現在 予想したQ値
上方修正(or 下方修正)されたQ値
- 13. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 12
– 深層学習とは
– ニューラルネットワークの構造
ニューラルネットワーク
深層学習
― 深層学習(Deep Learning) は、人間の脳の「ニューロン」の構造と機能を模倣した
ニューラルネットワークを何層も重ねて大規模にした機械学習の一手法です。
(中略)
複雑な関数でも表現することができる、万能な関数近似器としての役割も持っている ―
引用: 翔泳社 『現場で使える!Python深層強化学習入門 強化学習と深層学習による探索と制御』 より
著者:伊藤 多一, 今津 義充, 須藤 広大, 仁ノ平 将人, 川﨑 悠介, 酒井 裕企, 魏 崇哲
隠れ層 (N層) 出力層入力層
Input Output
データ
画像
文章
回答
- 14. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 13
深層 + 強化学習
– 強化学習におけるニューラルネットワークの役割
ニューラルネットワークを利用して、環境から観測された状態データを入力に、行動選択
に関する情報(Q値や、行動選択の確率など)を出力する。
ニューラルネットワーク
隠れ層 (N層) 出力層入力層
Input Output
行動
出力層のデータ
をもとに、方策が
最終的に行動を
選択
状態
環境から観測された
配列データ や
画像データ
(連続値も扱える)
- 15. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 14
深層学習 + Q学習(Deep Q-Network)
– DQN におけるニューラルネットワークの役割
ニューラルネットワークを関数近似器として利用して、環境から観測された状態データを
入力に、Q値(予想値)を推論する。
ニューラルネットワーク
隠れ層 (N層) 出力層入力層
Input Output
行動
Q値が最大である
行動を選択する
状態
環境から観測された
配列データ や
画像データ
(連続値も扱える)
教師信号
実際に行動して獲得
した報酬、次状態を
もとにしたQ値
行動BのQ値
の予想値
行動AのQ値
の予想値
アクション数と
同じ次元
状態と同じ次元
- 16. ULS 15
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential
RL4J を使った深層強化学習
- 17. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 16
深層強化学習のフレームワーク DL4J / RL4J
– Eclipse Deeplearning4j (DL4J)
JVM製の深層学習用フレームワーク ( OSS, Apache 2.0 ライセンス)
Konduit社を中心に、研究と商用の間を埋めることを背景にエンタープライズ向けに注力。
CPU/GPU 両方をサポート。 Spark クラスタ上での分散トレーニングもサポート。
2020年10月現在の最新バージョンは、 1.0.0-beta7
– RL4J
上記 DL4J のライブラリー群の1つで、深層強化学習用のフレームワーク。
DDQN (Double DQN)や、A3C 等の強化学習API が提供されている。
DL4J:
https://deeplearning4j.org/
Konduit:
https://konduit.ai/
Eclipse Foundation:
https://projects.eclipse.org/projects/technology.deeplearning4j
- 18. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 17
(書籍)Deeplearning4j に関する書籍
詳説 Deep Learning ― 実務者のためのアプローチ
[ O’reilly : https://www.oreilly.co.jp/books/9784873118802/ ]
巻末付録B に、強化学習やRL4J に関する解説も載ってます。参考にさせていただきました。
- 19. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 18
Java製 深層学習ライブラリを選択する観点
機械学習関連のライブラリについては、Python の方が圧倒的に活況。
強いて、Java製を選択する観点を挙げてみる。(注: あくまで 一観点として)
Java自体の言語特性
静的型付け言語 ・ 後方互換性重視の言語文化 → 長期運用では助かる面も
移植性 → jar ファイルに固めて簡単に配布
世の中にある定番の学習済みモデルをインポート可能か
DL4Jは、TensorFlow, Keras の学習済みモデル(.pb/.h5ファイル) をインポート可能。
TensorFlow for Java などJava APIの利用。
環境側(シミュレーター・アプリ)の言語と、機械学習側の言語を揃えたいか
環境側と学習側の言語を揃えて、技術要素や組込をスリムにしたいときの候補として。
※ 環境側と学習側で独立体制組めたり、複数言語で混乱しない場合は関係なし
- 20. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 19
RL4Jを動かすための最小限の依存定義 (Maven pom.xml)
– CPUモード:
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta7</version>
</dependency>
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>rl4j-core</artifactId>
<version>1.0.0-beta7</version>
</dependency>
- 21. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 20
RL4Jを動かすための最小限の依存定義 (Maven pom.xml)
– GPUモード:
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-cuda-10.0</artifactId>
<version>1.0.0-beta7</version>
</dependency>
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>rl4j-core</artifactId>
<version>1.0.0-beta7</version>
</dependency>
pom.xml の依存関係を上のように書き換えると、GPUモードとして動作する。
サポートしている CUDA, cuDNN のバージョン:
https://deeplearning4j.konduit.ai/config/backends/config-cudnn
- 22. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 21
本日のデモの概要 (ソースコード: https://github.com/gamita/demo-rl-supply-chain)
– 『ビールゲーム』 を題材にした簡易シミュレーションの実施
本家本元のビールゲーム(MITで考案されたビジネスゲーム)
引用: Wikipedia 『ビールゲーム』 https://ja.wikipedia.org/wiki/ビールゲーム
今回のデモと、本家とのゲーム設定の主な違い (簡素化してます)
• 登場人物は、 「Customer」, 「Retailer」, 「Factory」 の3つ。リードタイムも短縮。
• 本来は4人参加のゲームだが、デモではシングルプレー(エージェント1人)で対応。
• 行動は、離散的な行動(発注する/しない、 生産する/しない)として扱う。
- 23. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 22
デモアプリの 『環境』
– 環境
Customer がランダムに次々と注文してくるので、 Retailer と Factoryは適度な在庫数を
維持しながら、販売と出荷を遂行していくゲーム。在庫切れして依頼された注文や発注の
数を捌けないペナルティ。
Retailer FactoryCustomer
注文 発注
出荷販売
生産
在庫数 在庫数
1回に 1~15 の範囲で
ランダムにオーダー
1回に定量 30個
を発注 1回に定量 80個
を生産
― キャプチャーイメージ ―
- 24. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 23
デモアプリの『状態』『行動』
状態の定義: 状態のshape = [4] ※ “次回オーダー量” は、都度 ランダムに発生させる
[ 今回のオーダー量, 次回のオーダー量, Retailer在庫量, Factory在庫量 ]
選択できる行動
# Action 選択できる行動
0 何もしない
1 発注 (定量30個)
2 生産 (定量80個)
3 発注 & 生産 (定量30個 & 定量80個)
発注や生産を選択すると、翌ターンまでに定量分だけ在庫補充される。
- 25. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 24
デモアプリの『状態遷移』
– 行動による状態遷移の例
#case1: [13, 10, 25, 160] → 発注 → [10, 11, 42, 130]
13個販売して、30個発注。 Retailer在庫 +17, Factory在庫 -30
#case2: [13, 10, 25, 20] → 発注 → [10, 11, 32, 0]
13個販売して、30個発注。 Retailer在庫 +20, 出荷損失 10, Factory在庫 -20
#case3: [11, 12, 32, 20] → 生産 → [12, 14, 21, 100]
11個販売して、80個生産。 Retailer在庫 -11, Factory在庫 +80
#case4: [15, 11, 12, 50] → 何もしない → [11, 8, 0, 50]
15個注文中の12個販売。 機会損失 3, Retailer在庫 -12, Factory在庫 ±0
#case5: [15, 11, 12, 20] → 発注 & 生産 → [11, 8, 20, 80]
15個注文中の12個販売して、30個発注、80個生産。
機会損失 3, Retailer在庫 +20, 出荷損失 10, Factory在庫 +80
↑ ゴチャゴチャ してるが、要は単純に在庫の入りと出の加算・減算
- 26. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 25
デモアプリの 『報酬』
– 報酬設定
報酬 = 基準点 + 合計ペナルティ
基準点は 1点 として、以下の事象が発生したらその分だけ減点する。
機会損失 または 出荷損失 = -2点
在庫過多:
定量の2倍超過 = -1点 (Retailer 在庫の場合 61 以上、 Factory 在庫の場合 161 以上)
定量の3倍超過 = -2点 (Retailer 在庫の場合 91 以上、 Factory 在庫の場合 241 以上)
# case 1: 機会損失発生 と Retailer在庫 0, Factory在庫 200 の場合
報酬 = 基準点 + 機会損失減点 + Factory在庫過多(※ 定量の2倍超過) = 1 + (-2 -1) = -2
以上、「発注」 や 「生産」 タイミングを制御する明示的なプログラム無しに、
状態遷移や報酬設定に基づいて エージェントが「注文」を捌けるかをデモしてみる。
- 27. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 26
デモアプリのClassスケッチ
DL4J / RL4J
価値、Q値、行動確率の算出、深層学習など諸々の専門的な機械学習処理を担当
JVM
Application
SupplyAgent
+ step(int) @override
+ reset() @override
+ close() @override
+ isDone() @override
etc ..
SupplyEnvironment
+receiveAction(int)
- purchase()
- produce()
- purcaseAndProduce()
- noOperation()
※ 単なる POJOのクラス
SupplyState
+ getData() @override
SupplyObservationSpace
+ getShape () @override
Trainer
+ startDQNTraining()
エージェント 環境
状態に関する型
結果
戻り値: 報酬 と 行動後の状態
行動の実行
Agent が#receiveAction を呼ぶ
ActionResult
+ getNextState()
+ getReward()
※ 単なる POJOのクラス
※ @override のメソッド:
RL4Jのクラスを継承して、
実装義務があるメソッド
- 28. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 27
デモアプリのクラス概要
– RL4Jで深層強化学習を実行するために、最低限実装が必要なクラス
以下 4クラス + 環境 の準備( ※ 青文字のクラス: デモでの該当クラス )
org.deeplearning4j.rl4j.mdp.MDPの実装クラス: SupplyAgent
今回 Agent に見立てたクラス。 (今回 説明の都合上、、MDPの継承クラスを強引にAgent に見立ててます。)
org.deeplearning4j.rl4j.space.ObservationSpaceの実装クラス: SupplyObservationSpace
状態空間のメタ定義。状態空間のテンソルのシェイプを定義。
org.deeplearning4j.rl4j.space.Encodableの実装クラス: SupplyState
(上のメタに対して)実際に状態空間の値を保持するインスタンスの為のクラス。
学習を始動させるクラス: Trainer
強化学習や深層学習のパラメータ・ニューラルネットの設定や、学習の起動など。
+
環境
シミュレーション環境ならシミュレーター(Gymなど)、 実機なら実機用の環境。
(今回のデモは、シミュレーター用のクラスを1クラス用意。 SupplyEnvironment )
- 29. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 28
状態に関するクラス :メタ定義用(上) と 状態自身(下)
public class SupplyState implements Encodable {
・・・ // 実際の状態ベクトルを保持するクラス
private INDArray state;
@Override
public INDArray getData()() {
return this.state; // 状態データのテンソルを返却。お作法。
}
・・・
public class SupplyObservationSpace<O> implements ObservationSpace<O>
・・・ // 状態のメタ定義用のクラス
@Override
public int[] getShape() { // 状態を表現するテンソルのシェイプを定義
return new int[] { 4 }; // 要素4つ(オーダー数、次回オーダー数、小売在庫数、工場在庫数) の 1次元配列
}
・・・
- 30. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 29
Agent クラス :エージェント用のクラス
public class SupplyAgent implements MDP<SupplyState, Integer, DiscreteSpace> {
・・・
@Override
public StepReply<SupplyState> step(Integer action) {
// 与えられたアクションを実行
ActionResult actionResult = environment.receiveAction(action);
// 報酬値の取得
double reward = actionResult.getReward();
// 行動後の次の状態を取得
SupplyState nextState = actionResult.getState();
// RL4Jのお作法にそって、得た報酬と次状態を設定した StepReplyオブジェクトを最後に返却する。
StepReply<SupplyState> stepReply = new StepReply<SupplyState>(
nextState, reward, this.isDone(), null);
return stepReply;
}
・・・
- 31. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 30
Trainer クラス :トレーニングを始動させるクラス
public class Trainer {
…
@Async
public void startDQNTraining() {
this.agent = new SupplyAgent(); // エージェント生成
// Q-Learning用のパラメーター設定
QLearningConfiguration qlConfig = QLearningConfiguration.builder().引数は後述 ;
// DQN用のニューラルネットワークのパラメーター設定
DQNFactoryStdDense qlNet =
new DQNFactoryStdDense(DQNDenseNetworkConfiguration.builder().引数は後述);
QLearningDiscreteDense<SupplyState> dqn =
new QLearningDiscreteDense<>(agent, qlNet, qlConfig);
// トレーニング開始
dqn.train();
agent.close();
}
…
- 32. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 31
ニューラルネットワークのパラメーター説明
– ニューラルネットワークの設定
お手軽な方法
RL4J で提供されているDQN用のニューラルネットワークのビルダーを利用する。
カスタマイズも可能
上記のDQN用のビルダーではなく、通常の NeuralNetConfiguration を利用して、
自由にネットワークを定義することも可能。
DQNDenseNetworkConfiguration.builder()
.numLayers(3)
.numHiddenNodes(16)
.l2(0.0001) // l2 regularization
.updater(new Adam())
.build();
活性化関数はReLU、損失関数はMSE (デフォルト)
入力層
状態と同じシェイプ
出力層
行動数と同じ
ノード数
隠れ層
層の数 =3層
ノード数 = 一律16
― 今回のニューラルネットワーク ―
行動#0
Q値
行動#1
Q値
行動#2
Q値
行動#3
Q値
今回オー
ダー数
次回オー
ダー数
Retailer
在庫
Factory
在庫
― Builderの設定 ―
- 33. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 32
DQN用のパラメーター説明
– QLearningConfiguration クラスのBuilder
QLearningConfiguration.builder()
.seed(1234) ランダムシード
.maxEpochStep(100) 1episode あたりのステップ回数
.maxStep(20000) トレーニングさせる全ステップ回数
.expRepMaxSize(5000) experience replay する際に貯めておくサイズ
.batchSize(32) experience replay で取り出して、深層学習に渡すサンプル数
.targetDqnUpdateFreq(100) Target方策を何ステップ毎に更新するかの設定値
.updateStart(0) 最初の何ステップを学習処理からスキップするかのステップ数
.rewardFactor(1) 報酬値のスケール調整用の係数
.gamma(0.95) 報酬の割引率
.errorClamp(3) TD誤差値の範囲制約
.minEpsilon(0.01f) ε-greedy に関する設定値
.epsilonNbStep(10000) ε-greedy に関する設定値
.doubleDQN(true) DQNか、Double DQNかの選択。 true の場合 Double DQN
.build();
- 34. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 33
step, episode に関するパラメーター
– max step by episode
– max step
現状態をもとに行動して、報酬取得および次の状態に遷移するまでが1step. Stepを何度も繰
り返していく過程で学習していく。
一連のstepを括った単位がepisode. 括る単位としては、例えば 1ゲームの勝敗がつくまで、
制限時間を迎えるまでと色々な括り方がある。1episode終えると、新たに次のepisode と
step が始まる。
max step by episode は1episode 内における最大のstep回数の上限値。 max stepは、エー
ジェントが累計で最大step 行うかの設定値。 max step by episode = 100, max step =
20000 なら、 1episodeで最大100 step, 計200 episode を行う。
状態1 状態2 状態3 状態T+1
行動1
状態T
行動2 行動3 行動T
途中で終了条件 (例: 勝敗がつく、タイムアップ、コースアウト etc) により
Episodeが終了することもある。 MDP# isDone が終了判定を担当。
↓
状態1 状態2 状態3 状態T+1
行動1
状態T
行動2 行動3 行動T
Episode 1
Episode 2
Episode N
- 35. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 34
報酬、TD誤差に関するパラメーター説明
– gamma
gamma は割引率 (通常 0.9~1の値) と呼ばれるパラメーター。将来報酬に対する係数で、
不確かな将来価値をどの程度 割引した上で価値として計上するかを決めるパラメーター。
前述の以下の式での γ にあたるパラメーター。1step先の将来価値を割り引いている。
– reward scaling
行動後に取得した報酬に対する係数。報酬値のスケールが極端に大きかったり、小さい場合
に、当該係数で調整。(実際に、単純に取得した報酬値に当パラメータ値をかけている。)
– TD-error clipping
TD誤差のクリッピング。学習の初期段階では、方策が予想したQ値と、教師信号となる観
測によって更新されたQ値とで、乖離(TD誤差) が大きい。TD誤差の変動範囲を±TD-error
clipping にカットすることで、学習を安定させる。
参照: org.deeplearning4j.rl4j.learning.sync.qlearning.discrete.QLearningDiscrete #trainStep accuReward の箇所
参照: org.deeplearning4j.rl4j.learning.sync.qlearning.discrete.TDTargetAlgorithm.BaseTDTargetAlgorithm
#computeTDTargets errorClampの箇所
参照: org.deeplearning4j.rl4j.learning.sync.qlearning.discrete.TDTargetAlgorithm.DoubleDQN #computeTarget
DQNの場合、上の更新式の 学習率 α は1 にして、 深層学習側の updaterの学習率で調整。学習率に学習率が乗ってしまうので。
- 36. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 35
ε-greedy に関するパラメーター説明
– min epsilon
– number of step for eps greedy anneal
Q-LearningはQ値が最大の行動を選択すると前述したが、学習初期の精度が低い時のQ値を
信じ込んで行動選択すると、学習時の行動が偏る。(他に良い行動があっても気づかない。)
行動の偏りを緩和する為に、確率 ε で Q値と関係なくランダムに行動選択することで、敢
えて冒険してみて経験の範囲を広げる。( 『探索』 と 『活用』のジレンマ )
ε = Min(1, Max(min_epsilon, 1 - ( 現在の有効Step数 /num_step_for_eps_greedy_anneal))
num step for eps greedy anneal で指定された step数の付近で、εは min epsilon (通常、
小さい確率値を設定)で設定した値になる。
つまり、序盤で色々な行動を通じて探索して、 num step for eps greedy anneal 以降は、
ランダム行動の採択を min epsilonの確率に控えて、Q値による判断を活用する。
式の参照: org.deeplearning4j.rl4j.policy.EpsGreedy #getEpsilon
左図: εの値の推移 (Stepに伴い動的にε値が変わる)
total step = 100, min epsilon = 0.05,
num of step for eps greedy anneal = 60
- 37. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 36
Experience Replay に関するパラメーター
– max size of experience replay
Experience Reply (経験再生) 用に経験をバッファしておくサイズを決めるパラメーター。
以下のような リスト構造のサイズ上限値。
上記のように経験を貯めておいた上で、そこからランダムに経験の要素を取り出し( size
of batches で指定された数だけ取り出す)、それらを深層学習に渡す。
直近のstepで起きた事ばかりでニューラルネットワークの重みを適合させると、別の局面
や過去の局面における適合が疎かになるので、過去分含めて経験をサンプリングする。
経験のバッファリスト
Transition
Transition
深層学習に
利用
バッチサイズ分の経験を
ランダムサンプリング
#1 Transition state, action, reward の情報
#100 Transition state, action, reward の情報
#1000 Transition state, action, reward の情報
#2 Transition state, action, reward の情報
参照: org.deeplearning4j.rl4j.learning.sync.ExpReplay #getBatch
org.deeplearning4j.rl4j.learning.sync.Transition
- 38. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 37
Double DQN に関するパラメーター説明
– double DQN
– target update
double DQN を有効にすると、行動選択用のニューラルネットワークと、Q値評価用の
ニューラルネットワークの2つの別のネットワークを使って強化学習を実行する。
1. 置かれている “状態” を入力に、行動選択用のNNが、
行動毎のQ値を推論(右図)。Q値が最大の行動を採択。
2. 1で採択した ”行動” をもとに、実際に行動して、”報酬” と “次状態” を獲得。
3. 今回の “状態”, ”行動” における新しいQ値を以下で算出。この値が深層学習の教師信号になる。
この値に近づくように行動選択用NNの重みを更新する。ただ、この際 Q(St+1, a) の項の算出が必要。
その算出に1.と同じNNを利用するのが、従来の DQN。
行動選択とは別の評価用NNを利用するのが Double DQN。
行動選択用NNはStep毎に重みの更新が発生するのに対し、
Q値評価用NNは一定期間 固定させて、target updateで指
定されたstep毎に、行動選択用NNの重みで完全に上書き
(同期) する。
【推論 → 行動 → 学習 の流れおさらい】
(再掲)
この項の算出を、どのネットワークで推論させるか ↑
- 39. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 38
(補足)A3C用のパラメーター説明
– A3CConfiguration クラスのBuilder
A3CConfiguration.builder()
.seed(1234), ランダムシード
.maxEpochStep(100) 1episode あたりのステップ回数
.maxStep(20000) トレーニングさせる全ステップ回数
.numThread(3) いくつのエージェントを同時起動させて学習させるかの数
.nstep(2) n-step learning の step 値
.updateStart(0) 最初の何ステップを学習処理からスキップするかのステップ数
.rewardFactor(1) 報酬値のスケール調整用の係数
.gamma(0.95) 報酬の割引率
.errorClamp(3) TD誤差値の範囲制約
.build()
- 40. ULS 39
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential
デモ
- 41. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 40
ビールゲーム風デモの結果
実行パラメーター
「DQN用のパラメーター説明」の頁の通り。 ( 抜粋 max step: 20000, max step by episode : 100 )
最後の1episode の在庫推移( 緑線: Retailerの在庫量、青線: Factoryの在庫量 )
在庫を無駄に積み上げるでもなく、全く在庫を持たないわけでもなく、機会損失しそう
なタイミングでエージェントが発注・生産の行動を取る。
- 42. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 41
ビールゲーム風デモの結果
報酬の推移( 各 1episode 内での報酬合計値の推移. 計 200 episodes)
- 43. Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 42
(補足) 行動を連続値にしたい場合
– 離散的な行動、連続的な行動
今回のデモは、発注/生産の 有・無(二値の離散値 と その組合せ)を行動としたが、
現実的なケースでは、発注/生産を 何個(連続値)行うのかを求めたいのが自然のはず。
行動を連続値として求めるには、現在 提供されているRL4Jの標準クラスだけでは難しい。
自分でPolicyクラス (org.deeplearning4j.rl4j.policy.Policy) 等を継承して追加実装するしかない。
― RL4J標準で提供されているPolicyクラスの例 ―
DQNPolicy → RL4Jでの出力形式: 離散的な各行動に対する Q値
ACPolicy → RL4Jでの出力形式: 離散的な各行動に対する 行動確率
※ どちらも離散的なアクションに対する実装となっている。
発注する
生産する
発注 + 生産する
エージェント
y1個 発注する
y2個 生産する
エージェント
行動選択 個数の推定
ー 離散的な行動ー ー 連続値の行動ー