<基礎学習>9/13 AutoEncoder - あずにゃん、唯、りんごの特徴量を抽出する

目次

  1. まえがき
  2. 概要
  3. AutoEncoderとは
  4. 今回のテスト
  5. その他

1.まえがき

僕はなぜ株のAIを作ろうと思ったのか?
根本は「AIを勉強する」ことだと思い直しました。

根本の欲求を満たすために、
①AI関連の技術を勉強し実装する(コードの綺麗さ度外視)
②株に当てはめて考えてみる
の流れで、いろんな技術を触ってみようと思います。
ミソは①。とにかくスピード重視、ソースコード汚いの大歓迎で新しいものを触りまくります。
今回は、その第一弾。AutoEncoderを触ってみました。
画像認識のお手伝いの時に教えてもらっていろいろ触っていたのですが、株にも応用してみます。

2.概要

仮説

株価がN%以上UPする前の値動き、N%以上DOWNする前の値動きって何か特徴あるんじゃない?

検証

AutoEncoderを使って、値動きデータを2次元に(むりやり)圧縮してプロット。
N%UPの集団とN%DOWNの点が離れている=特徴あり!

作業フロー

①簡単な実装:唯、あずにゃん、りんごの画像を学習させ、特徴を2次元にプロットする ②本番実装:N%以上UPする前の値動きおよびN%以上DOWNする前の値動きを学習させ、特徴を2次元にプロットする

3.AutoEncoderとは

  • 教師なし学習(教師データは入力層)
  • 入力データを圧縮→正確に復元できるようニューラルネットワークが学習する
  • 入力データを次元圧縮した値が特徴量になる
  • 概念としては機械学習の主成分分析に似てます(たぶん)

4.今回のテスト

今日は、簡単な実装をしてみました。

入力層

f:id:kurupical:20170913224600p:plain:w400
画像9枚を入力データとします。
・内容:りんご3枚、唯3枚、あずにゃん3枚。(本当はもっと取るべきなのですがめんどくさかった)
入力層の次元数は3000000次元です。(画像はプログラム内で1000*1000pxに圧縮するため、縦横で1000000pxです。さらに1pxごとにRGBの値があるため、入力層は10000000×3=3000000次元になります。)

圧縮

今回は2次元に圧縮します(=隠れニューロン数が2)。可視化のため2次元にしていますが、本当はもっと高次元にします。

結果

今回の例でいうと、3000000次元を2次元に圧縮し、3000000次元に復元する。その復元の精度を高めるための学習をするということになります。
上記の学習を行ったネットワークを使って、入力データ(3000000次元)を2次元に圧縮します。 その結果をplotしてみます。

…間違って消してしまったので、再学習させてます。結果はまた明日。

5.その他

ソースコード

以下にAutoEncoderのソース公開しています。
(テスト的に書いたベタ書きソースなので信じられないくらい汚いです)
github.com

所感

とりあえず、迷走するだけしてみようかなと思います。。笑