長・短期記憶 (LSTM)

長・短期記憶 (LSTM) ネットワークはリカレントニューラルネットワーク (RNN) の一種です。LSTM は、データのタイムステップ間の長期的な依存関係を学習できるため、主にシーケンシャルデータの学習、処理、および分類に使用されます。

LSTM の仕組み

LSTM と RNN

LSTM ネットワークは、RNN アーキテクチャの特殊な形式です。RNN は過去の情報を使用して、現在および将来の入力に対するニューラル ネットワークの性能を向上させます。隠れ状態およびループが含まれているため、ネットワークは過去の情報を隠れ状態で保存し、シーケンスで処理できます。RNN には、隠れ状態ベクトル用と入力用に 1 つずつ、合計 2 つの重みセットがあります。ネットワークは学習中に、入力の重みと隠れ状態の重みの両方を学習します。RNN を実装した場合、出力は現在の入力および隠れ状態に基づき、そしてその隠れ状態は以前の入力に基づきます。

実際には、単純な RNN は長期的な依存関係を学習する能力が限られています。RNN は通常、逆伝播により学習します。その際に勾配消失問題または勾配爆発問題が生じることがあります。これらの問題により、ネットワークの重みが非常に小さく、あるいは非常に大きくなるため、ネットワークで長期的な関係を学習する必要がある用途での有効性が限定されます。

RNN は、入力に隠れ状態を使用し、それが次のタイムステップで RNN への追加入力としても使用されます。

従来型 RNN におけるタイムステップ t でのデータフロー。

LSTM 層アーキテクチャ

LSTM 層は追加のゲートを使用して、隠れ状態のどの情報を、次の隠れ状態に出力としてエクスポートするかを制御します。こうした追加ゲートにより、長期的な依存関係を学習する際の RNN の一般的な問題を解決します。従来型 RNN の隠れ状態に加えて、LSTM ブロックのアーキテクチャには通常、メモリセル、入力ゲート、出力ゲート、および忘却ゲートが含まれます。追加のゲートにより、ネットワークはデータ内の長期的な関係をより効果的に学習できます。時間ギャップに対する感度が低いため、LSTM ネットワークは単純な RNN よりもシーケンシャルデータの解析に適しています。次の図では、LSTM アーキテクチャおよびタイムステップ t におけるデータフローを確認できます。

LSTM ネットワークは、勾配消失問題や勾配爆発問題を防ぐために、忘却ゲートやメモリセルなどの追加ユニットを使用します。

LSTM ユニットのタイムステップ t におけるデータフロー。忘却ゲートおよびメモリセルにより、勾配消失問題および勾配爆発問題を防ぎます。

入力ゲートへの重みおよびバイアスにより、新しい値が LSTM ユニットに入る度合いを制御します。同様に、忘却ゲートと出力ゲートへの重みおよびバイアスにより、ユニット内に値が留まる度合いと、LSTM ブロックの出力活性化を計算するためにユニット内の値が使用される度合いをそれぞれ制御します。

次の図は、複数のタイムステップをもつ LSTM 層を通るデータフローを示しています。出力のチャネル数は、LSTM 層の隠れユニットの数と一致します。

情報が LSTM 層の複数のステップをどのように伝播するかを示す図。

複数のタイムステップをもつ LSTM のデータフロー。各 LSTM 演算は、前の演算から隠れ状態とセル状態を受け取り、更新された状態とセル状態を次の演算に渡します。

LSTM ネットワーク アーキテクチャ

LSTM は、分類および回帰のタスクでシーケンスデータと時系列データを処理するのに適しています。動画は本質的に画像シーケンスであるため、LSTM は動画にも適しています。信号の処理と同様に、画像シーケンスを LSTM 層に入力する前の特徴抽出に役立ちます。各フレームの特徴抽出には 畳み込みニューラル ネットワーク (CNN) (GoogLeNet など) を活用します。次の図では、さまざまなタスク用に LSTM ネットワークを設計する方法を示します。

さまざまなタスク用に RNN を構築するために使用する層をもつ LSTM ネットワーク アーキテクチャの図。

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

双方向 LSTM

双方向 LSTM (BiLSTM) は、時系列データやシーケンスデータのタイムステップ間の双方向依存関係を学習します。このような依存関係は、各タイムステップで完全な時系列データからネットワークに学習させる場合に役立ちます。BiLSTM ネットワークでは、入力データが LSTM 層を 2 回通過するため、追加の学習が可能です。これにより、ネットワークの性能が向上することがあります。

