Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Introduction

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

出展:Bloomberg/How a $26 Billion Hedge Fund Lures the Beautiful Minds AIを使ったヘッジファンド だけ利益を上げている 伝統的手法のヘッジファンドは 大きな損失を被っている 2016年:ヘッジファンド業界の明暗 黒字 赤字

Slide 8

Slide 8 text

AIを成長させるのは シミュレーション(仮想訓練)! シミュレーション環境の整備 は強いAIの開発に必須!

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

従来の方法の課題

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

デモンストレーション中

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

GAN(Generative Adversarial Networks) の特徴

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

実験目標

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

実験概要

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

実験環境

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

使用する手法は… DCGAN= Deep Convolutional Generative Adversarial Networks

Slide 38

Slide 38 text

DCGANの仕組み

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

40 ●DCGANの仕組みの図 D G 画 像 数 値 画像を生成 (出力:配列) D(x) 入力画像が 実物である確率(0~1.0) Discriminator Generator -1.0 ~ 1.0

Slide 41

Slide 41 text

Generatorの 構造

Slide 42

Slide 42 text

42 ●Generator:画像を創造する Radford et al. (2015) より引用 -1.0~1.0の数値を 入力すると… 画像を創造する! 段階的に 大きな画像に変換され… 数値が小さな 画像になり…

Slide 43

Slide 43 text

Discriminatorの 構造

Slide 44

Slide 44 text

44 ●Discriminator:画像を判定する Raymond Yeh (2016) より引用 画像を入力 すると… 判定する! (0~1.0の値) =実物である確率 画像の特徴を 要約してゆく

Slide 45

Slide 45 text

DCGANの実装 (抜粋) こんなコードで動いています

Slide 46

Slide 46 text

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)

Slide 47

Slide 47 text

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) ノイズベクトル 生成された画像

Slide 48

Slide 48 text

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の最適化

Slide 49

Slide 49 text

DCGANに 学習させるデータ

Slide 50

Slide 50 text

50 ●学習データ  外国為替市場・ドル円相場の値動き  2001年1月1日~2015年12月31日  1つのチャート=100日分の値動き  全部で約3700枚のチャート  各チャートの仕様  サイズ=100 × 100 px、PNG画像  横1px = 1日、縦1px=0.5%の値動き  各日の終値をプロット

Slide 51

Slide 51 text

Sample:アベノミクス相場 始まった頃のチャート (2012年9月~2013年1月) …こんな感じです

Slide 52

Slide 52 text

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 このような数値の羅列 (=時系列データ)が...

Slide 53

Slide 53 text

53 こうなります! 100px 100px ±0% +12.5% +25.0% -12.5% -25.0% 変 化 率 50日 100日 経過日数 アベノミクス相場 スタート!

Slide 54

Slide 54 text

このようなチャートの画像を 約3700枚 AI(DCGAN)に学習させます

Slide 55

Slide 55 text

それでは 実験開始!

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

デモンストレーション中

Slide 60

Slide 60 text

実験結果

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

62 ●Generatorが創造したチャート(抜粋) ±0% +12.5% +25.0% -12.5% -25.0% 50日 100日 経過日数 変 化 率 ±0% +12.5% +25.0% -12.5% -25.0% 変 化 率 50日 100日 経過日数 ※ノイズ補正処理を実施しています。

Slide 63

Slide 63 text

Good! 自然な形のチャートが 自動生成された!

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

テスト方法

Slide 71

Slide 71 text

71 ●Discriminatorの判定能力をテストする D 画 像 D(x) 入力画像が 実物である確率 Discriminator 入力した画像がニセモノであれば、 Discriminatorの出力は0に近くなる はずである! 実物 :1.0 に近い ニセモノ:0 に近い

Slide 72

Slide 72 text

72 ●テストの判定基準 Discriminatorの判定結果の 交差エントロピー ニセモノほど 大きな値になる 実物チャート 0.06未満 上記エントロピー値の範囲 と比較して実物/ニセモノ 判定

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

判定結果

Slide 75

Slide 75 text

75  実物チャートの識別  正解率:約98%(※)  ニセモノチャートの識別  50枚中50枚全て正解 深層学習 (CNN:畳み込みネットワーク) の本領発揮 ※100回実施して得られた正解率の平均値

Slide 76

Slide 76 text

Good! マーケットの値動きを ちゃんと理解していた!

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

果たして その結果は…

Slide 84

Slide 84 text

84  実物チャートの識別  正解率:約97%(※)  ニセモノチャートの識別  30枚中30枚全て正解 CNN恐るべし! 人間を超えている! ※100回実施して得られた正解率の平均値

Slide 85

Slide 85 text

Excellent! あれほど紛らわしい チャートを見事に見破った!

Slide 86

Slide 86 text

まとめ

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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