SlideShare a Scribd company logo
1 of 43
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential
Start Deep Reinforcement Learning with RL4J
RL4J で始める深層強化学習
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 1
自己紹介
– 名前: 田上 悠樹 (Yuki TAGAMI)
– 職業: エンジニア
– 所属: UL Systems
– 役割: 基幹系システムのアプリケーション設計・開発
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 2
本日 お伝えしたい内容
『価値』という指標を頼りに
アプリケーションがひとりでに振る舞う
強化学習の不思議な世界観
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 3
目次
– 深層強化学習の説明
 強化学習
 深層学習
 深層 + 強化学習
– RL4J を使った深層強化学習
 深層強化学習のフレームワーク DL4J / RL4J
 デモアプリの概要
 クラスの説明
 パラメーターの説明
– デモ
 ビールゲーム風のデモ
ULS 4
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential
深層強化学習の説明
15分でざっくり説明
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/
教師なし学習
学習開始に必要なもの
データ
強化学習
学習開始に必要なもの
エージェント
環境
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
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 7
強化学習(Reinforcement Learning)とは
ごくごく ざっくり言うと、
– こんな状況のときに、
– こんな行動したら、
– こんな良いこと、悪いことがある、
– というのを判断して
– 試行錯誤しながら学習する機械学習の1つ。
状態: State
行動: Action
報酬: Reward
価値: Value
方策: Policy
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 8
強化学習のキーワード (Cart Pole を例に)
–キーワード:( エージェント / 環境 / 行動 / 状態 / 報酬 / 価値 )
エージェント
(ゲームプレイヤー)
環境
(ゲームの世界)
『行動』
環境に対する はたらきかけ。
右ボタンや 左ボタンで、カートを左右に動かす
『状態』
行動によって変化する環境の状況。
台車の現在の位置、棒の角度や速度 など
『報酬』
行動を起こした結果として得る 良し悪しの即時評価。
例: ある一定以上傾いたら 0点, それ以内なら 1点 など
『方策』
頭脳にあたる部分。
最終的な行動選択や、
状況評価を担う。
『価値』
今の方策・状態のもと、今後
得られる累計報酬和(収益)
に対する期待値
行動の主体 行動によって
はたらきかけられる対象
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 へ経験を
積んでいく
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でも提供されているアルゴリズム
― 具体的なアルゴリズム ―
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値
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 12
– 深層学習とは
– ニューラルネットワークの構造
ニューラルネットワーク
深層学習
― 深層学習(Deep Learning) は、人間の脳の「ニューロン」の構造と機能を模倣した
ニューラルネットワークを何層も重ねて大規模にした機械学習の一手法です。
(中略)
複雑な関数でも表現することができる、万能な関数近似器としての役割も持っている ―
引用: 翔泳社 『現場で使える!Python深層強化学習入門 強化学習と深層学習による探索と制御』 より
著者:伊藤 多一, 今津 義充, 須藤 広大, 仁ノ平 将人, 川﨑 悠介, 酒井 裕企, 魏 崇哲
隠れ層 (N層) 出力層入力層
Input Output
データ
画像
文章
回答
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 13
深層 + 強化学習
– 強化学習におけるニューラルネットワークの役割
ニューラルネットワークを利用して、環境から観測された状態データを入力に、行動選択
に関する情報(Q値や、行動選択の確率など)を出力する。
ニューラルネットワーク
隠れ層 (N層) 出力層入力層
Input Output
行動
出力層のデータ
をもとに、方策が
最終的に行動を
選択
状態
環境から観測された
配列データ や
画像データ
(連続値も扱える)
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値
の予想値
アクション数と
同じ次元
状態と同じ次元
ULS 15
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential
RL4J を使った深層強化学習
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
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 に関する解説も載ってます。参考にさせていただきました。
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の利用。
 環境側(シミュレーター・アプリ)の言語と、機械学習側の言語を揃えたいか
 環境側と学習側の言語を揃えて、技術要素や組込をスリムにしたいときの候補として。
