BioPlayground

🧬
목록으로

어텐션 메커니즘 — 종양 미세환경의 문맥적 판정

트랜스포머의 심장인 어텐션을 병리 슬라이드의 종양 미세환경 문맥 판정으로 이해합니다. Scaled dot-product·multi-head·causal masking·KV cache·GQA·Flash Attention까지.

입문
|
22
|
검증 완료 (2026-07)
진행률0/15 (0%)

어텐션 메커니즘 — 종양 미세환경의 문맥적 판정

이 토픽을 마치면

편 #5에서 자리만 표시하고 미뤄뒀던 트랜스포머의 심장, 어텐션(attention) 을 파헤칩니다. 왜 필요한가, 무엇을 하는가, 그리고 오늘날 LLM이 다루는 128K 토큰 문맥이 어떻게 계산되는가.

이 편이 이야기의 정점입니다. 편 #1~5의 부품들 — 다음 어절 예측, 다이얼 3,362만 개, 경사하강법, 역전파, 임베딩·잔차·정규화 — 이 어텐션과 만나면서 트랜스포머가 완성됩니다. 편 #7부터 다룰 프롬프트 엔지니어링·RAG·에이전트도 이 어텐션의 성질을 뿌리로 삼습니다.


편 #1의 "간" 문제로 돌아오기

편 #1의 다의어 예시를 떠올려봅시다.

  • "간이 부었네" — 신체 장기 (肝)
  • "간이 딱 맞다" — 짠맛의 정도
  • "3년이 간 뒤에" — 시간이 흐르다

"간"이라는 어절의 임베딩은 편 #5에서 봤듯이 고정된 하나의 벡터입니다. 그런데 이 벡터가 세 문장에서 다른 의미로 쓰였습니다. 훈련된 신경망이 이 세 경우를 어떻게 구별해서 처리할까요.

방법은 이렇습니다. 문맥에 있는 다른 어절들이 이 "간"의 표현에 흘러들어와 문맥에 맞는 의미로 변형시킵니다. "부었네"가 있으면 신체 장기 쪽으로, "딱 맞다"가 있으면 짠맛 쪽으로, "3년이"가 있으면 시간 흐름 쪽으로. 이 흘러들어옴을 담당하는 부품이 어텐션.

즉 어텐션은 트랜스포머 안에서 어절의 표현이 문맥에 맞춰 문맥화(contextualize) 되는 과정입니다. 임베딩 벡터가 정적인 사전 표현이라면, 어텐션 이후 벡터는 문장 안에서의 살아있는 의미.

이제 어텐션이 이걸 어떻게 하는지 배웁니다.


순진한 방법의 실패 — 균일 평균의 문제

어절 사이 정보를 흘리는 가장 단순한 방법. 문장의 모든 토큰 벡터를 그냥 평균 냄.

text
contextualized(간) = (vec(간) + vec(이) + vec(부었) + vec(네)) / 4

문제: 모든 어절이 균일하게 반영됩니다. "간"의 의미를 결정하는 데는 "부었네"가 결정적이고 "이"는 별로 중요하지 않은데, 균일 평균은 이걸 구별하지 못합니다.

우리에게 필요한 것: 각 어절이 얼마나 반영될지를 상황에 맞춰 다르게 정하는 방법. "간"의 의미를 결정할 때는 "부었네"에 80%, "3년이"에 5%, "이"에 5%처럼.

이 "얼마나 반영할지"를 계산하는 게 어텐션이 하는 일입니다. 각 어절 쌍(query-key)마다 어텐션 가중치를 계산하고, 이걸로 정보를 가중 평균 냅니다.


병리 슬라이드에서 T cell을 판정하는 병리학자

바이오 유비 하나. 편 #2에서 봤던 병리 슬라이드에 이어집니다.

여러분이 병리학자로서 조직 슬라이드에서 한 T cell을 관찰하고 있다고 합시다. 이 T cell이 지금 어떤 상태인지 판정해야 합니다 — 활성화되었는가, 소진(exhaustion)되었는가, 조절 T cell인가.

