메모리 뱅크는 머신러닝 알고리즘에서 과거 반복 과정이나 처리된 샘플의 정보를 저장하고 참조하기 위해 사용되는 데이터 구조로, 모델의 메모리 용량을 즉각적인 계산 제약으로부터 효과적으로 분리합니다. 딥러닝(DL)의 맥락에서 메모리 뱅크는 일반적으로 임베딩이나 특징 벡터의 저장소 역할을 합니다. 이를 통해 모델은 모든 데이터를 활성 랜덤 액세스 메모리(RAM)에 동시에 재처리하거나 유지할 필요 없이 방대한 과거 입력 기록과 현재 입력을 비교할 수 있습니다. 표현 버퍼를 유지함으로써 모델은 더 넓은 맥락에서 학습할 수 있어, 장기적 일관성이나 대규모 데이터셋 대비 비교가 필요한 작업에서 성능을 향상시킵니다.
메모리 뱅크의 주요 기능은 현재 배치 크기 이상의 정보를 확장하는 것이다. 훈련 과정에서 데이터가 신경망을 통과할 때, 생성된 특징 표현들은 뱅크로 밀려 들어간다. 뱅크가 최대 용량에 도달하면, 일반적으로 가장 오래된 특징들이 제거되어 새로운 특징들을 위한 공간을 마련하는데, 이 과정을 선입선출(FIFO) 큐라고 한다.
이 메커니즘은 특히 중요한데 그 이유는 GPU 메모리는 유한합니다. 메모리 뱅크가 없다면 단일 이미지를 백만 개의 다른 이미지와 비교하는 작업은 표준 하드웨어에 수용 불가능한 배치 크기를 요구할 것입니다. 메모리 뱅크를 사용하면 모델은 백만 개의 이미지에 대한 경량 벡터를 저장하고 내적(dot product)이나 코사인 유사도(cosine similarity)와 같은 유사도 검색 기법을 활용해 이를 효율적으로 참조할 수 있습니다.
메모리 뱅크는 여러 첨단 컴퓨터 비전(CV) 및 자연어 처리 워크플로우의 핵심 요소로 자리 잡았습니다:
메모리 뱅크를 용어집에 수록된 다른 저장 및 처리 개념과 구분하는 것이 유용합니다:
다음 사항 Python 다음 코드 조각은 선입선출(FIFO) 메모리 뱅크 개념을 보여줍니다. torch이 구조는 사용자 정의 훈련 루프나 복잡한 추론 작업 중 특징 벡터의 누적 기록을 유지하는 데 자주 사용됩니다.
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 데이터를 체계화하고, 실험을 track , 모델을 효율적으로 배포할 수 있는 중앙 집중식 허브를 제공합니다. 특징 저장 및 검색의 복잡성을 관리하는 것은 실험적 인공지능(AI) 에서 견고한 생산 시스템으로 전환하는 데 필수적입니다.