2016年8月、自動売買を始めて半年ほどたった頃、売買判断を人工知能(AI)にさせてはどうかと考えた。
その頃は、運用する売買ロジックを増やしていこうと、いろいろバックテストをしていた頃だ。
複数の売買ロジックを運用していたが、ブラックボックスのようなものも1つぐらいあってもいいのではないか、と考えた。
それに、AIには以前から興味があった。
近隣の図書館の人工知能本(ただし平易なもの)は読破していた。
どんなことでもそうだと思うが、深く知るには、実際に試してみることが一番だろう。
それも、自分にとってモチベーションの上がる分野で。
AIが猫の写真を判別したところで、すごい事だとは思うが、自分にとってモチベーションは上がらない。
手書き文字を判別したところで、しかり。
しかし、AIが売買判断をしてくれるとなると、俄然モチベーションが上がる。
AIにとって、トレードはいい題材だ。
ということで、ディープラーニングに挑戦してみた。
昨今のAIブームの立役者となっているのが、ディープラーニング。
ディープラーニングは機械学習の1分野。
人間の脳の中の神経細胞のネットワークを模したモデルを用いて、コンピュータに学習させる技術だ。
そして、ディープラーニングにもいろんな手法(モデル)がある。
CNN、DBN、RNN・・・なぜかアルファベット3文字のものが多い。
中には、DQNって別の意味に誤解されそうなものもある。
これらに共通して言えることがある。
プログラムを組む気が失せてしまうくらい、ややこしい。
遺伝的アルゴリズム(GA)は自分でプログラムを組んだのだが・・・
こういうときにはライブラリを使えば良い。
ライブラリとは、平たく言えば、出来合いのプログラム集。
所定のお作法に則り、自分のプログラムからライブラリの中の必要なプログラムを呼び出し、結果を返してもらう。
といった使い方をする。
ディープラーニング用のライブラリはPython(パイソン)というプログラミング言語で使用するものが充実しているようだ。
しかし、自作システムのプログラミング言語はC#。
C#で使えるものを探したら、あった、「Accord.NET」。
これは、機械学習のライブラリ。
ディープラーニング関連では、DBN(Deep Belief Networks)という手法が用意されている。
Accord.Netをインストールし、まずは、初歩的な学習である「XOR(排他的論理和)」でお作法を学ぶ。
詳細は割愛するが、ディープラーニングにおける「XOR」は、プログラミングにおける「Hello world」、ラズパイにおける「Lチカ」のようなもの。
XORは問題なく学習できた。
次は、いよいよトレードに適用することを考える。
作業の流れは、こうなる。
- AIをどう使うか?を考える。
つまり、AIに対し、どのタイミングで、何を与え、何を答えさせるのか?を考える。 - 学習データを準備する。
- 学習させる。
- フォワードテストを実施し、使えそうか判断する。
- 使えそうなら実践。
このときは、次の使い方を考えた。
- 引け決済を前提とし、所定の時刻に「買い」「売り」「見送り」を判断させる。
- AIに与える情報は、それまでの価格の推移。
なお、他の使い方も試してみたが、割愛する。
さて、結果は、と言うと。
学習が全然収束しない・・・
仕方がないので、入力データを間引いたり、DBNのパラメータをいろいろいじったりしてみた。
それでも、思うように学習が進まない。
学習を途中で打ち切り、フォワードテストをしてみたが、全く優位性が無い。
全く使い物にならなかった・・・
2012年、Google社が猫を認識するAIを開発したとき、学習に使ったマシンは、1000台(16000コア)だったそうだ。
それに比べ、こちらの環境は、開発用PC1台(2コア)だ。
いくら最近のCPUを使っていると言っても、貧弱すぎる。
また、最近では、学習を高速化させるために、GPU(Graphics Processing Unit)を使うのが主流のようだ。
GPUは画像処理用のパーツで、ゲーム用PCなどでは重要視されているもの。
難しい話は割愛するとして、画像処理用に設計されたGPUの構造が、ディープラーニングの学習に適しているそうだ。
そして、CPUを使うよりもはるかに速く学習できるそうだ。
GPUを元々の画像処理用途以外で使うためには、それ用のハード(汎用計算に対応したGPU)を準備することはもちろん必要だが、それ以外にも、ソフトウェア環境(GPUに汎用計算をさせるソフト)も必要となる。
要するに、ディープラーニングのためには、それなりの環境が必要ということだ。
2016年8月、ディープラーニングに挑戦してみた。
結果、ディープラーニングならぬ、チープラーニングとなってしまった・・・