이 판정은 T cell 자체의 형태만 보고 내릴 수 없습니다. 주변 세포 환경(종양 미세환경, tumor microenvironment)을 봐야 합니다.

  • 이 T cell 바로 옆에 종양 세포가 다수 있다면? → 종양을 공격 중이거나 무력화된 상태
  • 근처에 다른 T cell·수지상 세포가 많다면? → 면역 반응이 활성화된 위치
  • 주변이 섬유아세포·콜라겐 매트릭스로 두꺼워져 있다면? → 스트로마 장벽에 갇힌 상태
  • 조절 T cell(Treg) 가까이 있다면? → 억제되어 있을 가능성

각 주변 세포가 지금 판정에 얼마나 중요한지가 다릅니다. 종양 세포의 밀도가 높으면 이 정보가 결정적, 스트로마의 두께는 상대적으로 덜 결정적. 병리학자는 무의식적으로 각 주변 세포에 다른 가중치를 부여해서 판정합니다.

이걸 정량화하면 어텐션의 정확한 구조가 나옵니다. 세 부품이 필요합니다.

  • Query (질의): 지금 판정하려는 T cell이 "무엇을 알고 싶은가". 예를 들어 "나는 CD8+ T cell인데, 내가 지금 종양을 공격 중인지 소진되었는지 알고 싶다".
  • Key (열쇠): 주변 각 세포가 "어떤 정보를 제공할 수 있는지". 예를 들어 종양 세포는 "PD-L1 발현 여부", 수지상 세포는 "항원 제시 상태", 스트로마 세포는 "물리적 장벽 정도".
  • Value (값): 실제로 전달되는 정보 내용. 예를 들어 종양 세포의 PD-L1 발현 수준, 수지상 세포의 활성 상태 등.

지금 T cell의 Query를 주변 각 세포의 Key와 비교해서, "얼마나 잘 맞는가"를 점수화합니다. 잘 맞는 세포의 Value가 이 T cell 판정에 크게 반영되고, 안 맞는 세포는 무시.

이것이 어텐션의 뼈대입니다.


Query, Key, Value — 어절의 세 얼굴

트랜스포머의 어텐션도 정확히 이 삼각 구조입니다.

문장의 각 어절 벡터가 세 가지 파생 벡터로 변환됩니다.

  • Query (Q): "이 어절이 문맥에서 무엇을 알고 싶은가"
  • Key (K): "이 어절이 다른 어절에게 어떻게 자기를 광고하는가"
  • Value (V): "이 어절이 실제로 전달하는 내용"

각각은 어절의 임베딩 벡터에 세 개의 학습된 가중치 행렬 W_Q, W_K, W_V를 곱해서 얻습니다.

text
Q_i = W_Q · x_i
K_i = W_K · x_i
V_i = W_V · x_i

x_i는 i번째 어절의 임베딩 벡터. 이 세 벡터는 원본 벡터보다 대개 작은 차원(예: 원본 4096차원 → Q/K/V 각각 128차원).

직관. 하나의 어절 벡터가 세 개의 "얼굴"을 가진다고 볼 수 있습니다. Query 얼굴로 다른 어절에게 "너 나한테 유용해?"라고 묻고, Key 얼굴로 다른 어절의 물음에 "나는 이런 정보를 가지고 있어"라고 답하고, Value 얼굴로 실제 정보를 전달합니다.

Q, K, V 세 얼굴이 서로 다른 것이 중요합니다. 어절이 자기를 광고하는 방식(Key)과 다른 어절을 조사하는 방식(Query)이 다를 수 있고, 실제로 전달하는 정보(Value)도 이 둘과 다를 수 있음. 이 분리 덕에 어텐션이 매우 유연한 정보 흐름을 표현합니다.


Scaled Dot-Product Attention의 수식

이제 실제 계산. 어절 i가 어절 j에 대해 계산하는 어텐션 스코어(attention score):

text
score(i, j) = ⟨Q_i, K_j⟩ / sqrt(d_k)

두 벡터의 내적(dot product)입니다. 두 벡터의 방향이 비슷하면 점수가 크고, 다르면 작음.

