こんにちはー。管理人のピヨ猫でーす。
機械学習を使って予測がしたくてSONY Neural Network Consoleでディープラーニングの連続データ分析にチャレンジしているんだけど、精度が全然でないんだよねーー。 何とかならないかなー。
連続データの解析には高精度のLSTMというモデルがあるよ。SONY Neural Network ConsoleではLSTMのユニットが用意されていているから簡単にLSTMを実装できるよ。詳しく解説するね。
1.LSTM(Long short Term Memory)とは
LSTM(Long short Term Memory)とは
LSTMは1997年にゼップ・ホッフライターとユルゲン・シュミットフーバーによって提唱された連続データ解析を行う機械学習のモデルです。
LSTM以前に合った連続データの解析モデルのRNNには勾配爆発および勾配消失問題があり長い期間の連続データの解析が出来ませんでしたが、LSTMはConstant Error Carousel(CEC)ユニットの導入とその後の数回の改善によって勾配消失問題を解決し、長い期間の連続データの解析を実現しています。
LSTMは機械学習による連続データの解析において、現在最も使われているモデルの一つになります。
https://syuuai.hatenablog.com/entry/2019/04/20/010415
連続データの解析とは何か?
当記事では連続データをLSTMを用いて回帰分析する方法を紹介しますが、そもそも連続データってなに? 回帰ってなに? という場合は、まずはこちらの記事を読んで頂くことをお薦めします。
回帰分析の手法(LSTM、RNN以外とLSTM、RNNの違いについて)
LSTM、RNNを用いない回帰分析
xに何らかの関係があるyの値を予想したいとします。
この場合、y = f(x)となる近似曲線f(x) を導きだすことで、未知のxに対してもyを求めることが出来ます。
◆ f(x)のサンプル1
◆ f(x)のサンプル2
機械学習モデル(AI)はyとxのデータセットを渡すことで、どのデータセットでも成り立つf(x)を導きます。やり方は以下の記事を参照してください。
RNN (Recurrent Neural Network)
RNN (Recurrent Neural Network)を用いない回帰分析でも回帰分析は出来ます。
しかし、前述ののサンプル1は精度の高い結果が期待できますが、サンプル2はRNNを用いないと高い精度が出ません。
実は、サンプル1のxとyの関係は、y=x^2 * 1/2 + 10 となり、xの値が決まればyが決まります。
しかし、サンプル2のxとyの関係は、になり、実はyがxだけに依存しません。yを求めるために過去のyの値も必要になります。y=f(x)ではなく、
だったということです。
少しずるい気もしますが世の中のデータは現在の値だけで結果が決まりません。
ここでRNNの登場になります。今まで紹介した方法だとy=f(x)は解けても、が解けません。
しかし、RNNを用いることでも解くことが出来ます。
何故RNNでが解けるかというと、RNNは過去の出力結果を入力データとしても使うためです。
RNNの場合、入力データがxのみでなく過去のxも入力データとなります。
入力データに過去のxもあるため、過去のyも導けます。そのため、前述のも解けることになります。
◆ RNNの構造
RNNの場合、入力データがxのみでなく過去のxも入力データとなります。
LSTM(Long Short term memory)
複雑な連続データの解析も出来るRNNですが、一つ大きな問題があります。
それは、RNNは層を増やすと勾配爆発および勾配消失を起こすため層を増やせず、複雑な問題を解くことが出来ないのです。
勾配爆発および勾配消失はこちら↓↓↓
http://nnadl-ja.github.io/nnadl_site_ja/chap5.html
LSTMはCECセル、入力ゲート、出力ゲート、忘却ゲートを設けてRNNの問題点である勾配消失を解消(軽減し)し、複雑な連続データの解析を可能としたものです。
https://qiita.com/t_Signull/items/21b82be280b46f467d1b
2.SONY Neural Network Consoleとは
今回、回帰を試すにあたり、SONY Neural Network Consoleを用いますので、簡単にSONY Neural Network Consoleを紹介します。
SONY Neural Network Consoleは、SONY製の機械学習オープンソースNNabla(Neural Network Libraries)の統合開発環境です。機械学習の開発環境としてはGoogleのTensorFlowが有名どころですが、NNabla/NNCはTnesorFlowと比べ開発環境が視覚的で初心者には分かり易いところに一日の長があります。2017年11月にβ版が公開され、2018年5月に正式サービス化されました。
詳しくはこちらの記事を参照ください。
3.SONY Neural Network ConsoleでLSTMを行う方法
① データを用意する
データセットの構成イメージ
◆ 訓練データ
◆ テストデータ
データセット
◆ 1つのデータセット()
◆ 訓練データ()
◆ テストデータ()
② データセットをNeural Network Consoleに登録する
データセットの設定方法は以下の記事を参照ください。
③ 学習モデルを作成する
LSTMの学習モデルを作成します。
SONY Neural Network ConsoleにはLSTMユニットが用意されているので簡単に学習モデルを作成できます。
具体的には新規プロジェクトを作成し、INPUTレイヤー、LSTMレイヤー、Affineレイヤー、SquaredErrorレイヤーを繋げて作成完了です。
INPUTレイヤーのサイズは、履歴数(600)×特徴量の数(2 = x変数とy変数の2個)を格納するので、(600, 2)とします。
LSTMレイヤーは(600, 2)を再帰的にため込むので、(600, 2)より大きいサイズを指定します。今回は(600, 100)としました。
AffineレイヤーはLSTMの結果を全結合してyの予想値を作りますので、OUTPUT数は1に設定します。
④ 実行 ⇒ 結果の確認する
かなり高い精度で近似できています。
縦棒線の右側はAIにとっては未知のデータですが、未知のデータに対しても高い精度で予想できています。
4.non-LSTMとLSTMの比較
前節で述べた、
- y=x^2 * 1/2 + 10・・・ サンプル1
・・・ サンプル2
に対し、LSTMを使わない場合と使った場合でそれぞれ学習してみました。
サンプル1(y=x^2 * 1/2 + 10 ) non-LSTM
サンプル1(y=x^2 * 1/2 + 10 ) LSTM
サンプル2(
) non-LSTM
実際のデータは階段型ですが、予想は線形近似となってしまっています。
線形近似としては正解ですが・・・。
サンプル2(
) LSTM
予想結果も階段型になっています。yの値が飛んでいるところを除けば完璧な近似です。
比較結果
連続データがy=f(x)で表せる場合は、non-LSTMもLSTMも高精度で近似が出来ています。
しかし、連続データがy=f(x)では表せない場合は、non-LSTMだとy=f(x)で無理やり近似していました。
LSTMの場合は連続データがy=f(x)で表せない場合も、高い精度で近似が出来ており未知のデータに対しても予想が出来ていました。
今回はサンプルなので連続データの法則が難しくないということもありますが、LSTMの効果が大きいことが分かりました。やはり連続データの回帰を行うならLSTMが良さそうです。(⌒-⌒)
GIT HUB
サンプルデータとモデルをGITに格納したので良ければご利用下さい。
https://github.com/shibayu2002/mlsample
![]() |
【送料無料】 ソニー開発のNeural Network Console入門 増補改訂・クラウド対応版--数式なし、コーディングなしのディープラーニング / 足立悠 【本】 価格:2,592円 |
それでは、少しでもこの記事がお役にたったら嬉しいです。