50
GMOインターネット 次世代システム研究室 勝田 隼一郎 2016/10/10 立教大学 Deep Q-Learningで FXしてみた

Deep Q-LearningでFXしてみた

Embed Size (px)

Citation preview

Page 1: Deep Q-LearningでFXしてみた

GMOインターネット 次世代システム研究室

勝田 隼一郎 2016/10/10 立教大学

Deep Q-Learningで FXしてみた

Page 2: Deep Q-LearningでFXしてみた

�2

http://recruit.gmo.jp/engineer/jisedai/blog/deep-q-learning/

このスライド内容を、簡略にまとめたブログが以下にあります。参考にしてください。

Page 3: Deep Q-LearningでFXしてみた

�3

自己紹介

2006: ボートを漕ぎすぎて留年 2011: 東京大学大学院理学系 研究科物理学 修了(博士) 2011-16: Stanford大学と広島大学で ポスドク(日本学術振興会; 高エネルギー宇宙物理学) 2016.4: GMOインターネット 次世代システム研究室 データサイエンティスト兼アーキテクト 超新星残骸

勝田 隼一郎

Page 4: Deep Q-LearningでFXしてみた

4

機械学習とは

教師あり学習

教師なし学習

強化学習

Page 5: Deep Q-LearningでFXしてみた

�5

機械学習(教師あり学習)

input data

output data

与えられたデータyに合うように パラメータを学習(人のアナロジー)

モデル

x f(x) = ax + b f(x) vs y

f(x) = 1*x + 7 f(x) = 2.1x + 1.6

Page 6: Deep Q-LearningでFXしてみた

�6

本研究の目的

教師あり学習 (正解を常に与える必要あり)

2Qの研究: Deep Learning を用いた株価変動の予想

予想を元に、売買の方針を立てる必要あり。 「正解」はない。

株やFXをする場合、予想がゴールではない。

Page 7: Deep Q-LearningでFXしてみた

7

本研究の目的強化学習 (Deep Q-Learningはその一種)

データとルールを与えれば、「自動的に」 適な行動を学習する。

FXに使えるかも!

Page 8: Deep Q-LearningでFXしてみた

8

Outline

1. 理論 • Deep Q-Learningとは

2. 実装 • Keras & TensorFlowによる実装 • デモ:ゲームの学習 (テストとして)

3. 実践 • Deep Q-LearningでFX

Page 9: Deep Q-LearningでFXしてみた

�9

Deep Q-Learning

Page 10: Deep Q-LearningでFXしてみた

10

Deep Q-Learningとは?Deep Learningの技術を Q-Learning (強化学習の一種)というフレームワークに応用

1. 強化学習 2. Q-Learning 3. Deep Learning

Page 11: Deep Q-LearningでFXしてみた

�11

強化学習Agent (学習者)が 環境からの 情報(状態、報酬)をもとに、 適( 終的な報酬が も高くなる)な行動をとるように学習する技術

Page 12: Deep Q-LearningでFXしてみた

�12

囲碁の場合

状態: 盤上の碁の位置 行動: 自分の石を一つ置く 報酬: 勝つか負けるか

Page 13: Deep Q-LearningでFXしてみた

13

Q-Learning行動関数Qπ(s, a):  方針πの下、状態sで行動aをしたとき、 終的に得られる報酬( 終報酬)の期待値

「アリとキリギリス」を例にすると、、 Qキリギリス:s=夏遊ぶ(報酬大きい)    -> 冬大変( 終報酬は小さい) Qアリ:s=夏働く(報酬小さい)    -> 冬助かる( 終報酬は大きい)

Page 14: Deep Q-LearningでFXしてみた

�14

Q-Learning

終的に得られる報酬が、高くなる ような行動を取る方針π*を学ぶ

Q-Learning: 行動関数Qπを良くする(学習)  することで、 適な行動を学習する手法

Page 15: Deep Q-LearningでFXしてみた

�15多すぎて、全ての経路の報酬はわからない

t=0s

ts1 ts2

1s

a1 a2 a3

? ? ? ?? ? ? ?

a1 a1 a1

終報酬 までの経路

終報酬

Page 16: Deep Q-LearningでFXしてみた

�16