sqrt(d_k)로 나누는 이유. Q와 K가 d_k 차원 벡터인데, 무작위 벡터의 내적은 d_k가 커지면 크기가 대략 sqrt(d_k)로 커집니다. 이 나눗셈이 없으면 벡터 차원이 커질 때 스코어가 폭발해서 다음 단계의 softmax가 극단으로 치닫습니다. 이 스케일링이 트랜스포머 훈련 안정성의 숨은 영웅. 부록 A.2에서 정확한 이유를 유도.

이제 어절 i의 관점에서, 문장의 모든 어절에 대해 스코어를 계산했습니다. 이 스코어들을 softmax로 확률 분포로 변환합니다.

text
α(i, j) = exp(score(i, j)) / Σ_k exp(score(i, k))

Σ_j α(i, j) = 1. 각 어절이 다른 어절들에 대해 100%의 주의력을 분배.

Softmax는 편 #1 A.2와 편 #3 A.4에서 이미 마주쳤던 함수. 여기서는 어절 사이의 경합을 확률 분포로 만드는 역할.

마지막으로 이 가중치로 Value 벡터들을 가중 평균:

text
output_i = Σ_j α(i, j) · V_j

이것이 어절 i의 어텐션 후 표현.

전체 문장 단위로 행렬 형태로 쓰면 훨씬 간결.

text
Attention(Q, K, V) = softmax(Q · K^T / sqrt(d_k)) · V

이 한 줄이 트랜스포머의 심장입니다. 원 논문 "Attention Is All You Need"의 제목이 이 식을 가리킵니다.


Multi-Head Attention — 여러 각도로 병렬 판정

어텐션 하나로도 정보 흐름은 가능하지만, 실무에서는 항상 여러 개의 어텐션을 병렬로 씁니다. 이걸 멀티 헤드 어텐션(multi-head attention) 이라 합니다.

각 헤드는 자기만의 W_Q, W_K, W_V를 가지고 독립적으로 어텐션을 계산합니다. 결과들을 이어 붙인 후 하나의 출력 가중치 행렬 W_O로 다시 결합.

text
head_h = Attention(Q · W_Q^h, K · W_K^h, V · W_V^h)
MultiHead = Concat(head_1, ..., head_H) · W_O

H는 헤드 수. GPT-2 medium에서 16, GPT-3에서 96, LLaMA-70B에서 64.

왜 여러 헤드가 필요한가. 한 헤드는 하나의 "관점"에만 특화됩니다. 예를 들어 어떤 헤드는 "직전 어절에 주목", 다른 헤드는 "문장 앞부분 명사에 주목", 또 다른 헤드는 "괄호 쌍 맞추기에 주목" 하는 식. 여러 헤드가 있으면 다양한 문법·의미 관계를 동시에 처리할 수 있습니다.

바이오 대응 — 다양한 마커의 병렬 판정. 병리학자가 T cell을 판정할 때 단 하나의 특성만 보고 결정하지 않습니다. CD8/CD4 마커, 활성화 마커(CD69, HLA-DR), 소진 마커(PD-1, TIM-3, LAG-3), 조절 마커(FoxP3) 등을 동시에 병렬로 검사하고, 각 결과를 종합해 판정. 각 마커 검사가 하나의 어텐션 헤드에 해당하고, 최종 종합이 W_O 결합에 해당합니다. 이 병렬 관점 유비가 멀티 헤드의 핵심.

해석 가능성. 훈련된 트랜스포머의 어텐션 헤드들을 조사한 연구에서, 서로 다른 헤드가 실제로 다른 언어적 패턴을 담당한다는 것이 밝혀졌습니다. 예를 들어 GPT-2의 어떤 헤드는 정확히 "직전 어절"에만 주목하고, 다른 헤드는 "동일 명사의 이전 등장"을 추적합니다. 최근 mechanistic interpretability 연구가 이 헤드별 기능을 카탈로그하고 있습니다.


Causal Masking — 미래를 보면 안 되는 문제

