Ultralytics YOLO27: ウェイトリストに登録する
YOLOのライセンス
Ultralytics用語集に戻る

Recurrent Neural Network (RNN)

再帰型ニューラルネットワーク(RNN)は、隠れ状態を引き継ぎながら、シーケンスを1ステップずつ処理します。再帰の仕組み、学習、派生モデル、コードを解説します。

再帰型ニューラルネットワーク(RNN)は、シーケンスを1要素ずつ処理しながら、各ステップの隠れ状態を次のステップに引き継ぐニューラルネットワークです。そのため、各ステップの出力は、それまでに読み取ったすべての情報に依存できます。すべてのステップに同じ重みを適用するため、1つのネットワークで、文から数時間分のセンサーデータまで、任意の長さのシーケンスを処理できます。RNNは、2010年代後半にTransformerが多くの言語タスクで置き換えるまで、自然言語処理(NLP)、音声認識、時系列分析の主要なアーキテクチャでした。ゲート付きの変種は、ストリーミングやオンデバイスモデルで今も広く使われています。また、Mambaなどの状態空間モデル(SSMs)で、再帰構造が再び注目されています。

RNNの仕組み#

Jeffrey Elmanの1990年の論文にちなみElmanネットワークとも呼ばれる単純なRNNは、隠れ状態をhₜ = tanh(Wxₜ + Uhₜ₋₁ + b)として更新し、各ステップでyₜ = Vhₜ + cの出力を生成できます。隠れ状態は、それまでのシーケンスを要約する固定サイズのベクトルです。tanhによって、フィードバックされる値は−1から1の範囲に保たれます。各ステップにネットワークを1つずつ描いてループを展開すると、同じ重みを共有する深いフィードフォワードネットワークになります。

次のコードは、シーケンスに対してPyTorchのnn.RNNを実行し、単純なループでも同じ再帰処理を繰り返します。

import torch
from torch import nn

torch.manual_seed(0)
rnn = nn.RNN(input_size=3, hidden_size=4, batch_first=True)
x = torch.randn(1, 6, 3)  # one sequence: 6 time steps, 3 features each

# PyTorch runs the whole sequence; output holds the hidden state after every step
output, h_n = rnn(x)

# The same recurrence by hand, reusing one set of weights at every step
h = torch.zeros(1, 4)
for t in range(x.shape[1]):
    h = torch.tanh(x[:, t] @ rnn.weight_ih_l0.T + rnn.bias_ih_l0 + h @ rnn.weight_hh_l0.T + rnn.bias_hh_l0)

print(f"Output shape: {tuple(output.shape)}, final state shape: {tuple(h_n.shape)}")
print(f"Hand-written loop matches nn.RNN: {torch.allclose(h, h_n[0], atol=1e-6)}")

Output shape: (1, 6, 4), final state shape: (1, 1, 4)とHand-written loop matches nn.RNN: Trueを出力します。出力には各タイムステップの4次元隠れ状態が1つずつ含まれます。入力用と前の状態用に1つずつ重み行列を使うだけで、ループは最終状態を再現します。

シーケンス処理タスク#

同じ再帰処理を、入力と出力の長さが異なるタスクに適用できます。

  • 多対一: シーケンス全体を読み取り、最終状態から分類します。感情分析やセンサーデータのウィンドウへのラベル付けが該当します。
  • 多対多: 文の各単語や音声の各フレームにタグを付けるように、各ステップで出力を生成します。
  • シーケンス間: エンコーダーRNNで入力を読み取り、デコーダーRNNで異なる長さの出力を生成します。初期のニューラル機械翻訳やその他のシーケンス間モデルで採用された設計です。
  • 一対多: 初期の画像キャプション生成モデルで画像の特徴ベクトルからキャプションを生成するように、1つの入力からシーケンスを生成します。

双方向RNNは、シーケンスを逆向きに読む2つ目のRNNを追加し、各ステップで両方の状態を組み合わせるため、すべての出力が過去と未来のコンテキストを参照できます。積層RNNでは、ある層の隠れ状態を次の層の入力シーケンスとして渡します。

時間方向のバックプロパゲーションによるトレーニング#

RNNは時間方向のバックプロパゲーション(BPTT)でトレーニングします。シーケンスに沿ってネットワークを展開し、各ステップの損失を合計してから、展開した計算グラフに沿ってバックプロパゲーションを行います。ステップTからステップtに届く勾配は、再帰層のコピーをT − t回通過し、そのたびにUとtanhの導関数が掛け合わされます。これらの係数の大部分が1未満の場合、勾配は幾何級数的に縮小します。これが、Yoshua Bengio、Patrice Simard、Paolo Frasconiが1994年に分析した勾配消失問題です。係数が1を超える場合、勾配は幾何級数的に増大し、勾配爆発が発生します。次のコードは、50ステップのシーケンスにおいて、各入力が最終隠れ状態に与える影響を測定します。

import torch
from torch import nn

torch.manual_seed(0)
rnn = nn.RNN(input_size=8, hidden_size=32, batch_first=True)
x = torch.randn(1, 50, 8, requires_grad=True)  # one 50-step sequence

# Backpropagate from the final hidden state to the input at every step
output, h_n = rnn(x)
h_n.sum().backward()
grad_norms = x.grad[0].norm(dim=1)

for distance in [0, 10, 20, 30, 40]:
    print(f"Input {distance:>2} steps before the end: gradient {grad_norms[-1 - distance]:.1e}")

