YOLO Vision Shenzhen
深セン
今すぐ参加
用語集

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

再帰型ニューラルネットワーク(RNN)がメモリを使用してシーケンシャルデータをどのように処理するかを探ります。RNNアーキテクチャ、NLPアプリケーション、およびPyTorch実装について学びましょう。

A リカレントニューラルネットワーク (RNN)は、テキスト、ゲノム、手書き、または話し言葉などのシーケンスデータ内のパターンを認識するために特別に設計された人工ニューラルネットワークの一種です。すべての入力(および出力)が互いに独立していると仮定する従来のフィードフォワードネットワークとは異なり、RNNは一種の記憶を保持します。この内部記憶により、以前の情報を理解した上で入力を処理することができ、コンテキストと時間的順序が重要なタスクに特に適しています。このアーキテクチャは、人間が情報を処理する方法を模倣しています。例えば、文を読むには、現在の単語を理解するために前の単語を記憶する必要があります。

RNNはどのように機能するか

RNNの核となる革新は、そのループ構造にあります。標準的なフィードフォワードネットワークでは、情報は入力から出力へと一方向にのみ流れます。対照的に、RNNは情報が持続することを可能にするフィードバックループを持っています。ネットワークがシーケンスを処理する際、それは「隠れ状態」(ネットワークの短期記憶として機能するベクトル)を維持します。各タイムステップで、RNNは現在の入力と前の隠れ状態を取り込み、出力を生成し、次のステップのために隠れ状態を更新します。

このシーケンシャル処理能力は、自然言語処理 (NLP)および時系列分析に不可欠です。しかし、標準的なRNNは、シーケンスが長くなるにつれてネットワークが以前の入力を忘れてしまう勾配消失問題のため、長いシーケンスでしばしば困難に直面します。この限界により、より長い期間にわたる情報フローをより適切に調整するメカニズムを導入した、Long Short-Term Memory (LSTM)ネットワークやGated Recurrent Units (GRU)のようなより高度なバリアントの開発につながりました。

実際のアプリケーション

循環ニューラルネットワークは、機械がシーケンシャルデータを理解できるようにすることで、多くの産業を変革してきました。以下に2つの代表的な例を挙げます。

  1. 機械翻訳: Google Translateのようなサービスは、元々、テキストをある言語から別の言語に変換するために、RNNベースのアーキテクチャ(特にsequence-to-sequenceモデル)に大きく依存していました。ネットワークは入力文全体(例:English)を読み込み、コンテキストベクトルを構築し、それを使用して翻訳された出力(例:フランス語)を単語ごとに生成し、文法的な一貫性を確保します。
  2. 予測入力と自動修正: スマートフォンで入力すると、キーボードが次に可能性の高い単語を提案します。これは多くの場合、RNNでトレーニングされた言語モデルによって駆動されます。モデルは既に入力した単語のシーケンスを分析して、最も可能性の高い次の単語を予測し、ユーザーの速度と精度を向上させます。同様のロジックは、話された音声をテキストに転写する音声認識システムにも適用されます。

RNN vs. CNNおよびTransformer

RNNを他の主要なアーキテクチャと区別することは有用です。畳み込みニューラルネットワーク (CNN)は、主に画像のような空間データ向けに設計されており、ピクセルグリッドを処理して形状やオブジェクトを識別します。例えば、Ultralytics YOLO26は、リアルタイムのobject detectionのために強力なCNNバックボーンを使用しています。CNNが「この画像に何があるか?」に優れているのに対し、RNNは「このビデオで次に何が起こるか?」に優れています。

近年では、多くの複雑なNLPタスクにおいて、TransformerアーキテクチャがRNNを大きく凌駕しています。Transformerはアテンションメカニズムを使用して、シーケンシャルではなくシーケンス全体を並列に処理します。しかし、RNNは特定の低遅延、リソース制約のあるストリーミングアプリケーションにおいて依然として非常に効率的であり、シンプルな時系列予測のためにエッジデバイスへの展開がよりシンプルです。

PyTorch 実装例

現代のコンピュータビジョンタスクはしばしばCNNに依存しますが、ハイブリッドモデルはRNNを使用してビデオフレームから抽出された時系列特徴を分析する場合があります。以下は、PyTorchを使用してデータシーケンスを処理する基本的なRNNレイヤーを作成する、シンプルで実行可能な例です。

import torch
import torch.nn as nn

# Define a basic RNN layer
# input_size: number of features in the input (e.g., 10 features per time step)
# hidden_size: number of features in the hidden state (memory)
# batch_first: input shape will be (batch, seq, feature)
rnn = nn.RNN(input_size=10, hidden_size=20, num_layers=1, batch_first=True)

# Create a dummy input: Batch size 1, Sequence length 5, Features 10
input_seq = torch.randn(1, 5, 10)

# Forward pass through the RNN
# output contains the hidden state for every time step
# hn contains the final hidden state
output, hn = rnn(input_seq)

print(f"Output shape: {output.shape}")  # Expected: torch.Size([1, 5, 20])
print(f"Final hidden state shape: {hn.shape}")  # Expected: torch.Size([1, 1, 20])

課題と今後の展望

その有用性にもかかわらず、RNNは計算上の課題に直面しています。逐次処理は並列化を妨げ、GPU上でのTransformerと比較して学習を遅くします。さらに、勾配爆発問題の管理には、慎重なハイパーパラメータチューニングと勾配クリッピングのような技術が必要です。

それにもかかわらず、RNNはディープラーニング(DL)における基本的な概念であり続けています。それらは人工知能(AI)の進化を理解する上で不可欠であり、IoTセンサー向けのシンプルな異常検知システムで今も広く利用されています。ビジョンモデルとシーケンス予測器を組み合わせるような複雑なパイプラインを構築する開発者にとって、データセットの管理とトレーニングワークフローは極めて重要です。Ultralytics Platformは、このプロセスを簡素化し、さまざまな環境でデータを管理し、モデルを効率的にデプロイするためのツールを提供します。

共にAIの未来を築きましょう!

未来の機械学習で、新たな一歩を踏み出しましょう。