Successfully reported this slideshow.
Your SlideShare is downloading. ×

Start Deep Reinforcement Learning with RL4J

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Start Deep Reinforcement Learning with RL4J

  1. 1. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential Start Deep Reinforcement Learning with RL4J RL4J で始める深層強化学習
  2. 2. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 1 自己紹介 – 名前: 田上 悠樹 (Yuki TAGAMI) – 職業: エンジニア – 所属: UL Systems – 役割: 基幹系システムのアプリケーション設計・開発
  3. 3. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 2 本日 お伝えしたい内容 『価値』という指標を頼りに アプリケーションがひとりでに振る舞う 強化学習の不思議な世界観
  4. 4. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 3 目次 – 深層強化学習の説明  強化学習  深層学習  深層 + 強化学習 – RL4J を使った深層強化学習  深層強化学習のフレームワーク DL4J / RL4J  デモアプリの概要  クラスの説明  パラメーターの説明 – デモ  ビールゲーム風のデモ
  5. 5. ULS 4 Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 深層強化学習の説明 15分でざっくり説明
  6. 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. 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. 8. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 7 強化学習(Reinforcement Learning)とは ごくごく ざっくり言うと、 – こんな状況のときに、 – こんな行動したら、 – こんな良いこと、悪いことがある、 – というのを判断して – 試行錯誤しながら学習する機械学習の1つ。 状態: State 行動: Action 報酬: Reward 価値: Value 方策: Policy
  9. 9. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 8 強化学習のキーワード (Cart Pole を例に) –キーワード:( エージェント / 環境 / 行動 / 状態 / 報酬 / 価値 ) エージェント (ゲームプレイヤー) 環境 (ゲームの世界) 『行動』 環境に対する はたらきかけ。 右ボタンや 左ボタンで、カートを左右に動かす 『状態』 行動によって変化する環境の状況。 台車の現在の位置、棒の角度や速度 など 『報酬』 行動を起こした結果として得る 良し悪しの即時評価。 例: ある一定以上傾いたら 0点, それ以内なら 1点 など 『方策』 頭脳にあたる部分。 最終的な行動選択や、 状況評価を担う。 『価値』 今の方策・状態のもと、今後 得られる累計報酬和(収益) に対する期待値 行動の主体 行動によって はたらきかけられる対象
  10. 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. 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. 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. 13. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 12 – 深層学習とは – ニューラルネットワークの構造 ニューラルネットワーク 深層学習 ― 深層学習(Deep Learning) は、人間の脳の「ニューロン」の構造と機能を模倣した ニューラルネットワークを何層も重ねて大規模にした機械学習の一手法です。 (中略) 複雑な関数でも表現することができる、万能な関数近似器としての役割も持っている ― 引用: 翔泳社 『現場で使える!Python深層強化学習入門 強化学習と深層学習による探索と制御』 より 著者:伊藤 多一, 今津 義充, 須藤 広大, 仁ノ平 将人, 川﨑 悠介, 酒井 裕企, 魏 崇哲 隠れ層 (N層) 出力層入力層 Input Output データ 画像 文章 回答
  14. 14. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 13 深層 + 強化学習 – 強化学習におけるニューラルネットワークの役割 ニューラルネットワークを利用して、環境から観測された状態データを入力に、行動選択 に関する情報(Q値や、行動選択の確率など)を出力する。 ニューラルネットワーク 隠れ層 (N層) 出力層入力層 Input Output 行動 出力層のデータ をもとに、方策が 最終的に行動を 選択 状態 環境から観測された 配列データ や 画像データ (連続値も扱える)
  15. 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. 16. ULS 15 Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential RL4J を使った深層強化学習
  17. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 40. ULS 39 Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential デモ
  41. 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. 42. Copyright © 2011-2020 UL Systems, Inc. All rights reserved. Proprietary & Confidential 41 ビールゲーム風デモの結果  報酬の推移( 各 1episode 内での報酬合計値の推移. 計 200 episodes)
  43. 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個 生産する エージェント 行動選択 個数の推定 ー 離散的な行動ー ー 連続値の行動ー

×