LLM은 다음 어절 예측 훈련을 받습니다(편 #1). 이때 중요한 제약: 아직 예측하지 않은 미래 어절을 참고하면 안 됩니다.

예를 들어 "고양이가 물고기를 좋아"까지 본 상태에서 다음 어절을 예측할 때, 이 다음에 나올 "합니다"를 참고하면 훈련이 무의미해집니다. 훈련은 항상 "지금까지 본 것"만으로 다음을 예측해야 합니다.

어텐션은 기본적으로 문장의 모든 어절을 참고할 수 있는 구조입니다. 그래서 미래를 못 보게 하려면 명시적으로 막아야 합니다. 이를 인과 마스킹(causal masking) 이라 합니다.

방법. 스코어 행렬에서 상삼각(어절 i에서 j > i인 위치)을 -∞로 설정합니다. Softmax를 통과하면 -∞가 확률 0이 되어 미래 어절이 무시됩니다.

text
score(i, j) = ⟨Q_i, K_j⟩ / sqrt(d_k)  if j ≤ i
score(i, j) = -∞                      if j > i

이 마스킹이 있는 어텐션이 causal attention 또는 decoder attention. GPT 계열이 이걸 씀. 마스킹 없는 어텐션이 bidirectional attention. BERT 계열이 이걸 씀. LLM은 대부분 causal.

바이오 대응 — 미묘하지만 유비 가능. 발생학에서 세포가 분화 결정을 내릴 때, 그 세포는 아직 발생하지 않은 하류 세포의 정보를 이용할 수 없습니다. 시간 순서상 상류 세포의 신호만 반영. Causal masking이 하는 일이 정확히 이 시간적 인과성을 강제하는 것.


Self-Attention vs Cross-Attention

지금까지 이야기한 어텐션은 문장 안에서 Q·K·V가 모두 같은 어절 집합에서 나옵니다. 이를 셀프 어텐션(self-attention) 이라 합니다. 어절이 문장 자기 자신 안에서 정보를 흘려받는 구조.

크로스 어텐션(cross-attention) 은 Q가 한 집합에서, K·V가 다른 집합에서 나옵니다. 예를 들어 번역 모델에서 목표어 어절이 소스어 어절들을 참고할 때. 이미지 캡셔닝에서 텍스트 어절이 이미지 패치들을 참고할 때. Multimodal 모델의 뼈대.

  • 셀프 어텐션: Q, K, V 모두 같은 시퀀스. 대부분의 LLM.
  • 크로스 어텐션: Q는 한 시퀀스, K·V는 다른 시퀀스. Multimodal·번역.

원 트랜스포머 논문의 인코더-디코더 구조에서는 셀프 어텐션과 크로스 어텐션을 모두 씀. 순수 디코더 LLM(GPT 계열)은 셀프 어텐션만 씀. 최근 vision-language 모델(GPT-4V·Claude Vision 등)에서 크로스 어텐션이 다시 부각됨.


KV Cache — 추론을 100배 빠르게

훈련이 아니라 추론(inference) 단계로 넘어가면 재미있는 최적화가 등장합니다.

LLM이 텍스트를 생성할 때 이렇게 진행됩니다.

  • 프롬프트 "고양이가"를 입력.
  • 모델이 다음 어절 예측: "물고기를"
  • 프롬프트가 "고양이가 물고기를"이 됨. 다시 모델에 입력.
  • 다음 예측: "좋아"
  • 프롬프트가 "고양이가 물고기를 좋아"가 됨. 다시 입력.
  • ...

매 스텝마다 프롬프트 전체를 재계산하면 스텝 t에서 계산량이 O(t^2). 100번 생성하려면 10000 유닛 계산.

관찰. 이전 스텝에서 계산한 어절들의 K와 V는 그 다음 스텝에서도 동일합니다. 인과 마스킹 덕분에 과거 어절의 Q, K, V는 새 어절이 추가되어도 변하지 않습니다. 그러니 이걸 캐시해두면 됨.

이것이 KV 캐시(KV cache). 각 층의 K, V 벡터를 GPU 메모리에 저장해두고, 매 스텝마다 새 어절 하나의 Q만 계산해서 캐시된 K, V와 어텐션. 스텝당 계산량이 O(t)로 줄어듭니다. 100 스텝 생성이 10000100 유닛으로 100배 빨라짐.

대가. GPU 메모리를 많이 씁니다. 층 96개 × 헤드 96개 × 12288차원 × 컨텍스트 128K × 배치 크기... 계산하면 수백 GB. 대형 모델의 긴 문맥 추론이 GPU 메모리 제약을 받는 이유가 여기 있습니다.

이 KV cache 최적화가 오늘날 ChatGPT·Claude가 실시간 대화 가능한 결정적 이유. 캐시가 없으면 응답이 몇 십 초 걸립니다.


GQA와 MQA — KV 캐시를 줄이는 진화

KV 캐시 크기가 너무 커서 새 아이디어가 나왔습니다. 여러 Query 헤드가 하나의 Key/Value 헤드를 공유.

  • Multi-Head Attention (MHA): Q, K, V가 각각 H개 헤드. 기본형.
  • Multi-Query Attention (MQA): Q는 H개 헤드, K와 V는 각각 1개 헤드. 극단적. KV 캐시 H배 절약.
  • Grouped-Query Attention (GQA): 중간. Q는 H개 헤드, K와 V는 각각 G개(G < H) 헤드. 예: H=32, G=8이면 4개 Q가 1개 K/V 공유.

MQA는 캐시를 최대로 줄이지만 품질 손실이 있음. GQA는 절충안으로 품질을 거의 유지하면서 캐시를 크게 절약. LLaMA-2·LLaMA-3, Qwen, Mistral 등 최신 모델이 GQA를 씀. 오늘의 표준.


Flash Attention — 메모리 벽을 뚫는 구현

어텐션 계산의 병목은 사실 연산량이 아니라 GPU 메모리 대역폭입니다. Q · K^Tn × n 크기 행렬(n = 시퀀스 길이)이라 128K 문맥에서 128000 × 128000 행렬이 필요. HBM(GPU 메모리)에서 SRAM(칩 위 캐시)로 이 큰 행렬을 왕복시키는 시간이 실제 계산보다 훨씬 오래 걸림.

Flash Attention (Dao et al., 2022)은 이 왕복을 최소화하는 구현. 큰 어텐션 행렬을 블록 단위로 쪼개서 SRAM 안에서 처리하고, HBM에 큰 행렬을 물질화하지 않음. 수학적 결과는 동일한데 속도는 2~10배 빠르고 메모리는 O(n²)에서 O(n)으로 줄어듭니다.

Flash Attention이 128K, 200K, 1M 토큰 문맥이 실용 가능해진 결정적 이유. 오늘날 거의 모든 대형 모델 훈련·추론이 Flash Attention을 씀. Flash Attention 2·3으로 계속 개선.

포인트. 알고리즘 이론이 아니라 하드웨어에 맞춘 구현 최적화가 오늘의 LLM 확장을 뒷받침합니다. 딥러닝 시스템 엔지니어링의 중요성.


어텐션 이후 — 다음 어절 예측까지

지금까지의 부품 정리. 어텐션 블록이 어절 벡터들을 문맥화하고, 그 다음 편 #5에서 다룬 FFN이 이 문맥화된 표현을 더 처리하고, 여러 블록을 통과한 후, 마지막에 언어 모델링 헤드(임베딩과 유사한 d × V 크기 행렬)가 다음 어절의 확률 분포를 만듭니다.

훈련 시에는 이 분포와 실제 다음 어절의 교차 엔트로피가 손실. 편 #3·4의 역전파가 이 손실을 어텐션 파라미터까지 흘려보내 학습합니다. 결과적으로 어텐션이 "언어를 문맥화하는 데 가장 유용한 방식"으로 저절로 자리 잡음.

어텐션 매트릭스의 해석. 훈련이 끝난 모델의 어텐션 스코어 α(i, j)를 시각화하면 특정 언어 패턴이 드러납니다. 예를 들어:

  • 직전 토큰 헤드: 대각선 바로 아래에 집중된 스코어. 문법적 인접성.
  • 이전 명사 참조 헤드: 대명사에서 이전 명사로 향하는 스코어. Coreference resolution.
  • 문장 종결 헤드: 문장 끝 토큰에서 문장 시작으로 향하는 스코어. 문장 구조 요약.

이 시각화가 mechanistic interpretability 연구의 시작점. Anthropic·OpenAI·구글 등이 어텐션 패턴 분석으로 LLM 내부 회로를 리버스 엔지니어링하는 중.


바이오 응용 시나리오

시나리오 1 — ESM의 아미노산 접촉 예측

편 #4·5에서 언급한 ESM 단백질 언어 모델의 어텐션이 놀라운 성질을 보입니다. 훈련이 끝난 ESM의 어텐션 매트릭스를 조사하면, 3차 구조에서 물리적으로 접촉하는 아미노산 쌍에 어텐션이 자연스럽게 강하게 집중됩니다.

즉 모델에게 "구조를 예측해"라고 훈련시킨 것이 아닌데, 그냥 다음 아미노산 예측 훈련만 시켰는데도, 어텐션이 자동으로 3차 접촉을 잡습니다. 이 어텐션 지도가 AlphaFold 초기 단계에서 접촉 예측 도구로 활용됩니다.

이는 어텐션의 일반적 힘을 보여주는 사례. 관련된 정보에 주목한다는 원리가 언어에도, 생명 시퀀스에도 통합니다.

시나리오 2 — Enformer의 인핸서-프로모터 연결

편 #5에서 언급한 Enformer(유전체 트랜스포머)의 어텐션. 100kb 문맥에서 프로모터(유전자 시작 부위)와 그로부터 수십 kb 떨어진 인핸서(조절 요소)를 연결시킴. 훈련이 끝나면 어텐션 헤드 중 일부가 인핸서-프로모터 쌍을 자동으로 학습합니다.

전통적으로 인핸서-프로모터 매칭은 3D 유전체 접촉 실험(Hi-C)이 필요했는데, Enformer는 서열만으로 이 관계를 예측합니다. 어텐션이 "긴 거리 상호작용을 학습하는 능력" 덕입니다.

시나리오 3 — 병리학 이미지의 세포 문맥 판정

편 #2·6의 시나리오를 실제로 구현한 사례. Vision Transformer(ViT) 기반 병리학 모델이 슬라이드의 각 패치(작은 정사각 영역)에 대해 어텐션을 계산해서 종양 미세환경을 판정합니다. 각 T cell 패치가 주변 종양 세포·기질 세포 패치와 어텐션 관계를 맺고, 이를 종합해 T cell 상태를 예측.

이 계열 모델(예: HIPT, CTransPath 등)이 정밀 종양 진단·예후 예측에서 병리학자 수준의 성능을 보이기 시작.


핵심 정리

  • 어텐션은 어절 표현이 문맥에 맞게 문맥화되는 과정. 편 #1의 "간" 다의어 처리가 여기서 일어남.
  • 각 어절이 Q·K·V 세 얼굴을 가지고, Q와 K의 내적으로 어절 간 "주목도"를 계산, softmax로 확률화, V의 가중 평균으로 정보 흘려받음.
  • 수식 한 줄: Attention(Q, K, V) = softmax(Q · K^T / sqrt(d)) · V.
  • 멀티 헤드로 여러 관점 병렬 처리. 병리학자의 다중 마커 판정과 개념 정합.
  • Causal masking으로 미래 정보 차단. LLM 훈련의 필수.
  • KV cache로 추론 100배 가속. GQA로 캐시 크기 절약.
  • Flash Attention으로 128K+ 문맥 실용화. 하드웨어 인식 구현이 오늘의 LLM 확장을 뒷받침.
  • 어텐션은 언어뿐 아니라 단백질·유전체·이미지에도 통하는 일반 원리. 관련된 정보에 주목한다는 발상이 도메인을 넘어 재활용됨.

다음 개념


📐 부록 — 전문가를 위한 수학 공식

난이도: 매우 어려움 (Very Hard) 대상: 대학원 수준의 선형대수·확률·수치해석을 아는 독자

A.1 Scaled Dot-Product Attention 전체 수식

시퀀스 길이 n, 임베딩 차원 d, Q/K 차원 d_k, V 차원 d_v.

입력:

  • Q ∈ ℝ^{n × d_k} (질의)
  • K ∈ ℝ^{n × d_k} (열쇠)
  • V ∈ ℝ^{n × d_v} (값)

출력:

text
Attention(Q, K, V) = softmax(Q K^T / sqrt(d_k)) V

Softmax 행 방향 적용:

text
softmax(M)_{ij} = exp(M_{ij}) / Σ_k exp(M_{ik})

각 행이 확률 분포 (합 1).

최종 출력 형태: ℝ^{n × d_v}. 각 행이 대응 어절의 문맥화된 표현.

A.2 sqrt(d_k)로 나누는 이유의 유도

QK의 각 원소가 평균 0, 분산 1인 무작위 값이라 가정.

Q_iK_j의 내적:

text
⟨Q_i, K_j⟩ = Σ_{k=1}^{d_k} Q_{ik} K_{jk}

각 항 Q_{ik} K_{jk}가 독립이면 평균 0, 분산 1. 합의 분산은:

text
Var(⟨Q_i, K_j⟩) = d_k
Std(⟨Q_i, K_j⟩) = sqrt(d_k)

d_k가 크면 내적의 크기가 sqrt(d_k)로 커짐. d_k = 128이면 표준편차 약 11.3.

이걸 그대로 softmax에 넣으면 큰 값들이 극단으로 몰려 softmax 출력이 원-핫에 가까움. Softmax gradient가 사실상 0이 되어 훈련이 안 됨.

sqrt(d_k)로 나누면 표준편차가 1 부근으로 유지되어 softmax가 부드러운 분포를 출력. Gradient가 잘 흘러 훈련 가능.

A.3 Softmax의 편미분

p = softmax(z)일 때:

text
∂p_i/∂z_j = p_i · (δ_{ij} - p_j)

δ_{ij}는 크로네커 델타(i=j면 1, 아니면 0).

Cross-Entropy 손실과 결합:

정답 y (원-핫), 손실 L = -Σ y_i log p_i.

체인 룰:

text
∂L/∂z_j = p_j - y_j

편 #3 A.4의 우아한 결과. 어텐션 훈련의 그래디언트도 이 원리를 반복 활용.

A.4 Multi-Head Attention 수식

H개 헤드. 각 헤드 h:

text
Q_h = X · W_Q^h,  K_h = X · W_K^h,  V_h = X · W_V^h
head_h = Attention(Q_h, K_h, V_h)

W_Q^h, W_K^h ∈ ℝ^{d × d_k}, W_V^h ∈ ℝ^{d × d_v}. 대개 d_k = d_v = d/H.

결합:

text
MultiHead(X) = Concat(head_1, ..., head_H) · W_O

W_O ∈ ℝ^{H · d_v × d}.

파라미터 수:

  • Q, K, V 프로젝션 각각 d × d. 세 개니까 3 d^2.
  • 출력 프로젝션 d^2.
  • 4 d^2 per block.

편 #5 A.10의 계산에 부합.

A.5 Causal Mask 구현

Mask 행렬:

text
M_{ij} = 0        if j ≤ i
M_{ij} = -∞       if j > i

Attention 계산 시:

text
Attention_masked(Q, K, V) = softmax((Q K^T / sqrt(d_k)) + M) V

-∞가 softmax에서 exp(-∞) = 0이 되어 미래 위치에 확률 0 배정.

실무에서 -∞ 대신 큰 음수(예: -1e9) 사용해 수치 안정성 확보.

A.6 KV Cache 알고리즘

추론 시:

  • 스텝 1: Q_1, K_1, V_1 계산. 캐시에 [K_1], [V_1] 저장.
  • 스텝 2: 새 어절의 Q_2, K_2, V_2 계산. 캐시에 추가: [K_1, K_2], [V_1, V_2].
  • 스텝 t: 새 어절 Q_t만 계산. 캐시된 K, V로 어텐션.

메모리:

  • 층당 헤드 수 H, 헤드 차원 d_h, 컨텍스트 n, 배치 B
  • 층 하나의 KV 캐시: 2 · B · n · H · d_h · bytes_per_value

예: LLaMA-70B, H=64, d_h=128, n=128K, B=1, fp16:

text
2 · 1 · 128000 · 64 · 128 · 2 = 4.19 GB per layer

층 80개면 335 GB. 대형 모델의 긴 컨텍스트가 메모리 한계인 이유.

A.7 GQA (Grouped-Query Attention)

  • Q 헤드 수: H_Q
  • K, V 헤드 수: H_KV
  • 그룹 크기 g = H_Q / H_KV

같은 그룹의 Q 헤드들이 하나의 K, V 헤드를 공유:

text
head_i = Attention(Q_i, K_{i // g}, V_{i // g})

KV 캐시 크기 g배 감소. g = H_Q (모든 Q가 하나의 KV 공유)이면 MQA.

LLaMA-2-70B: H_Q = 64, H_KV = 8, g = 8. 캐시 8배 절약.

A.8 Flash Attention 블록 알고리즘

핵심 아이디어: 큰 n × n 어텐션 행렬을 SRAM에 물질화하지 않고, 블록별 tiling으로 계산.

Online Softmax: Softmax를 블록별로 stream 계산하는 알고리즘. 각 블록에서 부분 max와 부분 exp sum을 유지하며 결합.

블록 크기 B_r(행) × B_c(열):

  • Q를 B_r씩 로드
  • K, V를 B_c씩 순회
  • 각 (Q_block, K_block)에 대해 부분 스코어와 부분 exp sum 계산
  • 이전 블록 결과와 결합 (online softmax formula)

결과:

  • 시간: 이론적 FLOP 동일, 실제 wallclock은 2~4배 빠름 (메모리 병목 해소)
  • 메모리: O(n²) → O(n)
  • 정확도: 완전 동일 (수치 오차 미미)

A.9 Sparse Attention 계열

긴 문맥을 다루기 위한 근사 기법.

  • Sliding Window Attention: 각 토큰이 근처 w개 토큰만 참조. O(nw) 계산. Mistral·Longformer 채택.
  • Longformer: Sliding window + 몇 개의 전역 토큰.
  • BigBird: Sliding + 전역 + 무작위 어텐션.
  • Sparse Attention (GPT-3): 특정 패턴(strided, factorized) 어텐션.

트레이드오프: 근사이므로 품질 손실. Flash Attention의 성공 이후 상대적으로 덜 필요해짐. 여전히 매우 긴 문맥(1M+)에서 유용.

A.10 어텐션의 계산·메모리 복잡도

시퀀스 길이 n, 차원 d:

  • Full Attention: 시간 O(n²d), 메모리 O(n² + nd)
  • Flash Attention: 시간 O(n²d), 메모리 O(n · d) (블록 크기만 SRAM에)
  • Sliding Window: 시간 O(nwd), 메모리 O(nd)

n = 128K일 때 이 16억. 이 규모의 행렬 계산이 실용화된 것이 Flash Attention 덕. 오늘 대형 LLM의 긴 문맥 능력이 이 알고리즘·시스템 협력의 산물.


참고 자료

본 편의 콘텐츠·시나리오·비유·수치는 모두 BioPlayground 자체 개발이며, 아래는 개념 학습에 도움이 되는 외부 참고 자료입니다.

  • 원 트랜스포머 논문 (어텐션 정의): Vaswani et al., "Attention Is All You Need" (NeurIPS 2017)
  • Flash Attention: Dao et al., "FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness" (NeurIPS 2022)
  • Flash Attention 2: Dao, "FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning" (2023)
  • Multi-Query Attention: Shazeer, "Fast Transformer Decoding: One Write-Head is All You Need" (2019)
  • Grouped-Query Attention: Ainslie et al., "GQA: Training Generalized Multi-Query Transformer Models" (EMNLP 2023)
  • 어텐션 헤드 해석: Elhage et al., "A Mathematical Framework for Transformer Circuits" (Anthropic 2021)
  • 어텐션 헤드 카탈로그: Olsson et al., "In-context Learning and Induction Heads" (Anthropic 2022)
  • ESM 접촉 예측: Rao et al., "Transformer protein language models are unsupervised structure learners" (ICLR 2021)
  • Vision Transformer: Dosovitskiy et al., "An Image is Worth 16x16 Words" (ICLR 2021)
  • 딥러닝 시각화 교육: 3Blue1Brown "Deep Learning" Ch 6·7 (YouTube) — 페다고지 참고

편 #6으로 원리 편(Phase 1)이 마무리됩니다. 편 #7부터는 이 훈련된 트랜스포머를 실제로 어떻게 활용하는지 — 프롬프트 엔지니어링·RAG·에이전트 — 를 다룹니다.