ixaxaar/pytorch-dnc
Differentiable Neural Computers, Sparse Access Memory and Sparse Differentiable Neural Computers, for Pytorch
📚 pytorch‑dnc 는 무엇인가요?
pytorch‑dnc 는 PyTorch용 순수 파이썬 라이브러리로, 여러 가지 메모리 증강 신경망 아키텍처를 구현합니다:
| 아키텍처 | 논문 (원본) | 추가 기능 |
|---|---|---|
| DNC (Differentiable Neural Computer) | Graves et al., Nature 2016 | 재귀적 컨트롤러와 외부 행렬형 메모리로, 미분 가능한 읽기/쓰기 기능을 제공합니다. |
| SDNC (Sparse DNC) | Rae et al., NeurIPS 2018 | DNC와 동일하지만, 스파스 읽기/쓰기를 사용하여 수천 개의 메모리 슬롯까지 확장 가능합니다. |
| SAM (Sparse Access Memory) | Rae et al., NeurIPS 2018 | 어떤 RNN 컨트롤러에도 연결할 수 있는 독립형 스파스 메모리 모듈입니다. |
이 라이브러리는 이러한 모듈 중 하나를 PyTorch 모델에 삽입하고, 알고리즘적 추론이 필요한 작업(예: 시퀀스 복사, 덧셈, arg-max 등)에서 엔드투엔드로 학습할 수 있게 해줍니다.
🚀 빠른 시작
# PyPI에서 패키지 설치
pip install dnc
# (선택 사항) GPU 가속 스파스 연산은 FAISS 필요
conda install -c pytorch faiss-gpu
또는 소스에서 설치:
git clone https://github.com/ixaxaar/pytorch-dnc
cd pytorch-dnc
pip install -r requirements.txt
pip install -e .
🛠️ 모듈 사용 방법
세 클래스는 모두 동일한 생성자 시그니처를 공유합니다(대부분의 인수는 합리적인 기본값을 가집니다). 아래는 전형적인 DNC의 최소 예제입니다:
import torch
from dnc import DNC
# 64차원 입력과 128차원 은닉 상태를 가진 DNC 생성
model = DNC(
input_size=64,
hidden_size=128,
nr_cells=100, # 100개의 메모리 슬롯
cell_size=32, # 각 슬롯은 32차원 벡터를 저장
read_heads=4,
batch_first=True,
device=torch.device('cuda:0')
)
# 초기 은닉 상태 (컨트롤러, 메모리, 읽기 벡터) – 모델이 지연해서 생성하도록 함
h = (None, None, None)
# 랜덤 배치를 포워드 (seq_len=10, batch=4)
output, (h_ctrl, h_mem, h_read) = model(
torch.randn(10, 4, 64), # (seq_len, batch, input_dim)
h,
reset_experience=True # 새로운 에피소드 시작 시 메모리 초기화
)
SDNC 와 SAM 에도 동일한 패턴이 적용됩니다. 추가 인수는 sparse_reads, temporal_reads 뿐입니다.
디버그 모드
생성자에 debug=True 를 전달하세요. 이 경우 포워드 호출은 세 번째 값으로 NumPy 배열 딕셔너리를 반환합니다. 이는 memory, link_matrix, read_weights 등의 원시 메모리 행렬을 포함합니다. 이 데이터는 Visdom 같은 도구로 시각화하여 네트워크가 외부 메모리를 어떻게 사용하는지 확인할 수 있습니다.
📊 리포지토리에 포함된 예제 작업
리포지토리에는 고전적인 DNC 실험을 재현할 수 있는 실행 가능한 스크립트가 포함되어 있습니다:
| 작업 | 테스트 내용 | 실행 방법 |
|---|---|---|
| 복사 작업 | 임의 길이의 입력 시퀀스를 저장하고 재생산할 수 있는 능력. | python ./tasks/copy_task.py -cuda 0 -optim adam -sequence_max_length 8 |
| 덧셈 작업 | 긴 시퀀스 내에 배치된 두 숫자를 더하는 것을 학습 (원래의 "덧셈을 배우기" 벤치마크). | python ./tasks/add_task.py … (스크립트 도움말 참조) |
| argmax 작업 | 시퀀스 내 최댓값의 인덱스를 찾는 것. | python ./tasks/argmax_task.py … |
모든 작업은 풍부한 명령줄 옵션(학습률, 최적화 방법, 메모리 크기, 커리큘럼 학습 등)을 수용합니다. 복사 작업에서는 Visdom 서버를 시작(pip install visdom && python -m visdom.server)하여 학습 중 메모리 행렬의 히트맵을 시각화할 수도 있습니다.
🏗️ 코드 구조
├─ dnc/ # 핵심 구현 (DNC, SDNC, SAM)
├─ tasks/ # 복사/덧셈/argmax용 학습 스크립트
├─ docs/ # 아키텍처 다이어그램 및 스크린샷
├─ requirements.txt # 파이썬 종속성
└─ tests/ # pytest 테스트 세트
핵심 모듈은 순수한 PyTorch로 구성되며, FAISS 는 SDNC와 SAM에서 사용하는 GPU 가속 스파스 읽기/쓰기 기능에만 의존합니다.
📦 누가 이 라이브러리를 사용할 수 있을까요?
- 뉴럴 튜링 머신이나 기타 미분 가능한 데이터 구조를 실험하는 연구자.
- 시퀀스에서 시퀀스로 모델에 즉시 사용 가능한 외부 메모리가 필요한 실무자 (예: 프로그램 합성 또는 긴 컨텍스트에 대한 추론).
- DNC 논문의 개념을 구체적이고 실행 가능한 형태로 보여주고 싶은 교육자.
📚 추가 읽기
- 원본 DNC 논문 – Hybrid computing using a neural network with dynamic external memory (Graves et al., Nature 2016).
- 스파스 메모리 논문 – Scaling Memory‑Augmented Neural Networks with Sparse Reads and Writes (Rae et al., NeurIPS 2018).
✅ TL;DR
pytorch‑dnc 는 DNC, SDNC, SAM용으로 준비된, 잘 문서화된 PyTorch 모듈을 제공하며, 예제 학습 스크립트와 외부 메모리 내부를 들여다볼 수 있는 디버그 모드를 포함합니다. pip install dnc 로 설치하고, 모델에 DNC/SDNC/SAM 을 삽입한 후, 장거리 메모리가 필요한 알고리즘 작업에 대해 학습을 시작하세요.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- Dispatch