TensorFlowによる機械学習の勉強は進んでいますか?
少し前に、RNN(実際はLSTM)のチュートリアルで紹介されているプログラムを動かす記事を書きましたが、読んでいただけたでしょうか。
上の記事で少しだけ触れていたLSTMについて、もう少し情報を増やしていこうというのが、この記事の目標です。
LSTMの仕組みを知るためのよい情報源はないかな?
TensorFlowを使ってLSTMを実現したサンプルコードが知りたいな
というあなたにピッタリの記事になっています。
この記事を出発点として、いろいろな記事を読んで情報を集め、正しくLSTMを理解してくださいね。
LSTMとは
LSTM(Long short-term memory:長期短期記憶)は、RNN(Recurrent Neural Networks:再帰型ニューラルネットワーク)の一種です。
日本語にすると長期でも短期でもどちらでもいける!というように読めますが、そうではなく、「短期記憶を長い期間で活用する」仕組みがある(「長期的な依存関係を学習するために、短期記憶を利用する」仕組みがある、とも言える)のがLSTMです。
LSTMについて説明している記事はいくつもありますが、残念ながらTensorFlowのチュートリアルをこなせるくらいの知識では、どれか1つの記事を読めばズバッと分かるということはありません。
私がLSTMの仕組みを理解するためにおすすめするのが、ここで紹介する記事を何度か読み比べていくという方法です。
同じLSTMについて説明した記事ですが、読者に期待する知識が少しずつ違うため、一回では理解するのが難しいのです。
そこで、辛抱強く読み比べていくという方法をおすすめしています。
LSTMの理解が進んでいけば、同じ記事からでも異なる情報を読み取れるに違いありません!
では、おすすめ記事を3つ紹介しましょう。
今更聞けないLSTMの基本 – HELLO CYBERNETICS
参考:http://s0sem0y.hatenablog.com/entry/2017/05/06/182757
LSTMのキモである「LSTMブロック」を図示しながら、LSTMの仕組みを説明しています。
説明文中で、機械学習で調整していく「パラメータ」を、W、R、bといった文字で明示していますので、「この辺りのパラメータが自動的に調整されていくから、学習が進む」ことが理解できます。
1つ難点を言えば、LSTMブロックが、他のサイトでは見かけない図(でも分かりやすい)で描かれていることです。
この記事で理解したつもりで、他のサイトの説明を読むと、初めのうちはアレ?と思いますが、またこの記事に戻ってきて、見比べてみてください。
見比べているうちに、突然、そうか!と思うに違いありません。
LSTMネットワークの概要 – Qiita
参考:https://qiita.com/KojiOhki/items/89cd7b69a8a6239d67ca
LSTMに関する超有名なColah’s blogの記事「Understanding LSTM Networks」を翻訳したものです。
原文は以下の記事です。
参考:http://colah.github.io/posts/2015-08-Understanding-LSTMs/
多くの図があり、分かりやすそうに感じますが、「今更聞けないLSTMの基本 – HELLO CYBERNETICS」では存在するセル(short-term memory:短期記憶)が図示されていません。
ここが一番引っかかるところかなと思いますが、セルがあるつもりで読み進めましょう。
わかるLSTM ~ 最近の動向と共に – Qiita
参考:https://qiita.com/t_Signull/items/21b82be280b46f467d1b
「最近」は2016年6月のことだろうと思いますので、2年前の最近ではありますが、上で紹介した2つの記事を読んだあとであれば、だいぶ理解しやすいでしょう。
また、どのようにしてLSTMが進化してきたのか、といったところも興味深く読めるでしょう。
この記事も多くの図があり、とても分かりやすくなっていますが、ときおりセル(short-term memory:短期記憶)が図示されていません。
ですが、ここまで読んできた方ならスムーズに理解できるでしょう。
TensorFlowでLSTM
LSTMの考え方はそれとなく分かったことにして、TensorFlowでLSTMを実装してみましょう。
と、言いたいところですが、これもまたちょっと難しいのです。
TensorFlowでLSTMを扱っているコードの中で一番有名なのは、何と言っても公式チュートリアルです。
参考:https://www.tensorflow.org/tutorials/recurrent
公式チュートリアルを日本語に翻訳しつつ補足説明を行った記事もあります。
参考:http://tensorflow.classcat.com/2016/02/19/tensorflow-tutorials-recurrent-neural-networks/
ただ、チュートリアル記事だけでは、コードを網羅的に説明しているわけではないため、何人かの人が日本語でコードを解説してくれています。
ここからは、そのような記事を3つ紹介しましょう。
TensorFlowのRNN(LSTM)のチュートリアルのコードを読む
参考:https://www.sambaiz.net/article/146/
コードのブロックごとに、実行内容の概要を説明しています。
まずは、この記事で概要をつかみましょう。
TensorFlow の RNN チュートリアルやってみた – Qiita
参考:https://qiita.com/keisuke-nakata/items/1e43c6698df800ecad73
公式チュートリアルをベースに、コードを再構築しながらコードにコメントを付ける形で、動作を説明しています。
丁寧に読んでいき、理解を深めましょう。
TensorFlowのRNNを基本的なモデルで試す – Qiita
参考:https://qiita.com/yukiB/items/f6314d2861fc8d9b739f
公式チュートリアルから離れて、LSTMで数列の合算値を求める(推測する)コードを紹介しています。
公式チュートリアルのコードは、(コメントを含めて)500行を超えていますが、この記事のコードは150行程度です。
LSTMのコードを読む練習としてはちょうど良いでしょう。
まとめ
今回は、ちょっと趣を変えて、LSTMを理解するために役に立つ記事を紹介しました。
機械学習界隈では、さまざまなモデルが実装されることで、現実のさまざまな問題に対応しようとしています。
RNNの有望株と目されているLSTMですから、これからも進化を続けるはずですし、対象とするデータに応じてモデルも組み直す必要がありますから、ここで身に付けた知識がそのまま使えるとは限りません。
ただ、今回の記事で紹介した内容を理解することは無駄ではなく、進化したLSTMを理解することや、あなたが対象とするデータをLSTMで学習させることに、役に立つことは間違いありません。
一歩一歩、確実に進んでいきましょう!