※ 環境側と学習側で独立体制組めたり、複数言語で混乱しない場合は関係なし
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>
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
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人)で対応。
• 行動は、離散的な行動(発注する/しない、 生産する/しない)として扱う。
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 22
デモアプリの 『環境』
– 環境
Customer がランダムに次々と注文してくるので、 Retailer と Factoryは適度な在庫数を
維持しながら、販売と出荷を遂行していくゲーム。在庫切れして依頼された注文や発注の
数を捌けないペナルティ。
Retailer FactoryCustomer
注文 発注
出荷販売
生産
在庫数 在庫数
1回に 1~15 の範囲で
ランダムにオーダー
1回に定量 30個
を発注 1回に定量 80個
を生産
― キャプチャーイメージ ―
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個)
発注や生産を選択すると、翌ターンまでに定量分だけ在庫補充される。
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
↑ ゴチャゴチャ してるが、要は単純に在庫の入りと出の加算・減算
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
以上、「発注」 や 「生産」 タイミングを制御する明示的なプログラム無しに、
状態遷移や報酬設定に基づいて エージェントが「注文」を捌けるかをデモしてみる。
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のクラスを継承して、
実装義務があるメソッド
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 )
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次元配列
}
・・・
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;
}
・・・
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();
}
…
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の設定 ―
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();
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
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の学習率で調整。学習率に学習率が乗ってしまうので。
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
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
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の重みで完全に上書き
(同期) する。
【推論 → 行動 → 学習 の流れおさらい】
(再掲)
この項の算出を、どのネットワークで推論させるか ↑
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()
ULS 39
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential
デモ
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 40
ビールゲーム風デモの結果
 実行パラメーター
「DQN用のパラメーター説明」の頁の通り。 ( 抜粋 max step: 20000, max step by episode : 100 )
 最後の1episode の在庫推移( 緑線: Retailerの在庫量、青線: Factoryの在庫量 )
在庫を無駄に積み上げるでもなく、全く在庫を持たないわけでもなく、機会損失しそう
なタイミングでエージェントが発注・生産の行動を取る。
Copyright © 2011-2020 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 41
ビールゲーム風デモの結果
 報酬の推移( 各 1episode 内での報酬合計値の推移. 計 200 episodes)
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個 生産する
エージェント
行動選択 個数の推定
ー 離散的な行動ー ー 連続値の行動ー

More Related Content

Similar to Start Deep Reinforcement Learning with RL4J

Tensor flow勉強会3
Tensor flow勉強会3Tensor flow勉強会3
Tensor flow勉強会3tak9029
 
[JISA][変革リーダー養成部会]組織の中で自分を活かす生き方
[JISA][変革リーダー養成部会]組織の中で自分を活かす生き方[JISA][変革リーダー養成部会]組織の中で自分を活かす生き方
[JISA][変革リーダー養成部会]組織の中で自分を活かす生き方Shigeki Morizane
 
ユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションMasanori Kado
 
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話Nan Zhang
 
20180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol120180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol1Keisuke Nakata
 
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechconDeNA
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
Archtect meetup sharing_territory_20190801
Archtect meetup sharing_territory_20190801Archtect meetup sharing_territory_20190801
Archtect meetup sharing_territory_20190801Ikou Sanuki
 
初心者にも丸わかり!Soft layeroverlaynetworkの魅力
初心者にも丸わかり!Soft layeroverlaynetworkの魅力初心者にも丸わかり!Soft layeroverlaynetworkの魅力
初心者にも丸わかり!Soft layeroverlaynetworkの魅力WendyKanaeUeda
 
経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃん
経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃん経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃん
経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃんYasushi Hara
 
CNNチュートリアル
CNNチュートリアルCNNチュートリアル
CNNチュートリアルIkuro Sato
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展Recruit Technologies
 
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)NTT DATA OSS Professional Services
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術Daisuke Tamada
 
LEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupLEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupItsuki Kuroda
 
深層強化学習 Pydata.Okinawa Meetup #22
深層強化学習 Pydata.Okinawa Meetup #22深層強化学習 Pydata.Okinawa Meetup #22
深層強化学習 Pydata.Okinawa Meetup #22Naoto Yoshida
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギMasaki Yamakawa
 

Similar to Start Deep Reinforcement Learning with RL4J (20)

Tensor flow勉強会3
Tensor flow勉強会3Tensor flow勉強会3
Tensor flow勉強会3
 
[JISA][変革リーダー養成部会]組織の中で自分を活かす生き方
[JISA][変革リーダー養成部会]組織の中で自分を活かす生き方[JISA][変革リーダー養成部会]組織の中で自分を活かす生き方
[JISA][変革リーダー養成部会]組織の中で自分を活かす生き方
 
ユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーション
 
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
 
20180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol120180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol1
 
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
 
Lucene/Solr Revolution2015参加レポート
Lucene/Solr Revolution2015参加レポートLucene/Solr Revolution2015参加レポート
Lucene/Solr Revolution2015参加レポート
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
Archtect meetup sharing_territory_20190801
Archtect meetup sharing_territory_20190801Archtect meetup sharing_territory_20190801
Archtect meetup sharing_territory_20190801
 
初心者にも丸わかり!Soft layeroverlaynetworkの魅力
初心者にも丸わかり!Soft layeroverlaynetworkの魅力初心者にも丸わかり!Soft layeroverlaynetworkの魅力
初心者にも丸わかり!Soft layeroverlaynetworkの魅力
 
経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃん
経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃん経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃん
経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃん
 
CNNチュートリアル
CNNチュートリアルCNNチュートリアル
CNNチュートリアル
 
