深層学習は金融市場をシミュレーションすることができるか?

 深層学習は金融市場をシミュレーションすることができるか?

2017年5月11日 GMOエンジニアトークにて公開

8ca514f93117daca13d14c7c87a02d46?s=128

GMO次世代

May 16, 2017
Tweet

Transcript

  1. 深層学習は金融市場を シミュレーションできるか? 〜 GAN(Generative Adversarial Networks)を応用した マーケットのシミュレーションへの挑戦〜 GMOインターネット 次世代システム研究室

  2. 2 目次: 1. Introduction 2. GAN(Generative Adversarial Networks)とは 3. 実験計画

    4. 実験 5. まとめ
  3. Introduction

  4. 4 突然ですが質問です。 あなたはマネーが好きですか?

  5. 5 突然ですが質問です。 あなたはマネーが好きですか? (正直に)

  6. マネーを増やす代表的手段 「資産運用」 その資産運用の分野で、 AIが劇的な変化をもたらして います。

  7. 出展:Bloomberg/How a $26 Billion Hedge Fund Lures the Beautiful Minds

    AIを使ったヘッジファンド だけ利益を上げている 伝統的手法のヘッジファンドは 大きな損失を被っている 2016年:ヘッジファンド業界の明暗 黒字 赤字
  8. AIを成長させるのは シミュレーション(仮想訓練)! シミュレーション環境の整備 は強いAIの開発に必須!

  9. シミュレーションがAIを 強くする・・・ 有名な囲碁AIが 世界を驚かせましたね!

  10. Alpha Go(アルファ碁) Alpha Go(アルファ碁)は、膨大なシ ミュレーション(=仮想対局)を繰り 返した結果、人類最強イ・セドル9段 を4勝1敗で打ち破った。

  11. 金融分野の Alpha Go(アルファ碁)を 目指す!

  12. 最終目標 どんな過酷なマーケットでも 生き残る資産運用AIを 育てる!

  13. 今回の発表はその一里塚 新しい金融市場のシミュレー ション法を開発し、 資産運用AIを鍛える環境を 構築する!

  14. 従来の金融分野の シミュレーション法

  15. 15 従来のシミュレーション法 ヒストリカルシミュレーション法 モンテカルロシミュレーション法 ほとんどの場合、 こっちを使う

  16. 16 ヒストリカルシミュレーション法  過去のマーケットの値動きをそのまま持ってくる  バックテスト(AIの性能検証)に使われるのはこれ  [Good!]再現性は確実! 処理も簡単! 

    [Bad!]過去に起きた値動き以外を学ぶことができない
  17. 17 モンテカルロシミュレーション法 …  統計を使って、それっぽい値動きを再現  [Good!]さまざまな値動きパターンを再現し、学習 させることができる  [Bad!]実際とは違う値動きを再現してしまうこと

    がある!
  18. 従来の方法の課題

  19. 19 •従来法の課題 過去に起きた値動きしか再現できない 実際とは異なる値動きをしてしまう 囲碁、将棋と比べて トレーニングデータ量が かなり少なくなってしまう!

  20. そこで・・・ 新シミュレーション法で解決 を図る! →革新的な深層学習の手法GAN で「冒険的」挑戦! →GAN(Generative Adversarial Networks)=生成的対立ネットワーク

  21. GANの何が革新的なのか・・・ これまでのAIでは不可能だっ た「創造する」処理を 実現したこと!

  22. デモンストレーション AIが人間の「顔」を創造!

  23. デモンストレーション概要: 約23万枚の顔写真を インプットして、 新しい顔写真を創造します

  24. デモンストレーション中

  25. 25 絵画や写真、イラストを創造できるAI、 それが… GANならば新しい方法を 実現できるのではないか? 深層学習の新技術 GAN(Generative Adversarial Networks) 生成的対立

    ネットワーク これまでのAIの 常識を覆す!
  26. GAN(Generative Adversarial Networks) の特徴

  27. 2つのAIが競い合って学習する 判別する側 Discriminator 創造する側 Generator 本物を真似た画像 を創造する 真贋を見抜く

  28. GANの利点… 人間が手間を掛けずとも、 勝手にレベルアップしてくれる  画像を創造する能力  真贋を鑑定する能力

  29. GANを使って、革新的なシミュ レーション法を実現する! 「視覚的」アプローチによる 前代未聞のシミュレーション法!

  30. 実験目標

  31. 31 •実験目標 外国為替市場の値動きを GANに学習させて、 自然な値動きを 無尽蔵に創造する!

  32. Why… 外国為替市場の値動きを シミュレーションするのか? Because… 外国為替市場の値動きは 金融市場の今を映す鏡!

  33. 実験概要

  34. 34 •実験概要 外国為替市場(ドル円)の チャートを自動生成させる ちゃんとマーケットを理解しているか 確かめる(=ニセモノ判定試験) GANを使って・・・ トランプ相場で 大賑わい

  35. 実験環境

  36. 36 •実験環境  言語:Python , version3.5  深層学習フレームワーク:TensorFlow  GPU:NVIDIA

    GeForce GTX 1070
  37. 使用する手法は… DCGAN= Deep Convolutional Generative Adversarial Networks

  38. DCGANの仕組み

  39. DCGANの構成要素  Generator(略:G)  -1.0~+1.0の数値を入力すると、実物 を似せた画像を出力する  Discriminator(略:D)  画像を読み込み、実物かどうか判定する

     出力は0~1.0の確率  読み込んだ画像が実物である確率
  40. 40 •DCGANの仕組みの図 D G 画 像 数 値 画像を生成 (出力:配列)

    D(x) 入力画像が 実物である確率(0~1.0) Discriminator Generator -1.0 ~ 1.0
  41. Generatorの 構造

  42. 42 •Generator:画像を創造する Radford et al. (2015) より引用 -1.0~1.0の数値を 入力すると… 画像を創造する!

    段階的に 大きな画像に変換され… 数値が小さな 画像になり…
  43. Discriminatorの 構造

  44. 44 •Discriminator:画像を判定する Raymond Yeh (2016) より引用 画像を入力 すると… 判定する! (0~1.0の値)

    =実物である確率 画像の特徴を 要約してゆく
  45. DCGANの実装 (抜粋) こんなコードで動いています

  46. 46 •Discriminatorの実装 [参考] https://github.com/carpedm20/DCGAN-tensorflow def discriminator(self, image, reuse=False): with tf.variable_scope("discriminator")

    as scope: if reuse: scope.reuse_variables() h0 = lrelu(conv2d(image, self.df_dim, name='d_h0_conv')) h1 = lrelu(self.d_bn1(conv2d(h0, self.df_dim*2, name='d_h1_conv'))) h2 = lrelu(self.d_bn2(conv2d(h1, self.df_dim*4, name='d_h2_conv'))) h3 = lrelu(self.d_bn3(conv2d(h2, self.df_dim*8, name='d_h3_conv'))) h4 = linear(tf.reshape(h3, [self.batch_size, -1]), 1, 'd_h3_lin') return tf.nn.sigmoid(h4), h4 画像データ(配列) 判定結果(=確率:0~1.0)
  47. 47 •Generatorの実装 [参考] https://github.com/carpedm20/DCGAN-tensorflow def generator(self, z): with tf.variable_scope(“generator”) as

    scope: s_h, s_w = self.output_height, self.output_width s_h2, s_w2 = conv_out_size_same(s_h, 2), conv_out_size_same(s_w, 2) s_h4, s_w4 = conv_out_size_same(s_h2, 2), conv_out_size_same(s_w2, 2) s_h8, s_w8 = conv_out_size_same(s_h4, 2), conv_out_size_same(s_w4, 2) s_h16, s_w16 = conv_out_size_same(s_h8, 2), conv_out_size_same(s_w8, 2) ・・・中略・・・ h4, self.h4_w, self.h4_b = deconv2d( h3, [self.batch_size, s_h, s_w, self.c_dim], name='g_h4', with_w=True) return tf.nn.tanh(h4) ノイズベクトル 生成された画像
  48. 48 •Train(学習処理)の実装 def train(self, config): data = glob(os.path.join("./data", config.dataset, self.input_fname_pattern))

    d_optim = tf.train.AdamOptimizer(config.learning_rate, beta1=config.beta1) ¥ .minimize(self.d_loss, var_list=self.d_vars) g_optim = tf.train.AdamOptimizer(config.learning_rate, beta1=config.beta1) ¥ .minimize(self.g_loss, var_list=self.g_vars) ・・・中略・・・ _, summary_str = self.sess.run([d_optim, self.d_sum], feed_dict={ self.inputs: batch_images, self.z: batch_z }) self.writer.add_summary(summary_str, counter) _, summary_str = self.sess.run([g_optim, self.g_sum], feed_dict={ self.z: batch_z }) self.writer.add_summary(summary_str, counter) [参考] https://github.com/carpedm20/DCGAN-tensorflow Discriminatorの最適化処理の定義 Generatorの最適化処理の定義 Discriminatorの最適化 Generatorの最適化
  49. DCGANに 学習させるデータ

  50. 50 •学習データ  外国為替市場・ドル円相場の値動き  2001年1月1日~2015年12月31日  1つのチャート=100日分の値動き  全部で約3700枚のチャート

     各チャートの仕様  サイズ=100 × 100 px、PNG画像  横1px = 1日、縦1px=0.5%の値動き  各日の終値をプロット
  51. Sample:アベノミクス相場 始まった頃のチャート (2012年9月~2013年1月) …こんな感じです

  52. 52 2012.09.06,78.39700,79.01700,78.37300,78.86500,44305,0 2012.09.07,78.86400,79.01300,78.01100,78.23700,47756,0 2012.09.10,78.24600,78.32400,78.18000,78.26000,33419,0 2012.09.11,78.26000,78.26700,77.69600,77.79600,42421,0 2012.09.12,77.79600,77.95900,77.73400,77.83200,50431,0 2012.09.13,77.83400,77.86400,77.13500,77.48300,52831,0 2012.09.14,77.48000,78.38700,77.48000,78.38300,57885,0 2012.09.17,78.35500,78.91800,78.16000,78.71800,47303,0 ・・・中略・・・

    2013.01.16,88.81800,88.84900,87.79000,88.56800,111439,0 2013.01.17,88.56700,90.10500,88.12900,89.95300,120314,0 2013.01.18,89.95200,90.18200,89.63200,90.08300,105490,0 2013.01.21,90.14800,90.22800,89.33600,89.81300,91509,0 2013.01.22,89.81400,90.11800,88.36400,88.75200,117091,0 2013.01.23,88.75100,88.78900,88.05600,88.53800,106533,0 2013.01.24,88.53500,90.53100,88.41600,90.42000,111112,0 2013.01.25,90.42200,91.19200,90.28500,90.87700,106284,0 このような数値の羅列 (=時系列データ)が...
  53. 53 こうなります! 100px 100px ±0% +12.5% +25.0% -12.5% -25.0% 変

    化 率 50日 100日 経過日数 アベノミクス相場 スタート!
  54. このようなチャートの画像を 約3700枚 AI(DCGAN)に学習させます

  55. それでは 実験開始!

  56. 実験1/ 外国為替市場(ドル円)の チャートを自動生成させる

  57. デモンストレーション チャートの自動生成

  58. 一度に8x8=64枚ずつ生成 さまざまなチャートが生成される様子 を見ることが可能 学習するほどチャートの形が 良くなる様子をご覧ください

  59. デモンストレーション中

  60. 実験結果

  61. 約3700枚のチャートを学 習させた後、 Generator が実物をまねて 創造したチャートがこちら です

  62. 62 •Generatorが創造したチャート(抜粋) ±0% +12.5% +25.0% -12.5% -25.0% 50日 100日 経過日数

    変 化 率 ±0% +12.5% +25.0% -12.5% -25.0% 変 化 率 50日 100日 経過日数 ※ノイズ補正処理を実施しています。
  63. Good! 自然な形のチャートが 自動生成された!

  64.  大体の値動きの形はOK  あとは細部の形を調整をす れば使えるのではないか  学習効率は良かった  半日もかからなかった 実験結果サマリ

  65. 実験2/ ちゃんとマーケットを 理解しているか確かめる (ニセモノ判定試験)

  66. AIがマーケットの値動きを 学習しているのならば、 実物とニセモノを見分ける ことができるはず!

  67. ニセモノのチャートを AI(DCGAN)に与えて、 ちゃんと見分けることが できるかテストをする!

  68. まず、ニセモノのチャートを プログラムで作る Not 人工知能!!

  69. 69 •プログラムで作ったチャート(抜粋)

  70. テスト方法

  71. 71 •Discriminatorの判定能力をテストする D 画 像 D(x) 入力画像が 実物である確率 Discriminator 入力した画像がニセモノであれば、

    Discriminatorの出力は0に近くなる はずである! 実物 :1.0 に近い ニセモノ:0 に近い
  72. 72 •テストの判定基準 Discriminatorの判定結果の 交差エントロピー ニセモノほど 大きな値になる 実物チャート 0.06未満 上記エントロピー値の範囲 と比較して実物/ニセモノ

    判定
  73. 判定試験 ニセモノのチャート画像(50枚)と 学習から外した実物チャート画像 (50枚、ランダム選択)を Discriminatorに与えて 交差エントロピーを計算させます

  74. 判定結果

  75. 75  実物チャートの識別  正解率:約98%(※)  ニセモノチャートの識別  50枚中50枚全て正解 深層学習

    (CNN:畳み込みネットワーク) の本領発揮 ※100回実施して得られた正解率の平均値
  76. Good! マーケットの値動きを ちゃんと理解していた!

  77. せっかくなので… ちょっと難易度を 上げてみる

  78. 人間でさえ ニセモノを見分けるのに 苦労する精巧なチャート を試す! Generatorでは ないです

  79. 精巧なチャートを 作ってみた by モンテカルロシミュレーション

  80. 80 •モンテカルロシミュレーションで生成し たニセモノのチャート ぱっと見て、ニセモノか本物か 区別できますか? 実物 ニセモノ

  81. 81 •モンテカルロシミュレーション 2001年~2015年12月31日 ドル円の変化率の分布を計算 正規分布と仮定してモンテカルロシミュ レーション 平均 -0.0008% 標準偏差 0.6381%

  82. モンテカルロシミュレーションで 生成したチャート画像(30枚)と、 学習から外した実物チャート画像 (30枚、ランダム選択)を Discriminatorに与えて 交差エントロピーを計算させます

  83. 果たして その結果は…

  84. 84  実物チャートの識別  正解率:約97%(※)  ニセモノチャートの識別  30枚中30枚全て正解 CNN恐るべし!

    人間を超えている! ※100回実施して得られた正解率の平均値
  85. Excellent! あれほど紛らわしい チャートを見事に見破った!

  86. まとめ

  87. 87 •シミュレーション能力 自然な値動きをほぼ再現 資産運用AIのトレーニングデータとして使 えるのではないか 資産運用AIの見通し 大量のシミュレーションを実施し、訓練す ることで性能を高めることが可能だろう 深層学習で 資産運用AIをレベルアップ!

  88. 88 •資産運用AIの育成ビジョン 多種多様なシチュエーションを再現 過酷なマーケットを生き延びる能力のトレ ーニング 数百年とか数千年分シミュレーションし、 生き抜いた資産運用AIを採用する…など

  89. Next Mission will be… 新シミュレーションを活用し 最強の資産運用AIの 育成に挑戦したい!

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