Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
深層学習は金融市場をシミュレーションすることができるか?
Search
GMO次世代
May 16, 2017
Technology
1
5.9k
深層学習は金融市場をシミュレーションすることができるか?
2017年5月11日 GMOエンジニアトークにて公開
GMO次世代
May 16, 2017
Tweet
Share
More Decks by GMO次世代
See All by GMO次世代
ソース公開を通じて分かった非中央集権型アプリケーション(DApp)とは
jisedai
0
4k
AppleのARkitとGoogleの最新のARプラットフォーム ARCore 可能性と応用
jisedai
2
1.2k
IoT領域でのブロックチェーン実践
jisedai
1
1.7k
モバイルAR技術の最先端 Google Tangoを活用してバーチャル道案内スタッフを実現してみた
jisedai
1
1.2k
Unity3DとOculus Riftで VR空間にWebコンテンツを表現する
jisedai
0
1.4k
ブロックチェーンを利用したサービス開発について
jisedai
1
1.1k
Deep Learningによる株価変動の予想
jisedai
0
1.6k
Other Decks in Technology
See All in Technology
kube-vipとkube-proxy置き換えCiliumを積んだ究極のK3sクラスタを建てる
logica0419
4
220
Oracle Database 23ai 新機能#4 Application Continuity
oracle4engineer
PRO
0
120
LINE-ChatGPT 倫理問題を整理する全力肯定彼氏くん [LuC4]に訪れたサービス開始以来の最大の危機
o_ob
2
160
Oracle Database 23ai 新機能#4 Rolling Maintenance
oracle4engineer
PRO
0
130
Graph Database と Generative AI の素敵な関係
oracle4engineer
PRO
6
650
業務ヒアリングと知識の呪い
tamai_63
0
290
Slackbot × RAG で実現する社内情報検索の最適化
howdy39
2
340
スタサプ ForSCHOOLアプリのシンプルな設計
recruitengineers
PRO
3
620
CData Virtuality 日本ローンチイベントのKeynote
cdataj
0
230
Efficient zero-copy networking using io_uring
ennael
PRO
0
370
Oracle GoldenGate 23ai 導入Tips
oracle4engineer
PRO
1
280
DenoでもViteしたい!インポートパスのエイリアスを指定してラクラクアプリ開発
bengo4com
2
2k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
26
3.4k
Building Applications with DynamoDB
mza
90
6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
Learning to Love Humans: Emotional Interface Design
aarron
272
40k
Bash Introduction
62gerente
608
210k
Code Reviewing Like a Champion
maltzj
519
39k
Designing Experiences People Love
moore
138
23k
The Pragmatic Product Professional
lauravandoore
31
6.2k
Faster Mobile Websites
deanohume
304
30k
Facilitating Awesome Meetings
lara
49
6k
The Cost Of JavaScript in 2023
addyosmani
43
5.9k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Transcript
深層学習は金融市場を シミュレーションできるか? 〜 GAN(Generative Adversarial Networks)を応用した マーケットのシミュレーションへの挑戦〜 GMOインターネット 次世代システム研究室
2 目次: 1. Introduction 2. GAN(Generative Adversarial Networks)とは 3. 実験計画
4. 実験 5. まとめ
Introduction
4 突然ですが質問です。 あなたはマネーが好きですか?
5 突然ですが質問です。 あなたはマネーが好きですか? (正直に)
マネーを増やす代表的手段 「資産運用」 その資産運用の分野で、 AIが劇的な変化をもたらして います。
出展:Bloomberg/How a $26 Billion Hedge Fund Lures the Beautiful Minds
AIを使ったヘッジファンド だけ利益を上げている 伝統的手法のヘッジファンドは 大きな損失を被っている 2016年:ヘッジファンド業界の明暗 黒字 赤字
AIを成長させるのは シミュレーション(仮想訓練)! シミュレーション環境の整備 は強いAIの開発に必須!
シミュレーションがAIを 強くする・・・ 有名な囲碁AIが 世界を驚かせましたね!
Alpha Go(アルファ碁) Alpha Go(アルファ碁)は、膨大なシ ミュレーション(=仮想対局)を繰り 返した結果、人類最強イ・セドル9段 を4勝1敗で打ち破った。
金融分野の Alpha Go(アルファ碁)を 目指す!
最終目標 どんな過酷なマーケットでも 生き残る資産運用AIを 育てる!
今回の発表はその一里塚 新しい金融市場のシミュレー ション法を開発し、 資産運用AIを鍛える環境を 構築する!
従来の金融分野の シミュレーション法
15 従来のシミュレーション法 ヒストリカルシミュレーション法 モンテカルロシミュレーション法 ほとんどの場合、 こっちを使う
16 ヒストリカルシミュレーション法 過去のマーケットの値動きをそのまま持ってくる バックテスト(AIの性能検証)に使われるのはこれ [Good!]再現性は確実! 処理も簡単!
[Bad!]過去に起きた値動き以外を学ぶことができない
17 モンテカルロシミュレーション法 … 統計を使って、それっぽい値動きを再現 [Good!]さまざまな値動きパターンを再現し、学習 させることができる [Bad!]実際とは違う値動きを再現してしまうこと
がある!
従来の方法の課題
19 •従来法の課題 過去に起きた値動きしか再現できない 実際とは異なる値動きをしてしまう 囲碁、将棋と比べて トレーニングデータ量が かなり少なくなってしまう!
そこで・・・ 新シミュレーション法で解決 を図る! →革新的な深層学習の手法GAN で「冒険的」挑戦! →GAN(Generative Adversarial Networks)=生成的対立ネットワーク
GANの何が革新的なのか・・・ これまでのAIでは不可能だっ た「創造する」処理を 実現したこと!
デモンストレーション AIが人間の「顔」を創造!
デモンストレーション概要: 約23万枚の顔写真を インプットして、 新しい顔写真を創造します
デモンストレーション中
25 絵画や写真、イラストを創造できるAI、 それが… GANならば新しい方法を 実現できるのではないか? 深層学習の新技術 GAN(Generative Adversarial Networks) 生成的対立
ネットワーク これまでのAIの 常識を覆す!
GAN(Generative Adversarial Networks) の特徴
2つのAIが競い合って学習する 判別する側 Discriminator 創造する側 Generator 本物を真似た画像 を創造する 真贋を見抜く
GANの利点… 人間が手間を掛けずとも、 勝手にレベルアップしてくれる 画像を創造する能力 真贋を鑑定する能力
GANを使って、革新的なシミュ レーション法を実現する! 「視覚的」アプローチによる 前代未聞のシミュレーション法!
実験目標
31 •実験目標 外国為替市場の値動きを GANに学習させて、 自然な値動きを 無尽蔵に創造する!
Why… 外国為替市場の値動きを シミュレーションするのか? Because… 外国為替市場の値動きは 金融市場の今を映す鏡!
実験概要
34 •実験概要 外国為替市場(ドル円)の チャートを自動生成させる ちゃんとマーケットを理解しているか 確かめる(=ニセモノ判定試験) GANを使って・・・ トランプ相場で 大賑わい
実験環境
36 •実験環境 言語:Python , version3.5 深層学習フレームワーク:TensorFlow GPU:NVIDIA
GeForce GTX 1070
使用する手法は… DCGAN= Deep Convolutional Generative Adversarial Networks
DCGANの仕組み
DCGANの構成要素 Generator(略:G) -1.0~+1.0の数値を入力すると、実物 を似せた画像を出力する Discriminator(略:D) 画像を読み込み、実物かどうか判定する
出力は0~1.0の確率 読み込んだ画像が実物である確率
40 •DCGANの仕組みの図 D G 画 像 数 値 画像を生成 (出力:配列)
D(x) 入力画像が 実物である確率(0~1.0) Discriminator Generator -1.0 ~ 1.0
Generatorの 構造
42 •Generator:画像を創造する Radford et al. (2015) より引用 -1.0~1.0の数値を 入力すると… 画像を創造する!
段階的に 大きな画像に変換され… 数値が小さな 画像になり…
Discriminatorの 構造
44 •Discriminator:画像を判定する Raymond Yeh (2016) より引用 画像を入力 すると… 判定する! (0~1.0の値)
=実物である確率 画像の特徴を 要約してゆく
DCGANの実装 (抜粋) こんなコードで動いています
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 •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 •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の最適化
DCGANに 学習させるデータ
50 •学習データ 外国為替市場・ドル円相場の値動き 2001年1月1日~2015年12月31日 1つのチャート=100日分の値動き 全部で約3700枚のチャート
各チャートの仕様 サイズ=100 × 100 px、PNG画像 横1px = 1日、縦1px=0.5%の値動き 各日の終値をプロット
Sample:アベノミクス相場 始まった頃のチャート (2012年9月~2013年1月) …こんな感じです
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 こうなります! 100px 100px ±0% +12.5% +25.0% -12.5% -25.0% 変
化 率 50日 100日 経過日数 アベノミクス相場 スタート!
このようなチャートの画像を 約3700枚 AI(DCGAN)に学習させます
それでは 実験開始!
実験1/ 外国為替市場(ドル円)の チャートを自動生成させる
デモンストレーション チャートの自動生成
一度に8x8=64枚ずつ生成 さまざまなチャートが生成される様子 を見ることが可能 学習するほどチャートの形が 良くなる様子をご覧ください
デモンストレーション中
実験結果
約3700枚のチャートを学 習させた後、 Generator が実物をまねて 創造したチャートがこちら です
62 •Generatorが創造したチャート(抜粋) ±0% +12.5% +25.0% -12.5% -25.0% 50日 100日 経過日数
変 化 率 ±0% +12.5% +25.0% -12.5% -25.0% 変 化 率 50日 100日 経過日数 ※ノイズ補正処理を実施しています。
Good! 自然な形のチャートが 自動生成された!
大体の値動きの形はOK あとは細部の形を調整をす れば使えるのではないか 学習効率は良かった 半日もかからなかった 実験結果サマリ
実験2/ ちゃんとマーケットを 理解しているか確かめる (ニセモノ判定試験)
AIがマーケットの値動きを 学習しているのならば、 実物とニセモノを見分ける ことができるはず!
ニセモノのチャートを AI(DCGAN)に与えて、 ちゃんと見分けることが できるかテストをする!
まず、ニセモノのチャートを プログラムで作る Not 人工知能!!
69 •プログラムで作ったチャート(抜粋)
テスト方法
71 •Discriminatorの判定能力をテストする D 画 像 D(x) 入力画像が 実物である確率 Discriminator 入力した画像がニセモノであれば、
Discriminatorの出力は0に近くなる はずである! 実物 :1.0 に近い ニセモノ:0 に近い
72 •テストの判定基準 Discriminatorの判定結果の 交差エントロピー ニセモノほど 大きな値になる 実物チャート 0.06未満 上記エントロピー値の範囲 と比較して実物/ニセモノ
判定
判定試験 ニセモノのチャート画像(50枚)と 学習から外した実物チャート画像 (50枚、ランダム選択)を Discriminatorに与えて 交差エントロピーを計算させます
判定結果
75 実物チャートの識別 正解率:約98%(※) ニセモノチャートの識別 50枚中50枚全て正解 深層学習
(CNN:畳み込みネットワーク) の本領発揮 ※100回実施して得られた正解率の平均値
Good! マーケットの値動きを ちゃんと理解していた!
せっかくなので… ちょっと難易度を 上げてみる
人間でさえ ニセモノを見分けるのに 苦労する精巧なチャート を試す! Generatorでは ないです
精巧なチャートを 作ってみた by モンテカルロシミュレーション
80 •モンテカルロシミュレーションで生成し たニセモノのチャート ぱっと見て、ニセモノか本物か 区別できますか? 実物 ニセモノ
81 •モンテカルロシミュレーション 2001年~2015年12月31日 ドル円の変化率の分布を計算 正規分布と仮定してモンテカルロシミュ レーション 平均 -0.0008% 標準偏差 0.6381%
モンテカルロシミュレーションで 生成したチャート画像(30枚)と、 学習から外した実物チャート画像 (30枚、ランダム選択)を Discriminatorに与えて 交差エントロピーを計算させます
果たして その結果は…
84 実物チャートの識別 正解率:約97%(※) ニセモノチャートの識別 30枚中30枚全て正解 CNN恐るべし!
人間を超えている! ※100回実施して得られた正解率の平均値
Excellent! あれほど紛らわしい チャートを見事に見破った!
まとめ
87 •シミュレーション能力 自然な値動きをほぼ再現 資産運用AIのトレーニングデータとして使 えるのではないか 資産運用AIの見通し 大量のシミュレーションを実施し、訓練す ることで性能を高めることが可能だろう 深層学習で 資産運用AIをレベルアップ!
88 •資産運用AIの育成ビジョン 多種多様なシチュエーションを再現 過酷なマーケットを生き延びる能力のトレ ーニング 数百年とか数千年分シミュレーションし、 生き抜いた資産運用AIを採用する…など
Next Mission will be… 新シミュレーションを活用し 最強の資産運用AIの 育成に挑戦したい!
ご清聴ありがとう ございました