Elastic ML Introduction
Elastic ML IntroductionElastic ML Introduction
Elastic ML Introduction
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
 
LEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupLEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartup
 
TechTarget新サービス
TechTarget新サービスTechTarget新サービス
TechTarget新サービス
 
深層強化学習 Pydata.Okinawa Meetup #22
深層強化学習 Pydata.Okinawa Meetup #22深層強化学習 Pydata.Okinawa Meetup #22
深層強化学習 Pydata.Okinawa Meetup #22
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
 

More from Yuki Tagami

グラフデータからの分析アプローチ
グラフデータからの分析アプローチグラフデータからの分析アプローチ
グラフデータからの分析アプローチYuki Tagami
 
グラフアルゴリズムと機械学習の接点
グラフアルゴリズムと機械学習の接点グラフアルゴリズムと機械学習の接点
グラフアルゴリズムと機械学習の接点Yuki Tagami
 
PGX ユーザー勉強会 #15 LT Ant Colony Optimization
PGX ユーザー勉強会 #15 LT Ant Colony OptimizationPGX ユーザー勉強会 #15 LT Ant Colony Optimization
PGX ユーザー勉強会 #15 LT Ant Colony OptimizationYuki Tagami
 
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )Yuki Tagami
 
PGX ユーザー勉強会 #13 LT Built-in アルゴリズム( Topological Ordering Algorithm )
PGX ユーザー勉強会 #13  LT Built-in アルゴリズム( Topological Ordering Algorithm )PGX ユーザー勉強会 #13  LT Built-in アルゴリズム( Topological Ordering Algorithm )
PGX ユーザー勉強会 #13 LT Built-in アルゴリズム( Topological Ordering Algorithm )Yuki Tagami
 
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)Yuki Tagami
 
Graph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみたGraph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみたYuki Tagami
 
Graph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみたGraph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみたYuki Tagami
 
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)Yuki Tagami
 
PGXユーザー勉強会#7_PGQL1.1事始め
PGXユーザー勉強会#7_PGQL1.1事始めPGXユーザー勉強会#7_PGQL1.1事始め
PGXユーザー勉強会#7_PGQL1.1事始めYuki Tagami
 
Pgxユーザー勉強会#5 パスクエリを使ったトラバース
Pgxユーザー勉強会#5 パスクエリを使ったトラバースPgxユーザー勉強会#5 パスクエリを使ったトラバース
Pgxユーザー勉強会#5 パスクエリを使ったトラバースYuki Tagami
 
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
いまさらアジャイル巡業 In Tokyo アジャイルモデリングいまさらアジャイル巡業 In Tokyo アジャイルモデリング
いまさらアジャイル巡業 In Tokyo アジャイルモデリングYuki Tagami
 
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312Yuki Tagami
 

More from Yuki Tagami (13)

グラフデータからの分析アプローチ
グラフデータからの分析アプローチグラフデータからの分析アプローチ
グラフデータからの分析アプローチ
 
グラフアルゴリズムと機械学習の接点
グラフアルゴリズムと機械学習の接点グラフアルゴリズムと機械学習の接点
グラフアルゴリズムと機械学習の接点
 
PGX ユーザー勉強会 #15 LT Ant Colony Optimization
PGX ユーザー勉強会 #15 LT Ant Colony OptimizationPGX ユーザー勉強会 #15 LT Ant Colony Optimization
PGX ユーザー勉強会 #15 LT Ant Colony Optimization
 
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
 
PGX ユーザー勉強会 #13 LT Built-in アルゴリズム( Topological Ordering Algorithm )
PGX ユーザー勉強会 #13  LT Built-in アルゴリズム( Topological Ordering Algorithm )PGX ユーザー勉強会 #13  LT Built-in アルゴリズム( Topological Ordering Algorithm )
PGX ユーザー勉強会 #13 LT Built-in アルゴリズム( Topological Ordering Algorithm )
 
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
 
Graph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみたGraph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみた
 
Graph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみたGraph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみた
 
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
 
PGXユーザー勉強会#7_PGQL1.1事始め
PGXユーザー勉強会#7_PGQL1.1事始めPGXユーザー勉強会#7_PGQL1.1事始め
PGXユーザー勉強会#7_PGQL1.1事始め
 
Pgxユーザー勉強会#5 パスクエリを使ったトラバース
Pgxユーザー勉強会#5 パスクエリを使ったトラバースPgxユーザー勉強会#5 パスクエリを使ったトラバース
Pgxユーザー勉強会#5 パスクエリを使ったトラバース
 
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
いまさらアジャイル巡業 In Tokyo アジャイルモデリングいまさらアジャイル巡業 In Tokyo アジャイルモデリング
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
 
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312
 

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個 生産する エージェント 行動選択 個数の推定 ー 離散的な行動ー ー 連続値の行動ー