時系列データの予測でよく使われるディープラーニングの代表的手法「RNN」を解説。そもそも時系列データとは何か? RNNの特徴や、通常のニューラルネットワークの相違点についても押さえよう。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
時系列データとは、特定の情報について、時間順序を追って取得されたデータのことだ。典型的なものとしては、年度ごとのA社の売上高、1時間ごとの東京都の降水量、地球上で発生した地震の時刻と場所、震度などの記録、といったものが挙げられる。
時系列データのデータ分析上の特徴としては、データポイントそれぞれを独立したものと見なすのではなく、「ある時点のデータが、それ以降に発生するデータに何らかの影響を及ぼしている」と考えることである。この意味においては、自然言語も時系列データとしての性質を持っているといえる。例えば文章中で最初に「私」という単語が来たら、その次に来るのは「は」や「の」といった助詞が来ると予想できる。
与えられた時系列データから、次に得られるであろうデータを予測する方法はいろいろあるが、ニューラルネットワークを使うこともできる。
時系列データの予測においては、入力もおのおのが独立した入力ではなく「一連の入力データ」として扱われ、それぞれに対する一連の出力データが必要となる。単純なニューラルネットワークでは、出力は最後の層からのみ発生するため、一連の入力のおのおのに対して出力を生成することはできない。それではどうすればよいのだろうか。
Recurrent Neural Network(RNN)は、これに単純な回答を与えている。通常のニューラルネットワークでは、ある層の出力は、次の層の入力に利用されるのみである。しかしRNNでは、ある層の出力は、次の層の入力として利用されるだけでなく、一般的なニューラルネットワークの最後の層のような(中間データではないユーザーが利用可能な)出力としても利用される。また、各層の入力として、前の層の入力のみではなく、時系列のデータポイントも入力とする。図に表すと図1のようになる。
このように、ニューラルネットワークの出力を別のネットワークの入力として利用するような再帰的構造を持ったニューラルネットワークのことをRecursive Neural Networkと呼ぶ(こちらもRNNと略すが、本稿では「RNN」といえば「Recurrent Neural Network」を指すものとする)。
Recursive Neural Networkの中でも、図1のように隠れ層同士の結合が時系列に沿って直線的であり、かつその隠れ層が同一構造のものであるような場合を「RNN」という。これを表現したのが図2である。RNNでは、再帰的に出現する同一のネットワーク構造(図2中では黒四角で表現される)のことをセル(cell)と呼ぶ。
繰り返しになるが、RNNの大きな特徴の一つは「ある時点の入力が、それ以降の出力に影響を及ぼす」ということである。言い換えれば、「過去の情報を基に予測できる」ということである。これは図1を見ればほぼ明らかであろう。 x1 の矢印をたどっていくと、 y1 から yn まで到達する。つまり x1 は、 y1 から yn に影響する。同様に x2 は y2 から yn に影響し、 xn は yn にのみ影響する。
詳細は省くが、RNNのような再帰的な構造を持つデータフローグラフを構築するのは単純な話ではない。TensorFlowでは、このような再帰構造を表現するためのクラス群をtf.nn.rnn_cellモジュールで定義している。
以上、今回はコンパクトな解説になったが、RNNの概念を理解するための基礎を説明した。次回はRNNを使って深層学習を試してみる。
Copyright© Digital Advantage Corp. All Rights Reserved.