BiLSTM は、順方向 LSTM と逆方向 LSTM という 2 つの LSTM コンポーネントで構成されます。順方向 LSTM は、最初のタイムステップから最後のタイムステップに向かって演算します。逆方向 LSTM は、最後のタイムステップから最初のタイムステップに向かって演算します。2 つの LSTM コンポーネントにデータを通過させた後、演算により、チャネル次元に沿って出力を連結します。

BiLSTM における順方向 LSTM 演算と逆方向 LSTM 演算を示す図。

複数のタイムステップをもつ BiLSTM のアーキテクチャ。

MATLAB での LSTM の例の紹介

LSTM の用途

LSTM は、長さが可変のシーケンシャルデータを処理し、そのデータのタイムステップ間の長期的な依存関係を学習する場合に特に効果的です。一般的な LSTM の用途には、感情分析、言語モデリング、音声認識、および動画解析があります。

LSTM の広範な用途

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

  • 信号処理。信号は経時的にセンサーから収集される場合が多いため、自然にシーケンシャルデータになっています。大規模な信号データセットに対する自動分類および自動回帰により、リアルタイムでの予測が可能です。生の信号データは、ディープネットワークに入力するか、周波数成分などの特定の特徴に焦点を合わせるための前処理を行うことができます。特徴抽出により、ネットワーク性能を大幅に向上させることができます。
  • 自然言語処理 (NLP)。言語は本来逐次的であり、テキストの長さはまちまちです。LSTM は文内の単語を文脈に当てはめて学習できるため、テキスト分類、テキスト生成、機械翻訳、感情分析などの自然言語処理タスクに適したツールです。

次の例を試して、信号処理および自然言語処理への LSTM の応用を始めましょう。

LSTM の特定の用途

LSTM ネットワークを使用した NOx 排出量の推定

Renault のエンジニアは、ゼロエミッション車 (ZEV) の次世代技術の開発に LSTM を使用しました。

実際のエンジンで実施したテストから学習データを取得しました。これらのテストの実施中、エンジンは一般的なドライブサイクルを経ました。エンジントルク、エンジン回転数、クーラント温度、ギア数別排出量などの取得されたデータが、LSTM ネットワークへの入力として提供されました。LSTM アーキテクチャの設計を反復した後、LSTM の最終バージョンでは、NOX レベルの予測精度が 85 から 90% に達しました。

MATLAB を使用した LSTM

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

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

数行のコードで、プログラムによる LSTM の設計および学習ができます。LSTM 層双方向 LSTM 層、および LSTM 投影層を使用して LSTM を構築します。また、ディープ ネットワーク デザイナー アプリを使用して、LSTM を対話的に設計、解析、および変更することもできます。時系列モデラーを使用すれば、時系列回帰タスク用に LSTM をトレーニングすることも可能です。

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

ディープ ネットワーク デザイナー アプリを使用した LSTM ネットワークの対話的な構築、可視化、編集と、その後の時系列モデラーでの学習。

ネットワークのインポートとエクスポート

Python® ベースのディープラーニング フレームワークを使用して LSTM ネットワークを次のように交換できます。

  • 1 行のコードで PyTorch®、TensorFlow™、および ONNX™ のモデルをインポートする。
  • ディープ ネットワーク デザイナーを使用して、PyTorch モデルおよび TensorFlow モデルを対話的にインポートする。
  • 1 行のコードで LSTM ネットワークを TensorFlow および ONNX にエクスポートする。
MATLAB、TensorFlow、ONNX、および PyTorch 間の、LSTM およびその他のディープ ニューラル ネットワークの相互運用性を示す図。

MATLAB、TensorFlow、ONNX、および PyTorch 間での LSTM ネットワークの変換。

ネットワークの展開

学習済みの LSTM を組み込みシステム、エンタープライズ システム、またはクラウドに展開します。

  • CPU および GPU への展開用に最適化された C/C++ コードおよび CUDA コードを自動生成する。
  • FPGA および SoC に展開するために論理合成可能な Verilog® コードおよび VHDL® コードを生成する。
ディープ ニューラル ネットワークを CPU、GPU、マイクロコントローラー、および FPGA に展開するための MATLAB および Simulink のコード生成を示す図。

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