1.6e+00、3.4e-03、6.2e-06、1.2e-08、1.1e-11の勾配を、終了前の入力0、10、20、30、40ステップについて出力します。10ステップごとに約3桁ずつコストが増加するため、学習で数十ステップ前の入力を利用できるように重みを調整するのは困難です。2013年にRazvan PascanuらがRNN向けに分析した勾配クリッピングは勾配の爆発を抑え、切り詰めたBPTTは逆伝播を一定のウィンドウに制限してメモリ使用量を抑えます。勾配消失にはアーキテクチャの変更が必要であり、LSTMとGRUのゲートがその役割を果たします。

  • LSTMとGRU: 情報と勾配を多数のステップにわたって伝える加算型の状態更新を備えたゲート付きRNNです。実際には、「RNN」は単純なRNNだけでなく、これらのモデルも指すことがよくあります。
  • Transformer: 履歴を1つの状態に圧縮する代わりに、以前のすべての位置に直接注意を向け、すべての位置を並列に学習します。注意機構のコストは系列長に応じて増加しますが、RNNでは新しいステップごとに同じ計算量とメモリを使用します。
  • 畳み込みニューラルネットワーク(CNN): 画像内の空間方向、または1D畳み込みによる時間方向で、固定サイズのフィルターを使って近傍の位置を組み合わせます。受容野はネットワークの深さによって決まります。
  • 状態空間モデル: Mambaなどの線形再帰モデルはスキャン処理によって並列学習し、推論時にはRNNのようにステップごとに実行されます。液体ニューラルネットワークは、ニューロンが微分方程式に従う連続時間RNNです。

用途#

  • キーボード予測: Gboardの次単語予測モデルは、軽量なLSTMの一種である入力・忘却ゲート結合型LSTMでした。Googleの研究者が2018年に説明したように、ユーザーのスマートフォン上で連合学習を用いて学習されました。
  • 需要予測: AmazonのDeepARは、関連する多数の時系列に対して1つの自己回帰RNNを学習し、将来の各値について確率分布を出力します。
  • ストリーミング音声: ウェイクワード検出器やノイズ抑制器は、小さな再帰層を使って音声をフレーム単位で処理します。これにより、スマートフォンやイヤホンでメモリ使用量とレイテンシーが一定に保たれます。
  • 物体追跡: トラッカーはフレームごとに物体ごとの状態を保持します。これはRNNの隠れ状態が担う役割に相当します。YOLO26のtrackモードに組み込まれているByteTrackやBoT-SORTからデフォルトのTrackTrackまで、すべてのトラッカーは、学習済みの重みの代わりに速度一定の方程式を手動で設定した線形再帰であるカルマンフィルターを使って状態を更新します。

ソリューションを見る

スポーツにおけるコンピュータービジョン

スポーツにおけるコンピュータービジョン

Ultralytics YOLOが、選手やボールの追跡、パフォーマンス分析、コーチングへの知見、アスリートのリハビリを通じて、スポーツビジョンをどのように支えるかをご紹介します。
詳しく見る
航空画像向けコンピュータービジョン

航空画像向けコンピュータービジョン

Ultralytics YOLOを使用して、ドローンや航空画像をリアルタイムの知見に変換し、農業、水産養殖、自然保護、地理空間分析に活用できます。
詳しく見る
航空宇宙分野のコンピュータービジョン

航空宇宙分野のコンピュータービジョン

Ultralytics YOLOを活用して航空宇宙分野でコンピュータビジョンを導入し、航空機検査、滑走路上のFOD検出、空港の地上業務、複合材の欠陥検出に活用できます。
詳しく見る
セキュリティ分野のコンピュータービジョン

セキュリティ分野のコンピュータービジョン

Ultralytics YOLOモデルであらゆる施設を保護しましょう。ビジョンAIは、周辺監視、脅威検知、ナンバープレート認識、職場の安全管理を支援します。
詳しく見る
ロボティクス分野のコンピュータービジョン

ロボティクス分野のコンピュータービジョン

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律ナビゲーション、認識、物体追跡、リアルタイム制御を支援します。
詳しく見る
物流におけるコンピュータービジョン

物流におけるコンピュータービジョン

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物検査、仕分け、車両追跡、倉庫のリアルタイム安全監視を実現します。
詳しく見る
小売業におけるコンピュータービジョン

小売業におけるコンピュータービジョン

Ultralytics YOLOモデルで小売のあり方を変革しましょう。ビジョンAIにより、在庫追跡、棚の監視、行列管理、より高度な顧客インサイトを実現します。
詳しく見る
医療分野におけるコンピュータービジョン

医療分野におけるコンピュータービジョン

Ultralytics YOLOモデルで医療ソリューションを構築しましょう。医療分野のビジョンAIは、医用画像処理の高速化、より高度な診断、患者モニタリングを実現します。
詳しく見る
製造業におけるコンピュータービジョン

製造業におけるコンピュータービジョン

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPE準拠、組立ラインの自動化を推進します。
詳しく見る
自動車分野におけるコンピュータービジョン

自動車分野におけるコンピュータービジョン

Ultralytics YOLOモデルで自動車分野にコンピュータービジョンを導入しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳しく見る
農業におけるコンピュータービジョン

農業におけるコンピュータービジョン

Ultralytics YOLOモデルでスマート農業にビジョンAIを導入しましょう。作物のモニタリング、家畜の追跡、精密農業を支援し、より高く効率的な収量を実現します。
詳しく見る

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

機械学習の未来に向けた歩みを始めましょう