カニカニクラブライフ

Python系技術メモ、書評とか

わからないLSTM 〜最近の機械学習はホントどうかしてる

仕事で時系列データから何か答えを出せたらいいよね的な話題があって、欲をぶっかいて深層学習を使ってやろう、そしてTensorFlowにてLSTM*1を使おうと企んでる訳です。

タイトルは特に意味はなく、わかるLSTM ~ 最近の動向と共に - Qiitaに対する勝手なアンサーソングです。

ネットで集められる情報を集めたというだけの自分用メモで、おそらくあなたにとって有用な情報は書いていません。また、随時メモを追記する予定です。



LSTMとは? に関する記事

わかるLSTM ~ 最近の動向と共に - Qiita

・LSTMの歴史的経緯から言及し、日本語で書かれた記事の中でおそらく最も詳細に仕組みを解説。数式で書き下しもしている。

・LSTMには4つのバージョンが存在している。そしてchainerがどのバージョンなのかについて言及。

誤差逆伝播時の図解もあるのは、珍しい。

テンソルの書き方や英字にアレルギーのある人*2、そもそもLSTMって何?って人向けではない。

・汎用コンピュータとしても研究されている話、面白い( ͡° ͜ʖ ͡°)

今更聞けないLSTMの基本 - HELLO CYBERNETICS

・仕組みについてわかりやすく解説。図多し。

LSTMネットワークの概要 - Qiita

・Christopher Olahという人の個人ブログ記事の翻訳。仕組みについて解説。

・基礎的な話が頭に入っており、翻訳文体にアレルギーがなければ、おそらく一番わかりやすくて正確。

・分量がちょうどよく図も多い。


疑問など
  • LSTM層(LSTMブロック)、複数あっていいらしいけど、どう積み上がるかよくわからない。
  • 確かにいくつかバージョンがある。自分がパッケージを使うときはそれがどれなのか把握しなければおそらく学習に再現性を持たせられない(そして、中身がわからないと、どれなのか把握できない)。

LSTMの図解、めっちゃある問題

集めてみた。

①より
https://qiita-image-store.s3.amazonaws.com/0/60969/485f634d-9bd2-2ee3-99b2-09694e831f55.png


TensorFlowのRNNを基本的なモデルで試す - Qiitaより
https://qiita-image-store.s3.amazonaws.com/0/59864/64a92d49-fdef-609f-d95b-c522e72372f4.png

②より
https://cdn-ak.f.st-hatena.com/images/fotolife/s/s0sem0y/20170506/20170506164912.png

https://cdn-ak.f.st-hatena.com/images/fotolife/s/s0sem0y/20170506/20170506172239.png

③より
http://colah.github.io/posts/2015-08-Understanding-LSTMs/img/LSTM3-chain.png
http://colah.github.io/posts/2015-08-Understanding-LSTMs/img/LSTM2-notation.png


めっちゃある(そして微妙に違うよね?困る)。






TensorFlow等でLSTMネットワークを作るコードが載ってる記事

TensorFlowチュートリアル - リカレント・ニューラルネットワーク(翻訳) - Qiita

・TensorFlow のチュートリアル(Recurrent Neural Networks)の翻訳。コードの意味についても詳しく書いてある。

・データが言語のデータセットだからよくわからん部分も多い。入力はもちろん実数になってるっぽいけど。

TensorFlow-Book/Concept02_rnn.ipynb at master · BinRoot/TensorFlow-Book · GitHub


これが今見つけた中で、実数のデータを入れて回帰するLSTMの書き方の中で最も簡単か?と思うので写経しながら学ぼうと思う

Machine Learning with TensorFlowという本の第10章に記載されているものらしい。挿絵がクール。

その他

Keras やTFlearn にて、TensorFlow をラッパーから使ってLSTMを使う記事が多い(そして簡単)。

だが、LSTMのバージョンいくつかあるし、よくわからんまま使って上手くいかないとどうしようもないので、最初ぐらいの素のTensorFlowを触ろう。


理解につまづいたらこれを読む予定

神ブログHELLO CYBERNETICSの本当の初心者用の記事3選。おそらくこの続きは今度も公開される。

【本当の初心者向け】ニューラルネットとTensorFlow入門のためのオリジナルチュートリアル1 - HELLO CYBERNETICS

テンソル表記のおさらい、TensorFlowの基本的な書き方の解説

・アフィン層、活性化関数をPythonで書いて順伝播するところまで。

【学習を実行】ニューラルネットとTensorFlow入門のためのオリジナルチュートリアル2 - HELLO CYBERNETICS

・ミニバッチ学習と学習のリアルタイム可視化について。

                                                                                                                                                                                                                                                                                          • -

2017/12/29 身も蓋もない追記

結局これを買ったら、めっちゃわかりました。

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

通常のシンプルなRNNから、どう進化していくのかわかりやすく解説してくれています。コードも乗っているし、つまづきがちなコーディングについての解説もあります。

そもそもDNNについても、シンプルなNNから追っていってわかるようになっています。

そして下記の疑問の解決。

・LSTM層は、1つの時間方向に複数個が積み上がるわけじゃない(うまく言葉で表せられない感。要はシンプルなRNNを1個のCELLとして捉えたときに、変数の流れを色々いじって賢くした感じ。もしかしたら発展的な者では複数積み上げるのかもしれないけど、ベーシックなものはとりあえず1個だけ)

・図たくさんあるけど、言ってることは一緒。

・覗き穴(peep hole)は、計算に時間がかかる割に効果が少ない(って書いてあった)。実装の有無はリファレンスに書いてあるよ、とのこと。

*1:Long Short Term Memory ネットワーク。リカレントニューラルネットワークの派生にして代表。現況、畳み込みニューラルネットワークに並び深層学習ブームの双璧をなす(適当)。

*2:そもそもそんな俺みたいな人は読まない説 is 悲しい