Memory Bank
ディープラーニングにおけるメモリバンクとは何かを学びます。メモリバンクが埋め込みを保存し、コントラスト学習、物体追跡、動画理解に利用される方法を解説します。
メモリバンクは、機械学習アルゴリズムで過去のイテレーションや処理済みサンプルの情報を保存・参照するために使用されるデータ構造であり、モデルのメモリ容量を直近の計算上の制約から効果的に切り離します。深層学習 (DL)の文脈では、メモリバンクは通常、埋め込みや特徴ベクトルのリポジトリとして機能します。これにより、モデルはアクティブなランダムアクセスメモリ (RAM) にすべてのデータを同時に再処理したり保持したりすることなく、現在の入力を過去の膨大な入力履歴と比較できます。表現のバッファーを維持することで、モデルはより広いコンテキストから学習でき、長期的な一貫性や大規模なデータセットとの比較が必要なタスクの性能を向上させます。
メモリバンクの仕組み#
メモリバンクの主な機能は、現在のバッチサイズを超えて利用可能な情報を拡張することです。トレーニング中にデータがニューラルネットワークを通過すると、生成された特徴表現がバンクに追加されます。バンクが最大容量に達すると、通常は新しい特徴のための空間を確保するために最も古い特徴が削除されます。これは先入れ先出し (FIFO) キューと呼ばれるプロセスです。
この仕組みが特に重要なのは、GPUメモリが有限だからです。メモリバンクがなければ、1枚の画像を他の100万枚の画像と比較するために、標準的なハードウェアには収まらないバッチサイズが必要になります。メモリバンクを使用すると、モデルは100万枚の画像の軽量なベクトルを保存し、内積やコサイン類似度などの類似度検索手法を使って効率的に参照できます。
実世界での利用例#
メモリバンクは、複数の高度なコンピュータビジョン (CV)および自然言語処理ワークフローの中核となっています。
- コントラスト学習(自己教師あり学習): 最も有名な用途の1つは、特にMomentum Contrast (MoCo) などのアルゴリズムにおけるコントラスト学習です。ここでは、特定の画像を多数の「ネガティブ」サンプル(異なる画像)から識別できるようにモデルを学習させることが目標です。メモリバンクには数千件のネガティブサンプルの表現が保存されるため、ラベル付きのトレーニングデータを必要とせずに、モデルは堅牢な特徴を学習できます。詳しい技術情報については、このアプローチを広めたMoCo論文が研究者によく参照されています。
- 長期オブジェクトトラッキング: ビデオ分析では、物体(車や人など)が障害物によって一時的に遮られることがあります。標準的なトラッカーでは、この遮蔽中に物体のIDを見失う場合があります。高度なトラッカーは、過去に検出された物体の視覚的特徴をメモリバンクに保存します。物体が再び現れると、システムはバンクを検索して正しいIDを再確立します。Ultralytics YOLO26をオブジェクトトラッキングに活用するユーザーは、フレーム間のIDの一貫性を維持する同様の内部ロジックのメリットを得られます。
- ビデオ理解: 数秒から数分にわたるアクションを認識するには、モデルに時間的コンテキストが必要です。メモリバンクは過去のフレームやクリップのバッファーとして機能し、ネットワークがビデオの終盤を処理しながら、冒頭で何が起きたかを「記憶」できるようにします。これは正確なアクション認識に不可欠です。
関連する概念との違い#
用語集にある他のストレージおよび処理の概念とメモリバンクを区別すると理解しやすくなります。
- メモリバンクとベクトルデータベースの比較: どちらも検索用の埋め込みを保存します。ただし、メモリバンクは通常、単一モデルセッションのトレーニングまたはアクティブな推論中に動的に使用される一時的なインメモリ構造です。一方、RAGで使用されるようなベクトルデータベースは、永続的でスケーラブルなストレージソリューションであり、無期限に存続して複数のアプリケーションにサービスを提供することを目的としています。
- メモリバンクとコンテキストウィンドウの比較: コンテキストウィンドウ(Transformerで一般的に使用されます)は、モデルが一度に処理する入力シーケンスの最大長(例: 32kトークン)を定義します。メモリバンクは、アクティブな処理ウィンドウの外部に圧縮表現を保存する外部バッファーです。これにより、Transformer-XLのようなアーキテクチャで見られるように、理論上は無限のメモリ深度を実現できます。
- メモリバンクとバッチサイズの比較: バッチサイズは、勾配更新のために並列処理するサンプル数を決定します。メモリバンクは、フォワードパスとバックワードパスの計算コストを増加させることなく、比較目的でモデルが「見る」ことのできる実効サンプル数を増やします。
コード例: Feature Bankのシミュレーション#
次のPythonスニペットは、torchを使用した先入れ先出し (FIFO) メモリバンクの概念を示しています。この構造は、カスタムトレーニングループや複雑な推論タスクで特徴ベクトルのローリング履歴を維持するためによく使用されます。
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])課題と考慮事項#
メモリバンクは強力である一方、「表現ドリフト」という課題をもたらします。エンコーダーネットワークはトレーニングの各ステップでわずかに変化するため、100ステップ前にバンクに保存された特徴は、現在のモデル状態に対して「古くなっている」または一貫性を欠いている可能性があります。モメンタムエンコーダー(モデルをゆっくり更新した平均値)の使用などの手法は、この問題の緩和に役立ちます。
これらの高度な手法を活用するデータセットバージョンとモデルアーティファクトを管理したいチーム向けに、Ultralytics Platformは、データの整理、実験の追跡、モデルの効率的なデプロイを行うための一元化されたハブを提供します。特徴の保存と取得の複雑さを管理することは、実験的な人工知能 (AI)から堅牢な本番システムへ移行するために不可欠です。









