GMOインターネット 次世代システム研究室
勝田 隼一郎 2016/10/10 立教大学
Deep Q-Learningで FXしてみた
�2
http://recruit.gmo.jp/engineer/jisedai/blog/deep-q-learning/
このスライド内容を、簡略にまとめたブログが以下にあります。参考にしてください。
�3
自己紹介
2006: ボートを漕ぎすぎて留年 2011: 東京大学大学院理学系 研究科物理学 修了(博士) 2011-16: Stanford大学と広島大学で ポスドク(日本学術振興会; 高エネルギー宇宙物理学) 2016.4: GMOインターネット 次世代システム研究室 データサイエンティスト兼アーキテクト 超新星残骸
勝田 隼一郎
4
機械学習とは
教師あり学習
教師なし学習
強化学習
�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
�6
本研究の目的
教師あり学習 (正解を常に与える必要あり)
2Qの研究: Deep Learning を用いた株価変動の予想
予想を元に、売買の方針を立てる必要あり。 「正解」はない。
株やFXをする場合、予想がゴールではない。
7
本研究の目的強化学習 (Deep Q-Learningはその一種)
データとルールを与えれば、「自動的に」 適な行動を学習する。
FXに使えるかも!
8
Outline
1. 理論 • Deep Q-Learningとは
2. 実装 • Keras & TensorFlowによる実装 • デモ:ゲームの学習 (テストとして)
3. 実践 • Deep Q-LearningでFX
�9
Deep Q-Learning
10
Deep Q-Learningとは?Deep Learningの技術を Q-Learning (強化学習の一種)というフレームワークに応用
1. 強化学習 2. Q-Learning 3. Deep Learning
�11
強化学習Agent (学習者)が 環境からの 情報(状態、報酬)をもとに、 適( 終的な報酬が も高くなる)な行動をとるように学習する技術
�12
囲碁の場合
状態: 盤上の碁の位置 行動: 自分の石を一つ置く 報酬: 勝つか負けるか
13
Q-Learning行動関数Qπ(s, a): 方針πの下、状態sで行動aをしたとき、 終的に得られる報酬( 終報酬)の期待値
「アリとキリギリス」を例にすると、、 Qキリギリス:s=夏遊ぶ(報酬大きい) -> 冬大変( 終報酬は小さい) Qアリ:s=夏働く(報酬小さい) -> 冬助かる( 終報酬は大きい)
�14
Q-Learning
終的に得られる報酬が、高くなる ような行動を取る方針π*を学ぶ
Q-Learning: 行動関数Qπを良くする(学習) することで、 適な行動を学習する手法
�15多すぎて、全ての経路の報酬はわからない
t=0s
ts1 ts2
1s
a1 a2 a3
? ? ? ?? ? ? ?
a1 a1 a1
終報酬 までの経路
終報酬
�16
初 → ランダムに行動 → 徐々に 終報酬が記録される → 終報酬が高い経路の付近を選択的に行動 → 新たに得られた 終報酬が記録される → 繰り返し=学習 (精度が良くなると期待)
ts1 ts2
? 0 2 ?10? ? ?
a1 a1 a1
終報酬
17
そんな魔法みたいな関数あるの?
難しい環境(ゲーム, FX, etc)になったら、多数の複雑な状況を柔軟に学習する行動関数Q(s, a)が必要
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
19
教師あり学習
f(x) = a*x + b f(x) = a*sin(b*x)
適切なモデルを考える必要がある → 大変!!! (データが増えるほど)
モデル モデル
input data
output data
モデル f(x)
�20
Deep Learning
Deep!
複雑な表現
層が
が可能input output
�21
実装&デモ
�22
実装ことはじめFX学習を実装するにはAgent、環境など全て自分で構築する必要あり
いきなり全部作るのは大変 まずはテストをしたい
�23
色々なゲームを強化学習用にemulateしたライブラリ => Agentの作成に集中 でき、テストもできる。
OpenAI Gym
OpenAI Gym
1. Cart pole 2. Pong
�24
Keras & TensorFlow
直感的に使える TensorFlow, Theanoをバックエンドで使用 Python コード量が少ない → 初心者に優しい → 海外で人気
�25
Game1: Cart pole
状態: 棒の傾き、カートの位置 行動: カートの動き (右 / 左) 報酬: 倒れるまでの時間(step数)
単純 -> 学習速度が速い。 初にテストするのに 適
�26
Demo1. 学習過程 2. 学習後のモデル
�27
Game2: Pong
状態: 画像 行動: ラケットの動き (上 / 下) 報酬: 得点 / 失点
敵
自分
ボール
�28
結果
学習数
合計得点
勝ち
負け
① 学習前 ② 学習後(48h)
0 - 21
21 - 20
29
CPU -> GPUCPUでは時間がかかりすぎる(数十時間は 当たり前)。Trial & Errorができず、研究が難しい。
より計算スピードが速いGPUに切り替えた • AWS (Amazon Web Services) • Keras/TensorFlowともにGPU対応
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万円。。
�31
FX
�32
FX (Foreign eXchange)通貨の相対価値は変化する 儲け:安いときに買って、高いときに売る
円安(ドル高)
円高(ドル安)
買い 買い
売り
売り
ドルが高くなった分が利益
ドルが安くなった分が利益
33
元金(JPY=100万円) 終的な評価は、学習に使わない期間
(2014-2016)を2週間ごとに区切り(75区間)、AgentにFXさせた儲け/損の平均値。
目的:FXを2週間して、儲けられるようAgentを学習!
問題定義
�34
2通貨ペア(JPY/USD, JPY/EUR)を採用 人が見つけられない複雑な組み合わせパターン複雑をAgentが学習する、かも。
FXデータ
円/USD 円/EUR
レート(2時間平均)
時間
学習期間 評価期間
Forex historical dataより取得
�35
状態: 過去2週間分のrate(JPY, USD, EUR) 所持している通貨量
行動: 売り、買い、ステイ
報酬: 終了時の総資産(円単位) 持っている通貨をその時点のレートで換算
テスト1実装したAgentや環境をテストするため、予測が簡単な疑似データ(USDのみ)を作り、Agentに学習させた。
trade期間
円/USD
時間
疑似FXデータ
36
37
結果
学習数
儲け (100万円)
学習して儲けている!→ 成功
元金
38
スタート 終了考察
疑似レート (円/USD)
時間
所持している 各通貨量 (JPY: 100万円 USD: 1万ドル)
ドル高
ドル安
39
テスト2
通貨ペアを2つ使い、両者の情報を学習しないと儲けることができない疑似データを作成
通貨ペア x 1 → 通貨ペア x 2
trade期間
円/USD 円/EUR
時間
疑似FXデータ
�40
結果
学習数
儲け (100万円)
儲けられず。。→ 適切に学習できていない
元金
�41
行動関数Q(s, a)の変更行動関数 = Deep Learningのモデルの形状が適切でないため、学習を妨げている? → 変更 (4モデル試す)
42
元金
学習数
元金
学習数
モデル1
モデル3
モデル2 学習数
元金
学習数
元金
モデル4
過学習?
�43
過学習
過学習
モデルが学習データに適合しすぎて、ノイズまで再現するように学習するため、学習データ以外のデータ(予想したいデータ)の予測精度が悪化
→ 適切なパラメータ数、学習回数にすることが大切
44
疑似レート (円/USD, EUR)
所持している 各通貨量 (JPY: 100万円 USD/EUR: 1万ドル)
ドル高
ドル安
考察(モデル4)
45
実データ
2つの通貨ペア (JPY/USD, EUR/USD) ランダム要素が強い
円/USD 円/EUR*
レート
時間
trade期間
*EURは見やすさのため normalized
46
元金(100万円)
学習数
トレード後の資産
トレード後の資産
学習数学習数
学習数
評価データ 評価データ(移動平均)
学習データ(移動平均)学習データ
105万円
105万円
95万円
95万円
元金(100万円)
結果過学習?
�47
Summary
�48
まとめ Deep Q-Learningを実装しFXをした。
テストデータでは学習していることを確かめた。= FXデータにパターンが存在すれば、自律的に儲けられる事を確かめた。
実データでも、学習データでは儲ける方針を学習した。評価データでも学んだようにも見えるが、さらなる検証が必要。
�49
今後の方向性
問題定義の見直し インプットデータは適切だったのか? 2週間は適切だったのか? 通貨ペアを増やす 取引量を変更
Agentの行動関数のモデル部分の改善 もっと学習速度を上げたい -> マルチGPU
�50
ご清聴ありがとうございました!