リカレントニューラルネットワーク (RNN)

リカレントニューラルネットワーク (RNN) は、時系列データまたはシーケンシャルデータを用いた予測を行うディープラーニングのネットワーク アーキテクチャです。

RNN は、さまざまな長さのシーケンシャルデータを使用して、自然信号の分類、言語処理、動画解析などの問題を解く場合に特に効果的です。

RNN のしくみ

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

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

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

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

LSTM (長・短期記憶)

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

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

RNN と LSTM ネットワークを並べた図。RNN は、入力に隠れ状態を使用し、それが次のタイムステップで RNN への追加入力としても使用されます。LSTM は、勾配消失問題や勾配爆発問題を防ぐために、忘却ゲートやメモリセルなどの追加ユニットを使用します。

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

双方向 LSTM は、時系列データやシーケンスデータのタイムステップ間の双方向依存関係を学習します。このような依存関係は、各タイムステップで完全な時系列データからネットワークに学習させる場合に役立ちます。より長期的な依存関係を学習するもう 1 つの RNN バリアントは、ゲート付き RNN です。MATLAB® では、双方向 LSTM とゲート付き RNN を学習させ、機能させることができます。

MATLAB で RNN の例を使用して始める

RNN が重要である理由

RNN は、次のような用途において重要な技術となっています。

信号処理

信号は経時的にセンサーから収集される場合が多いため、自然にシーケンシャルデータになっています。大規模な信号データセットに対する自動分類および自動回帰により、リアルタイムでの予測が可能です。生の信号データは、ディープネットワークに入力するか、周波数成分などの特定の特徴に焦点を合わせるための前処理を行うことができます。特徴抽出により、ネットワーク性能を大幅に向上させることができます。

テキスト解析

言語は本来逐次的であり、テキストの長さはまちまちです。RNN は文章内の単語を文脈に当てはめて学習できるため、テキスト分類テキスト生成機械翻訳感情分析 (単語やフレーズの意味の分類) などの自然言語処理タスクに適したツールです。

RNN を使用する場面

分類タスクや回帰タスクにシーケンスデータや時系列データを使用する場合は、RNN の使用を検討してください。動画は、本質的に一続きの画像であるため、RNN は動画にも適しています。信号の応用例と同様、シーケンスを RNN に入力する前の特徴抽出に役立ちます。各フレームの特徴抽出には CNN (GoogLeNet など) を活用します。

分類、回帰、および動画分類タスク用に RNN を構築するために使用される層を含む、RNN ネットワーク アーキテクチャの図。

分類、回帰、および動画分類タスク用の RNN ネットワーク アーキテクチャ。

テキスト、信号、動画で RNN を使用した MATLAB の例をご覧ください。

MATLAB を使用した RNN

MATLABDeep Learning Toolbox™ とともに使用することで、RNN の設計、学習、展開を行うことができます。Text Analytics Toolbox™ または Signal Processing Toolbox™ を使用することで、RNN をテキスト解析や信号解析に応用できます。

ネットワークの設計および学習

わずか数行の MATLAB コードで、プログラムにより RNN を作成し、学習させることができます。再帰層 (LSTM 層双方向 LSTM 層ゲート付き再帰層LSTM 射影層) を使用して RNN を構築します。RNN ネットワークで単語埋め込み層を使用して、単語を数値シーケンスにマッピングします。

ディープ ネットワーク デザイナー アプリを対話的に使用して、RNN を作成し、学習させることもできます。精度、損失、検証メトリクスをプロットして学習状況を監視します。

ネットワークの展開

学習済み RNN を組み込みシステム、エンタープライズ システム、FPGA デバイス、またはクラウド展開できます。Intel®、NVIDIA®、および ARM® のライブラリからコードを生成し、高性能な推論速度をもつ展開可能な RNN を作成することもできます。

ディープ ネットワーク デザイナー アプリで対話的に構築された、シンプルな BiLST ネットワークのスクリーンショット。

RNN ネットワークの構築、可視化、編集を対話形式で行うディープ ネットワーク デザイナー アプリ。

Intel、NVIDIA、ARM などの組み込みターゲットにコード生成製品経由でディープラーニング ネットワークを接続する図。

学習済みディープラーニング ネットワークを迅速に本番環境へ展開。