Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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) ...
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=夏遊ぶ(報酬大きい)
   -> 冬大変(最...
14
Q-Learning
最終的に得られる報酬が、高くなる
ような行動を取る方針π*を学ぶ
Q-Learning: 行動関数Qπ
を良くする(学習)
 することで、最適な行動を学習する手法
15多すぎて、全ての経路の報酬はわからない
t=0
s
t
s1
t
s2
1
s
a1 a2 a3
? ? ? ? ? ? ? ?
a1 a1 a1
最終報酬
までの経路
最終報酬
16
最初 → ランダムに行動
→ 徐々に最終報酬が記録される
→ 最終報酬が高い経路の付近を選択的に行動
→ 新たに得られた最終報酬が記録される
→ 繰り返し=学習 (精度が良くなると期待)
t
s1
t
s2
? 0 2 ?10? ? ?
...
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) ...
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
Demo
1. 学習過程
2. 学習後のモデル
27
Game2: Pong
状態: 画像
行動: ラケットの動き (上 / 下)
報酬: 得点 / 失点
敵
自分
ボール
28
結果
学習数
合計得点
勝ち
負け
① 学習前 ② 学習後(48h)
0 - 21
21 - 20
29
CPU -> GPU
CPUでは時間がかかりすぎる(数十時間は
当たり前)。Trial & Errorができず、研究が
難しい。
より計算スピードが速いGPUに切り替えた
• AWS (Amazon Web Services)
• Ker...
30
CPU -> GPU
CPU環境
• QEMU Virtual CPU version
• 仮想12CPU, m120GB, 2.7GHz
• 速度:135 min / 500 episodes
GPU (AWS)
• g2.8xlarg...
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 hist...
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
ご清聴ありがとうございました!
Upcoming SlideShare
Loading in …5
×

Deep Q-LearningでFXしてみた

4,602 views

Published on

立教大学で話したセミナーの内容です。Deep Q-Learningについての説明と、それを応用して「FXで勝つ」Agentの構築について話しました。簡単な結果も出たので、それについの簡単な考察もしています。

Published in: Data & Analytics
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Deep Q-LearningでFXしてみた

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

×