Memory Bank
ディープラーニングにおけるメモリバンクとは何かを学びます。メモリバンクが対照学習、物体追跡、ビデオ理解のためにどのように埋め込みを保存するかを探ります。
Memory Bankとは、機械学習アルゴリズムで使用されるデータ構造であり、過去のイテレーションや処理済みサンプルからの情報を保存・参照することで、モデルのメモリ容量と即時の計算制約を効果的に切り離します。ディープラーニング (DL)のコンテキストにおいて、Memory Bankは通常、エンベディングや特徴ベクトルを格納するリポジトリとして機能します。これにより、モデルは大量の過去の入力をすべて一度にアクティブなランダムアクセスメモリ(RAM)に保持したり再処理したりすることなく、現在の入力と比較することが可能になります。表現のバッファを維持することで、モデルはより広範なコンテキストから学習し、長期的な整合性や大規模なデータセットとの比較が必要なタスクのパフォーマンスを向上させることができます。
Link to this sectionMemory Bankの仕組み#
Memory Bankの主な機能は、現在のバッチサイズを超える情報を利用できるようにすることです。トレーニング中にデータがニューラルネットワークを通過すると、得られた特徴表現がMemory Bankにプッシュされます。バンクが最大容量に達すると、通常は最も古い特徴が削除され、新しい特徴のためのスペースが確保されます。これは先入れ先出し(FIFO)キューとして知られるプロセスです。
GPUメモリは有限であるため、このメカニズムは特に重要です。Memory Bankがなければ、単一の画像を100万枚の画像と比較するには、標準的なハードウェアでは不可能なバッチサイズが必要になります。Memory Bankを使用することで、モデルはそれら100万枚の画像の軽量ベクトルを保存し、ドット積やコサイン類似度といった類似度検索技術を用いて効率的に参照できるようになります。
Link to this section実社会での応用#
Memory Bankは、いくつかの高度なコンピュータビジョン (CV)および自然言語ワークフローにおいて重要な要素となっています。
- 対照学習(自己教師あり学習): 最も有名なアプリケーションの一つに、対照学習、特にMomentum Contrast (MoCo) のようなアルゴリズムがあります。ここでの目標は、特定の画像を多くの「ネガティブ」サンプル(異なる画像)から識別するようにモデルをトレーニングすることです。Memory Bankは数千のネガティブサンプルの表現を保存し、ラベル付きのトレーニングデータを必要とせずに、モデルが堅牢な特徴を学習できるようにします。技術的な詳細については、研究者は多くの場合、このアプローチを一般化させたMoCoの論文を参照します。
- Long-Term Object Tracking: In video analysis, an object (like a car or person) may be temporarily obscured by an obstacle. Standard trackers might lose the object's identity (ID) during this occlusion. Advanced trackers use a memory bank to store the visual features of objects detected in the past. When the object reappears, the system queries the bank to re-establish the correct ID. Users leveraging Ultralytics YOLO26 for object tracking benefit from similar internal logic that maintains identity consistency across frames.
- 動画理解: 数秒から数分にわたるアクションを認識するには、モデルは時間的なコンテキストを必要とします。Memory Bankは過去のフレームやクリップのバッファとして機能し、ネットワークが動画の終盤を処理している間に、開始時に何が起こったかを「記憶」できるようにします。これは正確なアクション認識において極めて重要です。
Link to this section関連概念の区別#
用語集にある他の保存・処理の概念とMemory Bankを区別すると理解しやすくなります。
- Memory Bank vs ベクトルデータベース: 両者とも検索用にエンベディングを保存しますが、Memory Bankは通常、単一のモデルセッションのトレーニングやアクティブ推論中に動的に使用される一時的なインメモリ構造です。一方、ベクトルデータベース(RAGで使用されるものなど)は、長期間存続し、複数のアプリケーションにサービスを提供することを目的とした永続的かつスケーラブルなストレージソリューションです。
- Memory Bank vs コンテキストウィンドウ: コンテキストウィンドウ(Transformerで一般的)は、モデルが一度に処理する最大入力シーケンス長(例:32kトークン)を定義します。Memory Bankは、アクティブな処理ウィンドウの「外側」に圧縮表現を保存する外部バッファであり、Transformer-XLのようなアーキテクチャに見られるように、理論上は無限のメモリ深度を可能にします。
- Memory Bank vs バッチサイズ: バッチサイズは、勾配更新のために並列処理されるサンプルの数を決定します。Memory Bankは、順伝播および逆伝播の計算コストを増加させることなく、比較のためにモデルが「認識」できるサンプルの実効数を増加させます。
Link to this sectionコード例:特徴バンクのシミュレーション#
以下のPythonスニペットは、torchを使用した先入れ先出し(FIFO)方式のMemory Bankの概念を示しています。この構造は、カスタムトレーニングループや複雑な推論タスク中に、特徴ベクトルのローリング履歴を維持するために頻繁に使用されます。
import torch
# Initialize a memory bank (Capacity: 100 features, Vector Dim: 128)
# In a real scenario, these would be embeddings from a model like YOLO26
memory_bank = torch.randn(100, 128)
# Simulate receiving a new batch of features (e.g., from the current image batch)
new_features = torch.randn(10, 128)
# Update the bank: Enqueue new features, Dequeue the oldest ones
# This maintains a fixed size while keeping the memory 'fresh'
memory_bank = torch.cat([memory_bank[10:], new_features], dim=0)
print(f"Updated Memory Bank Shape: {memory_bank.shape}")
# Output: Updated Memory Bank Shape: torch.Size([100, 128])Link to this section課題と考慮事項#
Memory Bankは強力ですが、「表現のドリフト」という課題をもたらします。エンコーダーネットワークはトレーニングステップごとにわずかに変化するため、100ステップ前にバンクに保存された特徴は「陳腐化」しているか、現在のモデルの状態と矛盾している可能性があります。(モデルのゆっくりと更新される平均である)モメンタムエンコーダーを使用するような手法が、この問題を軽減するのに役立ちます。
これらの高度な手法を利用するデータセットのバージョン管理やモデル成果物の管理を検討しているチームにとって、Ultralytics Platformは、データを整理し、実験を追跡し、モデルを効率的にデプロイするための中央ハブを提供します。実験的な人工知能 (AI)から堅牢な本番システムへ移行するには、特徴の保存と検索の複雑さを管理することが不可欠です。






