연관 기억(Memoria asociativa): Hopfield와 주의력(Attention)을 연결한 2020년 연구
요약
본 기사는 1982년 Hopfield가 제시한 연관 기억(Associative Memory) 개념이 현대 트랜스포머의 주의력 메커니즘과 깊은 수학적 연결고리를 가지고 있음을 설명합니다. 불완전하거나 노이즈가 포함된 입력으로부터 완전한 패턴을 복구하는 원리는, Query-Key-Value를 이용한 Attention 공식의 핵심 작동 방식과 본질적으로 동일합니다.
핵심 포인트
- Hopfield 네트워크는 부분적인 단서로 완전한 기억을 복구하는 연관 기억 모델입니다.
- Attention 메커니즘은 유사성 기반 검색으로, Hopfield 네트워크와 수학적 동등성을 가집니다.
- 이 이해는 Attention의 오작동 원리나 컨텍스트 확장 시 메모리 용량 변화를 설명합니다.
1982년, 물리학자 John Hopfield는 신경망 모델을 발표했으며, 이는 40년 후 GPT, Claude, Gemini를 지탱하는 주의력(attention) 메커니즘의 개념적 기반이 되었습니다. 핵심 아이디어는 연관 기억(memoria asociativa)입니다. 즉, 완전한 패턴을 저장하고 불완전하거나 노이즈가 포함된 버전으로부터 이를 복구하는 네트워크로, 컴퓨터 메모리처럼 정확한 주소를 사용하지 않습니다.
연구원 Alex Wang은 최근 논문에서 이 연결고리를 재구성했습니다. 그는 단지 패턴을 저장하고 복구한다는 아이디어만으로도, 논문을 외우지 않고 주의력 공식(attention formula)을 도출하는 과정을 단계별로 보여주었습니다.
요약 (TL;DR)
- Hopfield 네트워크는 불완전하거나 노이즈가 포함된 패턴의 버전으로부터 완전한 패턴을 복구합니다.
- 네트워크 에너지는 업데이트될 때마다 감소하여, 저장된 패턴 중 가장 유사한 패턴에 안정화됩니다.
- 트랜스포머(transformer)의 주의력 메커니즘은 벡터 간의 유사성(similarity)을 통해 동일한 방식으로 복구를 계산합니다.
- Query, Key, Value 행렬은 이러한 연관 검색을 GPU에서 병렬 곱셈으로 변환합니다.
- 35년 후, 2017년 주의력 논문이 이 수학적 동등성을 공식화했습니다.
연관 기억이란 무엇인가?
연관 기억(memoria asociativa)은 완전한 패턴을 그 일부 또는 노이즈가 포함된 버전으로부터 복구하는 저장 모델입니다. 이는 전통적인 컴퓨터 메모리처럼 정확한 주소를 사용하지 않습니다. Hopfield 네트워크는 이 개념의 고전적인 구현체입니다.
RAM 메모리에서는 주소 0x4F2A에 위치한 데이터를 요청하면, 찾으려는 것과 얼마나 유사한지와 상관없이 기계가 그 데이터를 제공합니다. 내용 기반 주소 지정(direccionable por contenido) 메모리는 이 순서를 뒤집습니다. 데이터의 조각, 손상되거나 불완전한 패턴을 입력하면, 시스템은 저장된 패턴 중 가장 유사한 것을 반환합니다. 이는 세 개의 음표만으로 노래를 알아차릴 때 뇌가 사용하는 것과 같은 논리입니다.
이 모델을 이해하는 것이 왜 중요한가?
Hopfield 네트워크는 소프트웨어 공학이 아닌 생물 물리학에서 탄생했습니다: Hopfield는 뇌가 부분적인 단서로부터 완전한 기억을 어떻게 회복하는지 설명하고자 했습니다. 수년 동안 이 네트워크는 신경망 강의의 흥미로운 주제로 남아 있었지만, 실제 적용에서는 더 유연한 아키텍처에 의해 추월당했습니다.
전환점은 여러 연구자들이 Hopfield 네트워크의 업데이트 규칙이 2017년에 논문 Attention Is All You Need에서 대중화된 어텐션(Attention) 공식과 항별로 유사하다는 것을 알아차리면서 찾아왔습니다. 연관적 회복을 이해하는 것은 더 이상 학술적인 고고학이 아닙니다: 이는 왜 어텐션이 때때로 잘못된 토큰에 수렴하는지, 마치 Hopfield 네트워크가 잘못된 에너지 최소값에 안정화될 수 있는 이유, 그리고 컨텍스트를 확장하는 것이 모델의 유효 기억 용량을 어떻게 변화시키는지 설명해 줍니다.
프롬프트를 조정하거나 에이전트를 설계하는 사람에게 이 글은 잘 알려진 현상을 설명합니다: 컨텍스트에서 여러 번 반복되는 데이터는 한 번만 언급된 것보다 더 강하게 회복됩니다. 에너지 관점에서 볼 때, 여러 번 강화된 패턴은 네트워크가 찾기 더 쉽고 깊은 우물을 만듭니다.
Hopfield는 현대 GPU가 존재하기 이전에인 1982년에 모델을 공식화했습니다.
Hopfield 네트워크의 작동 방식
클래식한 Hopfield 네트워크는 +1 또는 -1 값을 갖는 N개의 이진 뉴런으로 구성됩니다. 패턴을 기억하려면, 네트워크는 이를 셀에 저장하는 것이 아니라 Hebb 규칙을 사용하여 가중치 행렬 W에 인코딩합니다. 여기서 각 가중치 $W_{ij}$는 패턴의 값 i와 j의 곱으로 계산되며, 어떤 뉴런도 스스로를 강화하지 않도록 대각선은 0입니다.
헤브 규칙(Hebb's rule)은 $p_i imes p_j$가 두 뉴런이 저장된 패턴에서 일치할 때 양수이고 다를 때 음수가 되기 때문에 작동합니다. 이 곱들을 가중치 행렬 W에 합산하면서, 각 뉴런 쌍은 얼마나 자주 패턴에서 일치했는지에 따라 서로 강화되거나 억제되는 법을 배웁니다. 이는 50년대부터 '함께 발화하는 뉴런은 함께 연결된다(neurons that fire together, wire together)'로 요약되어 온 헤브 가소성(Hebbian plasticity)의 수학적 버전입니다.
손상된 입력으로부터 패턴을 복구하기 위해, 현재 네트워크는 각 뉴런을 하나씩 업데이트합니다. 각 뉴런은 다른 뉴런들로부터 받은 신호들을 가중치에 따라 합산하고, 이 합계의 부호를 자신의 새로운 값으로 취합니다. 이러한 업데이트를 반복하면 시스템은 에너지 함수 $E = -0.5 imes x^T W x$의 최저점으로 끌어당겨집니다. 가중치가 대칭적이기 때문에, 비동기(asynchronous) 업데이트는 에너지가 절대 오르지 않도록 보장하며, 따라서 시스템은 안정적인 최소점, 즉 입력에 가장 가까운 저장된 패턴으로 수렴합니다.
업데이트를 적용하는 방식에는 두 가지가 있습니다: 비동기적(한 번에 한 뉴런씩, 무작위 순서로) 또는 동기적(모두 동시에). 에너지가 절대 오르지 않는다는 보장은 가중치가 대칭적인 비동기 업데이트에만 해당합니다. 모든 뉴런을 동시에 업데이트할 경우 시스템이 두 상태 사이에서 진동하여 결코 수렴하지 않을 수 있는데, 이는 모델의 단순화된 설명에서는 거의 항상 생략되는 세부 사항입니다.
이 안정적인 최소점이 정의상 복구된 기억입니다. 연관 기억은 네트워크가 특정 방향을 찾는 것이 아니라, 원래 패턴과 일치하는 에너지 우물(energy well) 속으로 떨어지기 때문에 작동합니다.
고전적인 Hopfield 네트워크의 용량은 제한적입니다. Amit, Gutfreund, Sompolinsky가 1985년에 제시한 고전 이론에 따르면, 기억된 패턴들이 서로 혼합되기 시작하는 지점(crosstalk)에서 실질적인 한계는 뉴런 수의 약 14% 부근에 위치합니다. 뉴런이 100개일 경우, 복구가 실패하기 전에 겨우 14개의 다른 패턴만을 처리할 수 있습니다.
실제 예시: 파이썬 네 줄로 구현한 연관적 복구(associative retrieval)
가장 간단한 예시는 4개의 뉴런으로 구성된 네트워크에 들어갑니다. 패턴 $[1, -1, 1, -1]$을 저장하고, 비트 하나만 반전시킨 버전을 입력하여 네트워크가 이를 수정하는지 확인합니다:
import numpy as np
patter = np.array([1, -1, 1, -1])
...
출력은 원래 패턴과 정확히 일치하며, 비트 하나만 다른 입력이 들어왔음에도 불구하고 그렇습니다:
[ 1 -1 1 -1]
손상된 뉴런(세 번째)은 $1$ 대신 $-1$로 들어왔지만, 나머지 세 뉴런으로부터 $+3$의 순 신호를 받아 단 한 번의 업데이트만으로 부호가 수정됩니다. 패턴이 더 길어지면 복구에 여러 라운드가 필요하지만, 메커니즘 자체는 동일합니다.
두 번째 예시는 두 개의 패턴 $[1, -1, 1, -1]$과 $[1, 1, -1, -1]$을 저장하며, 이들은 서로 직교(orthogonal)합니다:
patter = [np.array([1, -1, 1, -1]), np.array([1, 1, -1, -1])]
W = sum(np.outer(p, p) for p in patter)
np.fill_diagonal(W, 0)
...
네트워크는 두 개의 패턴을 저장하고 있음에도 불구하고 여전히 [ 1 -1 1 -1]을 복구합니다. 이는 직교하기 때문에 서로 간섭하지 않기 때문입니다. 만약 이 두 패턴 중 하나와 상관관계가 있는 세 번째 패턴을 추가하면, 위에서 언급된 14%의 한계치보다 훨씬 더 빨리 crosstalk 위험이 나타납니다.
연관적 기억(associative memory) 실험 시작하기
이전 예시들을 본인의 컴퓨터에서 실행하려면 Python 3과 NumPy만 필요합니다. Linux와 macOS에서는:
python3 -m pip install numpy
python3 hopfield_demo.py
Windows에서는 PowerShell 또는 CMD에서 python3 대신 python을 사용한 동일한 명령어를 사용합니다.
두 가지 예제 코드를 hopfield_demo.py 파일에 저장하고 실행하세요: API 키도 필요 없고, 외부 의존성도 없으며, 이 정도 규모의 네트워크에는 GPU가 필요하지 않습니다.
연관 기억의 실제 사용 사례
- 교육적 오류 수정: 신경망 과정에서는 분산 시스템이 명시적인 복구 알고리즘 없이 어떻게 노이즈를 수정하는지 보여주기 위해 Hopfield 네트워크를 사용합니다. 예를 들어, 이미지의 절반의 픽셀만으로 완전한 이진 이미지를 복구하는 방식입니다.
- 에너지 기반 모델: 볼츠만 머신(Boltzmann machines)과 확산 모델(diffusion models)은 모두 에너지 함수를 최소화하여 유효 패턴에 안정화되는 공통 논리를 공유하며, 시스템이 해당 표면의 최솟값으로 떨어지게 함으로써 새로운 데이터를 생성합니다.
- 대안적 어텐션 레이어: 논문 Hopfield Networks is All You Need (2020)은 트랜스포머(transformer)의 어텐션 레이어를 직접 대체할 연속형 Hopfield 레이어를 제안하며, 선형이 아닌 지수적인 저장 용량을 가집니다.
- 언어 모델 해석 가능성: 어텐션을 연관적 검색으로 생각하면, 모델의 메모리 오류를 설명되지 않은 블랙박스 미스터리가 아니라 잘못된 에너지 최솟값으로의 수렴으로 다룰 수 있게 됩니다.
또 다른 오류는 가중치 행렬 W의 대칭성을 깨뜨리는 것입니다. 수렴 보장은 W가 대칭적(W_ij = W_ji)이라는 전제에 달려 있습니다. 만약 Hebb 규칙과 다른 방식으로 네트워크를 훈련시키면서 대칭성을 확인하지 않는다면, 에너지가 감소한다는 수학적 보장을 잃게 되며, 시스템은 안정화되지 않고 진동할 수 있습니다.
마지막으로, 고전적인 이진(binary) 및 반복 업데이트 방식을 사용하는 Hopfield 네트워크와, softmax를 사용하여 단일 단계에서 패턴을 복구하는 현대적인 연속 버전(continuous version)을 혼동하기 쉽습니다. 이들은 수학적으로는 친척이지만, 용량과 수렴 특성이 다르므로 이를 상호 교환 가능한 것으로 취급하면 실제 어텐션이 1982년의 원래 네트워크와 얼마나 유사한지에 대해 잘못된 결론에 도달하게 됩니다.
비교: 고전적 Hopfield, 현대적 Hopfield 및 트랜스포머 어텐션
다음 표는 동일 원리의 세 가지 버전을 가장 오래된 것부터 현재 프로덕션에서 사용되는 순서로 요약합니다:
| 모델 | 업데이트 규칙 | 용량 | 어텐션과의 관계 |
|---|---|---|---|
| 고전적 Hopfield (1982) | 가중 합의 부호, 반복적 | ~0.14 × N 패턴 | 개념적 조상, 이산 업데이트 |
| 현대적 연속 Hopfield (2020) | 유사도에 대한 Softmax, 단일 단계 | N에 대해 지수 함수적 | 어텐션 레이어와 수학적으로 동등 |
| 트랜스포머의 어텐션 | Softmax(QKᵀ/√d) · V | 컨텍스트 윈도우에 의해 제한됨 | 연속적인 연관 기억 복구의 특수한 경우 |
심층 분석: 이산 에너지에서 연속 Softmax로
Hopfield Networks is All You Need에 설명된 Hopfield 네트워크의 현대적 버전은 이진 뉴런을 연속 벡터로 변경하고, 업데이트 규칙을 log-sum-exp 기반 에너지 함수로 대체합니다. 이 에너지를 단일 단계에서 최소화한 결과는 항별(term by term)로 어텐션 공식입니다: 쿼리(query)와 키(key) 집합 간의 유사도에 대한 softmax를 계산하고, 여기에 연관된 값(value)을 곱하는 방식입니다.
트랜스포머의 언어에서 질의(Query)는 네트워크에 들어오는 손상되거나 부분적인 패턴이며, 키(Key)는 유사도로 비교되는 저장된 패턴이고, 값(Value)은 키가 일치할 때 실제로 검색되는 것입니다. Hopfield의 고전적인 방식과 다른 점은 검색이 반복적이지 않다는 것입니다. softmax 함수는 각 키가 질의와 얼마나 비슷한지에 따라 가중치가 부여된 모든 값의 조합을 한 번에 계산합니다.
sequenceDiagram
participant Q as 질의 (Query)
participant K as 저장된 키 (Key)
...```
```mermaid
flowchart LR
A["입력 임베딩"] --> B["질의 행렬"]
A --> C["키 행렬"]
...
연속 버전은 베타(beta)라는 추가 매개변수를 추가하는데, 이는 주의 집중 공식의 $1/ ext{d}$ 계수와 동일하며 검색이 얼마나 강한지를 제어합니다. 베타가 낮으면 네트워크는 질의와 유사한 모든 패턴의 흐릿한 평균을 반환하여 마치 희미한 기억처럼 작동하고, 베타가 높으면 1982년 고전적인 네트워크와 마찬가지로 단일 저장된 패턴으로 수렴합니다. 현대 트랜스포머들은 중간 지점에서 작동합니다. 즉, 전체 컨텍스트를 균등하게 평균 내지도 않고 단일 토큰을 검색하지도 않으며, 소수의 토큰이 출력을 지배하는 가중 조합을 반환합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기