リカレントニューラルネットワーク (RNN) とは
これだけは知っておきたい 3 つのこと
リカレントニューラルネットワーク (RNN) は、時系列データまたはシーケンシャルデータを用いた予測を行うディープラーニングのネットワーク アーキテクチャです。
RNN は、さまざまな長さのシーケンシャルデータを使用して、自然信号の分類、言語処理、動画解析などの問題を解く場合に特に効果的です。
リカレントニューラルネットワーク (RNN) は、過去の情報を利用して現在および将来の入力に対するネットワークの性能を向上させる、ディープラーニングの構造です。RNN の特徴は、ネットワークに隠れ状態とループが含まれている点です。ネットワークにループ構造を用いると、過去の情報を隠れ状態で保存し、シーケンスで処理することができます。
RNN は、過去の情報を現在の入力に適用する方法をどのように認識するのでしょうか?ネットワークには、隠れ状態ベクトル用と入力用の 2 つの重みがあります。ネットワークは学習中に、入力の重みと隠れ状態の重みの両方を学習します。RNN を実装した場合、出力は現在の入力および隠れ状態に基づき、そしてその隠れ状態は以前の入力に基づきます。
LSTM (長・短期記憶)
実際には、単純な RNN では、より長期の依存性の学習において問題が生じます。RNN は、通常、逆伝播により学習します。その際に勾配が "消失" または "爆発" する問題が生じることがあります。このような問題が発生すると、ネットワークの重みが非常に小さくなるか、または非常に大きくなり、長期の関係を学習する効果が薄れてしまいます。
この問題を克服した特殊な RNN が、LSTM (長・短期記憶) ネットワークです。LSTM ネットワークは、ゲートを増やすことで、隠れセル内のどの情報を出力や次の隠れ状態に利用するかを制御します。これにより、データに含まれる長期の関係を、ネットワークがより効果的に学習できるようになります。LSTM は、一般的に実装される RNN の一種です。
双方向 LSTM は、時系列データやシーケンスデータのタイムステップ間の双方向依存関係を学習します。このような依存関係は、各タイムステップで完全な時系列データからネットワークに学習させる場合に役立ちます。より長期的な依存関係を学習するもう 1 つの RNN バリアントは、ゲート付き RNN です。MATLAB® では、双方向 LSTM とゲート付き RNN を学習させ、機能させることができます。
MATLAB で RNN の例を使用して始める
RNN は、次のような用途において重要な技術となっています。
RNN を使用する場面
分類タスクや回帰タスクにシーケンスデータや時系列データを使用する場合は、RNN の使用を検討してください。動画は、本質的に一続きの画像であるため、RNN は動画にも適しています。信号の応用例と同様、シーケンスを RNN に入力する前の特徴抽出に役立ちます。各フレームの特徴抽出には CNN (GoogLeNet など) を活用します。
分類、回帰、および動画分類タスク用の RNN ネットワーク アーキテクチャ。
テキスト、信号、動画で RNN を使用した MATLAB の例をご覧ください。
MATLAB を Deep Learning Toolbox™ とともに使用することで、RNN の設計、学習、展開を行うことができます。Text Analytics Toolbox™ または Signal Processing Toolbox™ を使用することで、RNN をテキスト解析や信号解析に応用できます。
ネットワークの設計および学習
わずか数行の MATLAB コードで、プログラムにより RNN を作成し、学習させることができます。再帰層 (LSTM 層、双方向 LSTM 層、ゲート付き再帰層、LSTM 射影層) を使用して RNN を構築します。RNN ネットワークで単語埋め込み層を使用して、単語を数値シーケンスにマッピングします。
ディープ ネットワーク デザイナー アプリを対話的に使用して、RNN を作成し、学習させることもできます。精度、損失、検証メトリクスをプロットして学習状況を監視します。