初 → ランダムに行動 → 徐々に 終報酬が記録される → 終報酬が高い経路の付近を選択的に行動 → 新たに得られた 終報酬が記録される → 繰り返し=学習 (精度が良くなると期待)

ts1 ts2

? 0 2 ?10? ? ?

a1 a1 a1

終報酬

Page 17: Deep Q-LearningでFXしてみた

17

そんな魔法みたいな関数あるの?

難しい環境(ゲーム, FX, etc)になったら、多数の複雑な状況を柔軟に学習する行動関数Q(s, a)が必要

Page 18: Deep Q-LearningでFXしてみた

18

教師あり学習

input data

output data

与えられたデータyに合うように パラメータを学習(人のアナロジー)

モデル f(x)

x f(x) = ax + b f(x) vs y

f(x) = 1*x + 7 f(x) = 2.1x + 1.6

Page 19: Deep Q-LearningでFXしてみた

19

教師あり学習

f(x) = a*x + b f(x) = a*sin(b*x)

適切なモデルを考える必要がある → 大変!!! (データが増えるほど)

モデル モデル

Page 20: Deep Q-LearningでFXしてみた

input data

output data

モデル f(x)

�20

Deep Learning

Deep!

複雑な表現

層が

が可能input output

Page 21: Deep Q-LearningでFXしてみた

�21

実装&デモ

Page 22: Deep Q-LearningでFXしてみた

�22

実装ことはじめFX学習を実装するにはAgent、環境など全て自分で構築する必要あり

いきなり全部作るのは大変 まずはテストをしたい

Page 23: Deep Q-LearningでFXしてみた

�23

色々なゲームを強化学習用にemulateしたライブラリ => Agentの作成に集中 でき、テストもできる。

OpenAI Gym

OpenAI Gym

1. Cart pole 2. Pong

Page 24: Deep Q-LearningでFXしてみた

�24

Keras & TensorFlow

直感的に使える TensorFlow, Theanoをバックエンドで使用 Python コード量が少ない → 初心者に優しい → 海外で人気

Page 25: Deep Q-LearningでFXしてみた

�25

Game1: Cart pole

状態: 棒の傾き、カートの位置 行動: カートの動き (右 / 左) 報酬: 倒れるまでの時間(step数)

単純 -> 学習速度が速い。 初にテストするのに 適

Page 26: Deep Q-LearningでFXしてみた

�26

Demo1. 学習過程 2. 学習後のモデル

Page 27: Deep Q-LearningでFXしてみた

�27

Game2: Pong

状態: 画像 行動: ラケットの動き (上 / 下) 報酬: 得点 / 失点

自分

ボール

Page 28: Deep Q-LearningでFXしてみた

�28

結果

学習数

合計得点

勝ち

負け

① 学習前 ② 学習後(48h)

0 - 21

21 - 20

Page 29: Deep Q-LearningでFXしてみた

29

CPU -> GPUCPUでは時間がかかりすぎる(数十時間は 当たり前)。Trial & Errorができず、研究が難しい。

より計算スピードが速いGPUに切り替えた • AWS (Amazon Web Services) • Keras/TensorFlowともにGPU対応

 

Page 30: Deep Q-LearningでFXしてみた

30

CPU -> GPUCPU環境

• QEMU Virtual CPU version • 仮想12CPU, m120GB, 2.7GHz • 速度:135 min / 500 episodes

GPU (AWS) • g2.8xlarge (Intel Xeon E5-2670プロセッサー) • NVIDIA GPU(1,536 CUDA コアと 4GB のビデオメモ

リ) • 4GPU, m60GB • 速度:25 min / 500 episodes (~6倍速); 1GPUのみ使

用 • ~ 300円/hr => 100時間使うと3万円。。

Page 31: Deep Q-LearningでFXしてみた

�31

FX

Page 32: Deep Q-LearningでFXしてみた

�32

FX (Foreign eXchange)通貨の相対価値は変化する 儲け:安いときに買って、高いときに売る

円安(ドル高)

円高(ドル安)

買い 買い

売り

売り

ドルが高くなった分が利益

ドルが安くなった分が利益

Page 33: Deep Q-LearningでFXしてみた

33

元金(JPY=100万円) 終的な評価は、学習に使わない期間

