リカレントニューラルネットワーク (Recurrent Neural Network: RNN) は、過去の情報を利用して現在および将来の入力に対するネットワークの性能を向上させる、ディープラーニングネットワーク構造です。RNN の特徴は、ネットワークに隠れ状態とループが含まれる点です。ネットワークにループ構造を用いると、過去の情報を隠れ状態で保存し、シーケンスで処理することができます。

リカレントニューラルネットワークにはこのような特徴があるため、次のようなさまざまな長さの逐次データを持つ、さまざまな問題を解決するのに適しています。

RNN の 1 つのセルを展開し、1 つのデータ列について情報がどのようにネットワークを移動するのかを示しています。セルの隠れ状態が入力に作用して出力が生成され、隠れ状態が次のタイムステップに渡されます。

RNN は、過去の情報を現在の入力に適用する方法をどのように認識するのでしょうか?ネットワークには、隠れ状態ベクトル用と入力用の 2 つの重みがあります。ネットワークは学習中に、入力の重みと隠れ状態の重みの両方を学習します。RNN を実装した場合、出力は現在の入力および隠れ状態に基づき、そしてその隠れ状態は以前の入力に基づきます。

LSTM (長・短期記憶)

実際には、単純な RNN では、より長期の依存性の学習において問題が生じます。RNN は、通常、逆伝播により学習します。その際に勾配が「消失」または「爆発」する問題が生じることがあります。このような問題が発生すると、ネットワークの重みが非常に小さくなるか、または非常に大きくなり、長期の関係を学習する効果が薄れてしまいます。

この問題を克服した特殊なリカレントニューラルネットワークが、LSTM (長・短期記憶) ネットワークです。LSTM ネットワークは、ゲートを増やすことで、隠れセル内のどの情報を出力や次の隠れ状態に利用するかを制御します。これにより、データに含まれる長期の関係を、ネットワークがより効果的に学習できるようになります。LSTM は、一般的に実装される RNN の一種です。

RNN (左) と LSTM ネットワーク (右) の比較

MATLAB® には、LSTM ネットワークにテキスト、画像、信号、時系列データを学習させ実装するための完全な機能が揃っています。次のセクションでは、RNN の用途と MATLAB の使用例をいくつかご紹介します。

RNN の用途

自然言語処理

言語は本来逐次的であり、テキストの長さはまちまちです。RNN は文章内の単語を文脈に当てはめて学習できるため、この分野での問題解決に適しています。 一例には、感情分析 (単語や語句の意味を分類する手法) があります。また、機械翻訳や言語翻訳のためのアルゴリズムの使用も一般的な応用例です。単語はまず、テキストデータから、数値シーケンスに変換する必要があります。これを効果的に行う方法が、単語埋め込み層です。単語埋め込みでは、単語を数値ベクトルにマッピングします。以下のは、単語埋め込みを使って単語のセンチメント分類器を学習させ、 MATLAB の関数 wordcloud で結果を表示したものです。

MATLAB での感情分析結果。wordcloud によって、学習プロセスの結果が表示されます。これにより、分類器は新しいテキストグループの感情を判別できるようになります。

別の分類器の例では、MATLAB で RNN を使用してテキストデータを分類し、製造不良のタイプを判別しています。 また、機械翻訳の例でも、ローマ数字を理解するようにネットワークを学習させるために、MATLAB が利用されています。

信号分類

信号も経時的にセンサーから収集されることが多いので、自然と系列データとなっているまた別の例です。RNN では、大きなデータセットに必要な手動処理の時間を減らしたり、リアルタイムで分類したりできるため、信号の自動分類に役立ちます。生の信号データは、ディープネットワークに入力するか、周波数成分などの別の特徴に集中するために前処理を行うことができます。特徴抽出を行うと、ネットワークの性能を大幅に向上できます (心電信号を使用した例を参照)。以下に、RNN で生の信号データを使用したを示します。

MATLAB で LSTM を使用したセンサーデータの分類。

動画分析

動画は本質的に一続きの画像であるため、RNN は動画にも適しています。信号の応用例と同様、シーケンスを RNN に入力する前の特徴抽出に役立ちます。このでは、各フレームの特徴抽出に、事前学習済みの GoogleNet モデル (畳み込みニューラルネットワーク) が使用されています。以下のネットワーク アーキテクチャを参照してください。

LSTM を使用した動画分類の基本アーキテクチャ。