(2014-2016)を2週間ごとに区切り(75区間)、AgentにFXさせた儲け/損の平均値。

目的:FXを2週間して、儲けられるようAgentを学習!

問題定義

Page 34: Deep Q-LearningでFXしてみた

�34

2通貨ペア(JPY/USD, JPY/EUR)を採用 人が見つけられない複雑な組み合わせパターン複雑をAgentが学習する、かも。

FXデータ

円/USD 円/EUR

レート(2時間平均)

時間

学習期間 評価期間

Forex historical dataより取得

Page 35: Deep Q-LearningでFXしてみた

�35

状態: 過去2週間分のrate(JPY, USD, EUR) 所持している通貨量

行動: 売り、買い、ステイ

報酬: 終了時の総資産(円単位) 持っている通貨をその時点のレートで換算

Page 36: Deep Q-LearningでFXしてみた

テスト1実装したAgentや環境をテストするため、予測が簡単な疑似データ(USDのみ)を作り、Agentに学習させた。

trade期間

円/USD

時間

疑似FXデータ

36

Page 37: Deep Q-LearningでFXしてみた

37

結果

学習数

儲け (100万円)

学習して儲けている!→ 成功

元金

Page 38: Deep Q-LearningでFXしてみた

38

スタート 終了考察

疑似レート (円/USD)

時間

所持している 各通貨量 (JPY: 100万円 USD: 1万ドル)

ドル高

ドル安

Page 39: Deep Q-LearningでFXしてみた

39

テスト2

通貨ペアを2つ使い、両者の情報を学習しないと儲けることができない疑似データを作成

通貨ペア x 1 → 通貨ペア x 2

trade期間

円/USD 円/EUR

時間

疑似FXデータ

Page 40: Deep Q-LearningでFXしてみた

�40

結果

学習数

儲け (100万円)

儲けられず。。→ 適切に学習できていない

元金

Page 41: Deep Q-LearningでFXしてみた

�41

行動関数Q(s, a)の変更行動関数 = Deep Learningのモデルの形状が適切でないため、学習を妨げている? → 変更 (4モデル試す)

Page 42: Deep Q-LearningでFXしてみた

42

元金

学習数

元金

学習数

モデル1

モデル3

モデル2 学習数

元金

学習数

元金

モデル4

過学習?

Page 43: Deep Q-LearningでFXしてみた

�43

過学習

過学習

モデルが学習データに適合しすぎて、ノイズまで再現するように学習するため、学習データ以外のデータ(予想したいデータ)の予測精度が悪化

→ 適切なパラメータ数、学習回数にすることが大切

Page 44: Deep Q-LearningでFXしてみた

44

疑似レート (円/USD, EUR)

所持している 各通貨量 (JPY: 100万円 USD/EUR: 1万ドル)

ドル高

ドル安

考察(モデル4)

Page 45: Deep Q-LearningでFXしてみた

45

実データ

2つの通貨ペア (JPY/USD, EUR/USD) ランダム要素が強い

円/USD 円/EUR*

レート

時間

trade期間

 *EURは見やすさのため normalized

Page 46: Deep Q-LearningでFXしてみた

46

元金(100万円)

学習数

トレード後の資産

トレード後の資産

学習数学習数

学習数

評価データ 評価データ(移動平均)

学習データ(移動平均)学習データ

105万円

105万円

95万円

95万円

元金(100万円)

結果過学習?

Page 47: Deep Q-LearningでFXしてみた

�47

Summary

Page 48: Deep Q-LearningでFXしてみた

�48

まとめ Deep Q-Learningを実装しFXをした。

テストデータでは学習していることを確かめた。= FXデータにパターンが存在すれば、自律的に儲けられる事を確かめた。

実データでも、学習データでは儲ける方針を学習した。評価データでも学んだようにも見えるが、さらなる検証が必要。

Page 49: Deep Q-LearningでFXしてみた

�49

今後の方向性

問題定義の見直し インプットデータは適切だったのか? 2週間は適切だったのか? 通貨ペアを増やす 取引量を変更

Agentの行動関数のモデル部分の改善 もっと学習速度を上げたい -> マルチGPU

Page 50: Deep Q-LearningでFXしてみた

�50

ご清聴ありがとうございました!