트랜스포머 아키텍처의 Masked Attention 메커니즘

트랜스포머 아키텍처의 Masked Attention 메커니즘

1. 서론: 시퀀스 모델링의 패러다임 전환과 인과성의 본질

현대 인공지능, 특히 자연어 처리(NLP) 분야는 트랜스포머(Transformer) 아키텍처의 등장과 함께 혁명적인 전환기를 맞이했다. 이전 세대의 지배적인 아키텍처였던 순환 신경망(RNN)과 장단기 메모리(LSTM)는 데이터를 순차적으로 처리해야 한다는 구조적 제약으로 인해 병렬 연산의 이점을 충분히 활용하지 못했으며, 시퀀스의 길이가 길어질수록 정보가 희석되는 장기 의존성(Long-Term Dependency) 문제를 안고 있었다.1 이러한 배경 속에서 등장한 ‘Self-Attention’ 메커니즘은 입력 시퀀스 내의 모든 요소가 서로를 직접 참조함으로써 정보 전달 경로를 획기적으로 단축시키고, 대규모 병렬 처리를 가능하게 했다.

그러나 언어 모델링(Language Modeling)과 같은 생성적 작업(Generative Tasks)에서는 단순한 상호 참조 이상의 제약 조건이 요구된다. 인간이 언어를 구사할 때 이미 발화된 단어들의 문맥 위에서 다음 단어를 선택하듯이, 기계 모델 또한 텍스트를 생성하는 과정에서 아직 발생하지 않은 미래의 정보(Future Tokens)를 참조해서는 안 된다는 ’인과성(Causality)’의 원칙을 준수해야 한다.2 만약 모델이 학습 과정에서 미래의 단어를 미리 보고 예측을 수행한다면, 이는 데이터 누수(Data Leakage)에 해당하며, 실제 추론 단계에서는 미래 정보가 존재하지 않으므로 모델의 성능이 붕괴되는 결과를 초래한다.3

이러한 인과적 제약을 기술적으로 구현하고, 트랜스포머의 강력한 병렬 처리 능력을 유지하면서도 순차적인 생성 능력을 부여하는 핵심 메커니즘이 바로 **Masked Attention(마스크드 어텐션)**이다. 본 보고서는 Masked Attention의 수학적 기초부터 구현의 세부 사항, 학습 및 추론 과정에서의 역할, 그리고 최신 하드웨어 최적화 기술과의 상호작용까지 망라하는 심층적인 분석을 제공한다. 특히, Masked Self-Attention이 단순한 정보 차단막이 아니라, 현대 거대언어모델(LLM)의 생성 능력을 지탱하는 논리적 기반임을 규명하고, 다양한 변형 모델들과의 비교를 통해 그 기술적 의의를 고찰한다.

timeline
title "시퀀스 모델링 패러다임의 진화"
section "과거 (RNN 시대)"
"순차 처리 제약" : "병렬 연산 불가능"
"장기 의존성 문제" : "정보 희석 (Forgetting)"
section "전환기 (Attention 등장)"
"Self-Attention" : "전역적 참조" : "병렬 처리 가능"
"데이터 누수 문제" : "미래 정보 참조 (Cheating)"
section "현재 (Masked Attention)"
"인과성(Causality) 도입" : "미래 정보 차단"
"생성적 언어 모델" : "GPT, LLaMA 등 LLM 기반"

2. 어텐션 메커니즘의 기초와 구조적 진화

Masked Attention을 깊이 이해하기 위해서는 그 모태가 되는 Self-Attention의 기본 원리와, 이것이 해결하고자 했던 기존 방법론의 한계를 명확히 짚고 넘어갈 필요가 있다.

2.1 기존 순차 모델링의 한계와 어텐션의 등장

RNN 기반의 모델들은 입력 x_1, x_2,..., x_t를 처리하여 은닉 상태(Hidden State) h_t를 갱신하는 방식을 취한다. 이때 h_t는 이전 상태 h_{t-1}과 현재 입력 x_t의 함수인 f(h_{t-1}, x_t)로 정의된다. 이러한 재귀적 구조는 본질적으로 t 시점의 연산이 t-1 시점의 연산 완료를 기다려야 함을 의미하며, 이는 GPU와 같은 대규모 병렬 연산 하드웨어의 성능을 저하시키는 병목 요인이 된다.1 또한, 정보가 단계별로 압축되어 전달되면서 시퀀스 초반부의 정보가 후반부까지 온전히 보존되지 못하는 ‘망각(Forgetting)’ 현상이 발생한다.

어텐션 메커니즘은 이러한 순차적 경로를 우회하여, 출력 시점의 쿼리(Query)가 입력 시퀀스의 모든 키(Key)에 직접 접근하여 필요한 정보(Value)를 추출하는 ‘무작위 접근(Random Access)’ 방식을 도입했다. 이를 통해 정보 흐름의 길이를 시퀀스 길이 N에 관계없이 O(1)로 단축시켰다.

graph TD
subgraph "RNN (순차적 경로)"
R_x1["x1"] --> R_h1["h1"]
R_h1 --> R_h2["h2"]
R_x2["x2"] --> R_h2
R_h2 --> R_h3["h3"]
R_x3["x3"] --> R_h3
R_h3 --> R_out["출력 (Long Path)"]
style R_out stroke-dasharray: 5 5
end

subgraph "Attention (직접 접근)"
A_x1["x1"] --> A_out["출력 (Direct)"]
A_x2["x2"] --> A_out
A_x3["x3"] --> A_out
A_out -. "경로 길이 O(1)" .- A_out
end

2.2 Scaled Dot-Product Attention의 원리

트랜스포머의 핵심 연산 단위인 Scaled Dot-Product Attention은 쿼리(Q), 키(K), 밸류(V) 세 가지 행렬을 입력으로 받는다. 입력 토큰 시퀀스 X가 주어졌을 때, 각각의 가중치 행렬 W^Q, W^K, W^V를 통해 투영(Projection)된 후 다음과 같은 수식으로 계산된다.5

\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
여기서 QK^T는 쿼리와 키 사이의 유사도(Similarity)를 나타내는 내적(Dot Product) 값이며, 이를 키 벡터의 차원수 \sqrt{d_k}로 나누어 스케일링함으로써 기울기 소실(Gradient Vanishing) 문제를 방지한다.5 Softmax 함수는 이 유사도 점수를 확률 분포로 변환하여, 각 토큰이 다른 토큰들에 얼마나 집중(Attend)해야 하는지를 결정한다. 이 메커니즘은 기본적으로 ’전역적(Global)’이며 ’양방향(Bidirectional)’이다. 즉, 문장의 첫 번째 단어가 마지막 단어를 참조할 수 있고, 그 반대도 가능하다. 이는 문장의 전체적인 맥락을 이해(Understanding)하는 데에는 유리하지만, 단어를 순서대로 생성해야 하는 작업에는 적합하지 않다.

graph TD
subgraph "입력 단계"
X["입력 시퀀스 X"] --> Q_proj["W_Q 투영"]
X --> K_proj["W_K 투영"]
X --> V_proj["W_V 투영"]
end

subgraph "연산 단계"
Q_proj --> Q["Query (Q)"]
K_proj --> K["Key (K)"]
V_proj --> V["Value (V)"]

Q --> Dot["내적 (MatMul)"]
K --> Dot
Dot --> Scale["스케일링 (1 / sqrt(d_k))"]
Scale --> Score["유사도 점수"]
Score --> Soft["Softmax 함수"]
Soft --> Weight["어텐션 가중치"]

Weight --> Context["가중합 (MatMul)"]
V --> Context
end

Context --> Out["최종 어텐션 값 (Output)"]

3. Masked Self-Attention: 개념과 원리

Masked Self-Attention은 기본 Self-Attention에 ’시간의 방향성’이라는 제약을 가한 형태이다. 이는 모델이 현재 시점보다 미래에 위치한 토큰의 정보에 접근하는 것을 원천적으로 차단한다.

graph TD
Start["어텐션 스코어 계산 (Q * K_T)"] --> Decision{"위치 비교 (j > i?)"}

Decision -- "Yes (미래 토큰)" --> Block["참조 차단"]
Block --> ApplyInf["마스크 값 적용 (-∞)"]
ApplyInf --> ExpZero["Softmax 결과 ≈ 0"]

Decision -- "No (과거/현재 토큰)" --> Allow["참조 허용"]
Allow --> ApplyZero["마스크 값 적용 (0)"]
ApplyZero --> KeepScore["원래 스코어 유지"]

ExpZero --> Merge["확률 분포 생성"]
KeepScore --> Merge
Merge --> Result["인과성이 보장된 다음 토큰 예측"]

3.1 정보 누수(Information Leakage)와 치팅 방지

언어 모델의 학습 목표는 이전 토큰들의 시퀀스 x_{<t}가 주어졌을 때 다음 토큰 x_t의 확률 P(x_t | x_{<t})를 예측하는 것이다. 만약 어텐션 메커니즘이 전체 시퀀스에 대해 자유롭게 접근할 수 있다면, 모델은 문맥을 학습하여 다음 단어를 추론하는 대신, 단순히 입력에 포함된 정답(미래의 단어 x_t, x_{t+1},...)을 복사하여 출력하는 쉬운 길을 택하게 된다.5 이를 ‘치팅(Cheating)’ 또는 ’정보 누수’라 한다. Masked Attention은 어텐션 스코어 계산 단계에서 미래의 위치에 해당하는 연결을 끊어버림으로써 이러한 치팅을 방지하고, 모델이 오직 과거의 정보만을 바탕으로 추론하도록 강제한다.3

3.2 인과적 마스킹(Causal Masking)의 기하학

Masked Attention의 핵심은 어텐션 스코어 행렬에 적용되는 **상삼각 마스크(Upper Triangular Mask)**이다. N \times N 크기의 어텐션 행렬 A에서 A_{ij}i번째 토큰(Query)이 j번째 토큰(Key)에 주의를 기울이는 정도를 나타낸다. 인과성을 만족하기 위해서는 i번째 토큰은 j \le i인 경우에만 참조가 가능해야 한다. 즉, j > i인 경우(미래)는 참조가 불가능해야 한다.

이를 행렬 형태로 시각화하면 대각선을 기준으로 우상단(Upper Right) 부분이 모두 가려지는 형태가 된다.4

Query \ Keyt1t2t3t4
t_1허용차단차단차단
t_2허용허용차단차단
t_3허용허용허용차단
t_4허용허용허용허용

이러한 구조적 제약은 시퀀스 내의 각 토큰이 자신의 과거와 현재까지만 볼 수 있는 ’인과적 시야(Causal Horizon)’를 형성하게 한다.7

graph TD
Start["어텐션 스코어 계산 (Q * K_T)"] --> Decision{"위치 비교 (j > i?)"}

Decision -- "Yes (미래 토큰)" --> Block["참조 차단"]
Block --> ApplyInf["마스크 값 적용 (-∞)"]
ApplyInf --> ExpZero["Softmax 결과 ≈ 0"]

Decision -- "No (과거/현재 토큰)" --> Allow["참조 허용"]
Allow --> ApplyZero["마스크 값 적용 (0)"]
ApplyZero --> KeepScore["원래 스코어 유지"]

ExpZero --> Merge["확률 분포 생성"]
KeepScore --> Merge
Merge --> Result["인과성이 보장된 다음 토큰 예측"]

3.3 마스킹의 수학적 구현: 음의 무한대(-\infty)

마스킹을 구현할 때, 단순히 해당 위치의 값을 0으로 만드는 것이 아니라 **음의 무한대(-\infty)**에 가까운 매우 작은 값(예: -10^9 또는 -inf)을 더하는 방식을 사용한다.4 이는 Softmax 함수의 수학적 특성 때문이다.

Softmax 함수는 입력 벡터 z에 대해 다음과 같이 정의된다.

\text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j} e^{z_j}}
어텐션 스코어 S_{ij} = \frac{Q_i K_j^T}{\sqrt{d_k}}에 마스크 M_{ij}를 더할 때:

  • 참조 가능한 위치(j \le i): M_{ij} = 0 \rightarrow 값 변화 없음 (S_{ij} + 0 = S_{ij})
  • 참조 불가능한 위치(j > i): M_{ij} = -\infty \rightarrow S_{ij} - \infty = -\infty

Softmax를 통과하면:

e^{-\infty} \approx 0
따라서 마스킹된 위치의 어텐션 가중치(Attention Weight)는 0이 된다.10

만약 마스크 값으로 0을 사용한다면(M_{ij}=0), e^0 = 1이 되어 해당 위치에도 양수의 확률값이 할당된다. 이는 미래 토큰의 정보가 밸류(Value) 벡터의 가중합에 섞여 들어가는 결과를 초래하므로 인과성을 위배하게 된다. 따라서 반드시 음의 무한대를 사용하여 지수 함수 값을 0으로 수렴시켜야 한다.12

graph TD
subgraph "잘못된 접근 (Mask = 0)"
Wrong["마스크 값 = 0"] --> Exp1["e^0 = 1"]
Exp1 --> PosProb["양수의 확률 발생"]
PosProb --> Leak["정보 누수 (미래 참조)"]
end

subgraph "올바른 접근 (Mask = -∞)"
Right["마스크 값 = -∞"] --> Exp2["e^-∞ ≈ 0"]
Exp2 --> ZeroProb["확률 0"]
ZeroProb --> Blocked["정보 차단 성공 (인과성 준수)"]
end

4. 학습 역학: 교사 강요(Teacher Forcing)와 병렬화의 역설 해결

Masked Attention의 가장 큰 기술적 성취 중 하나는 순차적인 데이터 생성 과정을 학습시키면서도 연산의 병렬성을 확보했다는 점이다. 이는 ‘교사 강요(Teacher Forcing)’ 기법과 결합되어 트랜스포머의 학습 효율을 극대화한다.

graph TD
Data["전체 정답 데이터<br>(Ground Truth)"] --> Input["입력:<br>A B C D"]
Data --> Target["목표:<br>B C D E"]

Input --> Trans["트랜스포머 디코더<br>(병렬 연산)"]

subgraph "Masked Attention 내부"
Trans --> T1["t=1 (A)<br>-> 미래(B,C,D) 마스킹"]
Trans --> T2["t=2 (B)<br>-> 미래(C,D) 마스킹"]
Trans --> T3["t=3 (C)<br>-> 미래(D) 마스킹"]
Trans --> T4["t=4 (D)<br>-> 마스킹 없음"]
end

T1 --> Loss["손실 계산<br>(동시 수행)"]
T2 --> Loss
T3 --> Loss
T4 --> Loss
Target --> Loss

Loss --> Update["모델 가중치 업데이트<br>(Backprop)"]

4.1 병렬 학습(Parallel Training)의 메커니즘

RNN은 t 시점의 학습을 위해 반드시 t-1 시점의 은닉 상태 계산이 완료되어야 했다. 이는 학습 시간을 시퀀스 길이에 비례하여 증가시키는 원인이었다. 반면, 트랜스포머의 디코더는 학습 데이터의 전체 문장(Ground Truth)을 입력으로 받는다.

입력 행렬 X[x_1, x_2,..., x_{N-1}]로 구성되고, 목표(Target) 행렬 Y[x_2, x_3,..., x_N]으로 구성된다(Right-Shifted Outputs). 모델은 한 번의 전방 전달(Forward Pass)을 통해 N개의 모든 위치에 대한 예측을 동시에 수행한다.3 이때 Masked Attention은 물리적으로는 모든 데이터가 입력되었음에도 불구하고, 논리적으로는 각 위치 t에서 미래 정보 x_{t+1},...를 보지 못하도록 차단한다.

즉, GPU 상에서는 행렬 연산이 한꺼번에 병렬로 수행되지만, Masked Attention 행렬에 의해 정보의 흐름은 철저히 인과적으로 통제된다. 이를 통해 트랜스포머는 RNN과 달리 시퀀스 길이에 따른 순차적 지연 없이 고속으로 학습할 수 있다.3

4.2 교사 강요(Teacher Forcing)의 역할

이러한 학습 방식을 ’교사 강요’라고 한다. 모델이 학습 도중 t-1 시점에서 잘못된 예측 \hat{x}*{t-1}을 내놓았더라도, 다음 시점 t의 입력으로는 모델의 예측값이 아닌 실제 정답 x*{t-1}을 제공한다.16

  • RNN의 경우: 교사 강요를 사용하더라도 순차적 연산 구조 때문에 병렬화가 제한적이다.
  • Masked Attention의 경우: 모든 시점의 정답 데이터가 이미 확보되어 있으므로, 마스킹만 적용하면 모든 시점의 입출력 쌍 (x_{<t}, x_t)에 대한 손실(Loss)을 동시에 계산할 수 있다.

이 메커니즘은 GPT와 같은 대규모 언어 모델이 방대한 데이터를 효율적으로 학습할 수 있게 하는 근간이 된다. 만약 Masked Attention 없이 순차적으로 생성하며 학습해야 했다면, 현재의 LLM 학습 속도는 불가능했을 것이다.18

5. 추론 역학: 자기회귀적 생성과 KV 캐싱 최적화

학습 단계와 달리, 실제 텍스트를 생성하는 추론(Inference) 단계에서는 미래의 정답이 존재하지 않는다. 따라서 모델은 자신의 출력을 다음 단계의 입력으로 사용하는 자기회귀(Autoregressive) 모드로 동작해야 한다.

sequenceDiagram
title "추론 단계: 자기회귀 생성 및 KV 캐싱"
participant User as 사용자 입력
participant Model as 모델 (연산)
participant Cache as KV 캐시 메모리
participant Output as 출력 결과

User->>Model: "The" (t=1)
Model->>Model: Q, K, V 계산
Model->>Cache: "The"의 K, V 저장
Model->>Output: "cat" 예측

Output->>Model: "cat" (t=2) 입력
Model->>Model: "cat"의 Q, K, V 계산
Cache-->>Model: "The"의 K, V 불러오기
Model->>Model: Attention ("The" + "cat")
Model->>Cache: "cat"의 K, V 추가 저장
Model->>Output: "sat" 예측

Output->>Model: "sat" (t=3) 입력
Model->>Model: "sat"의 Q, K, V 계산
Cache-->>Model: "The", "cat"의 K, V 불러오기
Model->>Model: Attention ("The"+"cat"+"sat")
Model->>Output: "on" 예측

5.1 추론 시의 순차적 처리

추론 시에는 첫 번째 토큰을 생성하고, 이를 다시 입력에 추가하여 두 번째 토큰을 생성하는 과정을 반복한다.

  1. 입력: “The” \rightarrow 모델 \rightarrow 출력: “cat”
  2. 입력: “The cat” \rightarrow 모델 \rightarrow 출력: “sat”
  3. 입력: “The cat sat” \rightarrow 모델 \rightarrow 출력: “on”

이 과정에서 Masked Attention은 여전히 적용되지만, 그 의미가 학습 때와는 약간 다르다. 학습 때는 ‘미래의 정답을 보지 않기 위해’ 마스킹을 했다면, 추론 때는 ‘미래의 데이터가 아직 존재하지 않기 때문에’ 자연스럽게 인과적 구조를 따르게 된다.3 그러나 구조적 일관성을 위해(그리고 동일한 가중치를 사용하기 위해) Masked Attention 모듈은 그대로 유지된다.

5.2 KV 캐싱(KV Caching)을 통한 효율성 증대

추론 단계에서 매번 전체 시퀀스(예: “The cat sat”)를 다시 처리하여 Q, K, V를 계산하는 것은 매우 비효율적이다. “The“와 “cat“에 대한 K, V 벡터는 이전 단계에서 이미 계산되었으며, 어텐션 메커니즘 특성상 과거 토큰의 K, V 값은 변하지 않는다(과거가 미래에 영향을 받지 않으므로).

따라서 추론 시에는 과거 토큰들의 KV 벡터를 GPU 메모리에 캐시(Cache)해두고, 새로 들어온 토큰에 대해서만 Q, K, V를 계산한 뒤, 캐시된 값들과 결합하여 어텐션을 수행한다.3 이를 KV 캐싱이라 한다.

Masked Attention 구조 덕분에 i번째 토큰의 어텐션 결과는 j > i인 토큰의 영향을 받지 않음이 보장되므로, 이러한 캐싱 전략이 수학적으로 유효하다. KV 캐싱을 사용하면 추론 시 연산량이 시퀀스 길이의 제곱(O(N^2))에서 선형(O(N))으로 감소하여 생성 속도가 비약적으로 향상된다. 다만, 긴 시퀀스를 처리할 때 KV 캐시가 차지하는 메모리 용량이 급격히 증가하여 메모리 대역폭(Memory Bandwidth)이 병목이 되는 새로운 문제가 발생하기도 한다.19

6. 아키텍처 비교 분석: Encoder vs. Decoder vs. Encoder-Decoder

Masked Attention의 유무와 적용 방식은 트랜스포머 기반 모델들의 아키텍처와 활용 목적을 결정짓는 가장 중요한 기준이다.

mindmap
root(("트랜스포머 아키텍처"))
Encoder_Model["인코더 모델 (Encoder)"]
Type["양방향 Attention"]
Masking["No Causal Mask (MLM 사용)"]
Examples["BERT, RoBERTa"]
Purpose["이해, 분류 (Understanding)"]
Decoder_Model["디코더 모델 (Decoder)"]
Type["Masked Self-Attention"]
Masking["Causal Mask (-∞)"]
Examples["GPT, LLaMA, Claude"]
Purpose["생성 (Generation)"]
Enc_Dec_Model["인코더-디코더 (Encoder-Decoder)"]
Type["Hybrid"]
Masking["인코더: 양방향 / 디코더: Masked"]
Examples["T5, BART"]
Purpose["번역, 요약 (Seq2Seq)"]

6.1 인코더(Encoder) 모델 (예: BERT)

  • 어텐션 유형: 양방향 Self-Attention (Unmasked).
  • 특징: 모든 토큰이 서로를 참조할 수 있다. 문장 전체의 문맥을 동시에 파악하여 단어의 의미를 모호성 없이 이해(Understanding)하는 데 최적화되어 있다.
  • Masking의 의미: 여기서의 ’Masking’은 **Masked Language Modeling (MLM)**을 의미하며, 입력 텍스트의 일부를 `` 토큰으로 가리는 것이다. 어텐션 행렬 자체에는 마스크를 씌우지 않는다.20
  • 용도: 감성 분석, 개체명 인식, 질문 답변(추출형) 등 분류 및 이해 작업.

6.2 디코더(Decoder) 모델 (예: GPT, LLaMA)

  • 어텐션 유형: Masked Self-Attention (Causal).
  • 특징: 토큰이 과거의 정보만 참조할 수 있다. 텍스트를 순차적으로 생성(Generation)하는 능력에 특화되어 있다.
  • Masking의 의미: Causal Masking을 의미하며, 어텐션 스코어 행렬의 상삼각 부분을 -\infty로 가린다.2
  • 용도: 텍스트 생성, 챗봇, 스토리텔링, 코드 생성.

6.3 인코더-디코더(Encoder-Decoder) 모델 (예: T5, BART)

  • 어텐션 유형: 인코더는 양방향 Self-Attention, 디코더는 Masked Self-Attention, 그리고 디코더가 인코더를 참조할 때는 Cross-Attention(마스크 없음)을 사용한다.23
  • 특징: 입력 문장은 양방향으로 완벽하게 이해하고, 이를 바탕으로 출력 문장은 인과적으로 생성한다.
  • 용도: 기계 번역(번역할 원문은 다 보고, 번역문은 순차 생성), 요약.

6.4 비교 요약 표

특성BERT (Encoder)GPT (Decoder)T5 (Enc-Dec)
핵심 메커니즘Bidirectional Self-AttentionMasked Self-AttentionHybrid (Bidirectional + Masked)
참조 방향x_1 \leftrightarrow x_N (양방향)x_1 \rightarrow x_N (단방향)Enc: 양방향, Dec: 단방향
마스킹 목적빈칸 맞추기 학습 (MLM)미래 정보 차단 (Causal)생성 시 미래 차단
학습 방식Masked Language ModelingCausal Language ModelingSpan Corruption / Translation
강점문맥 이해, 분류유창한 텍스트 생성시퀀스 변환 (번역, 요약)

3

7. 구현의 미세 구조와 기술적 고려사항

실제 프로덕션 레벨의 딥러닝 프레임워크에서 Masked Attention이 구현될 때는 수치적 안정성과 효율성을 위해 다양한 기법이 적용된다.

7.1 PyTorch 구현 상세

PyTorch에서는 torch.triu 함수를 사용하여 마스크 행렬을 생성하고, masked_fill 메서드를 통해 마스킹을 수행한다.

# 마스크 생성: 상삼각 행렬 (대각선 포함 여부에 주의, 보통 diagonal=1로 설정하여 대각선 위쪽부터 가림)
mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1).bool()

# 어텐션 스코어 계산
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k)

# 마스킹 적용: 마스크가 True인 위치(미래)를 -inf로 채움
scores = scores.masked_fill(mask, float('-inf'))

# Softmax 적용
attention_weights = torch.softmax(scores, dim=-1)

여기서 float('-inf')를 사용하는 것은 이론적으로 완벽하지만, 일부 구현에서는 수치적 오버플로우나 NaN 발생을 방지하기 위해 -1e9와 같은 매우 작은 유한한 값을 사용하기도 한다.11 하지만 최신 라이브러리들은 -inf 처리가 잘 최적화되어 있어 안전하게 사용할 수 있다.

graph TD

Init["Q, K, V 텐서 준비"] --> Score["MatMul:<br>Score = Q * K^T"]
Score --> Scale["Scaling:<br>Score / sqrt(d_k)"]

subgraph "마스크 생성"
M1["Causal Mask<br>(상삼각 행렬)"]
M2["Padding Mask<br>(패딩 토큰 위치)"]
M1 --> Combine["Logical OR 결합"]
M2 --> Combine
end

Combine --> MaskedFill["Masked Fill<br>(True인 위치에 -inf 대입)"]
Scale --> MaskedFill

MaskedFill --> Softmax["Softmax 함수 적용"]
Softmax --> WeightedSum["Values와 내적<br>(MatMul)"]
WeightedSum --> Final["최종 출력"]

7.2 패딩 마스크(Padding Mask)와의 결합

실제 학습 시에는 배치(Batch) 처리를 위해 서로 다른 길이의 문장들을 패딩(Padding)하여 길이를 맞춘다. 이때 Masked Attention의 인과적 마스크뿐만 아니라, 패딩 토큰을 참조하지 않도록 하는 **패딩 마스크(Key Padding Mask)**도 함께 적용되어야 한다.4

최종 마스크는 인과적 마스크와 패딩 마스크의 합집합(Logical OR) 형태가 된다. 즉, “미래에 있는 토큰“이거나 “패딩 토큰“인 경우 모두 마스킹 처리된다.

7.3 교차 엔트로피 손실(Cross-Entropy Loss)과 시프트(Shift)

학습 시 입력과 정답 레이블을 구성할 때, 정답 레이블은 입력보다 한 칸씩 뒤로 밀린 형태(Shifted)여야 한다. 예를 들어 입력이 “A B C D“라면, 정답은 “B C D E“가 된다. 구현 시에는 입력 텐서 전체를 모델에 넣고, 출력 로짓(Logits)의 마지막 토큰을 제외한 부분(logits[:-1])과 정답 텐서의 첫 번째 토큰을 제외한 부분(targets[1:])을 비교하여 손실을 계산하는 방식이 주로 사용된다.27 Masked Attention 덕분에 이러한 일괄 처리가 가능하다.

graph TD

RawData["원본 시퀀스: [A, B, C, D]"]

subgraph "데이터 분할 (Slicing)"
InputSlice["입력 (x): [A, B, C]"]
TargetSlice["정답 (y): [B, C, D]"]
end

RawData -- "마지막 토큰 제외 ([:-1])" --> InputSlice
RawData -- "첫 토큰 제외 ([1:])" --> TargetSlice

InputSlice --> Model["트랜스포머 모델"]
Model --> Logits["예측 로짓: [P(B|A), P(C|AB), P(D|ABC)]"]

Logits <-->|Comparison| TargetSlice
TargetSlice --> Loss["Cross Entropy Loss"]

8. 고급 최적화 및 하드웨어 가속: Flash Attention

트랜스포머 모델이 거대화되면서 Masked Attention 연산은 메모리 병목 현상에 직면했다. N \times N 크기의 어텐션 행렬을 메모리에 쓰고 읽는 과정이 연산 속도보다 느리기 때문이다. 이를 해결하기 위해 등장한 기술이 Flash Attention이다.

graph TD
subgraph "기존 방식 (Standard)"
HBM1["HBM<br>(GPU 메모리)"] -- "전체 행렬 N*N 읽기/쓰기" --> Comp1["GPU 코어<br>연산"]
Comp1 -- "중간 결과(Mask) 저장" --> HBM1
Note1["메모리 대역폭<br>병목 발생"]
end

subgraph "Flash Attention"
HBM2["HBM<br>(GPU 메모리)"] -- "작은 블록(Tile) 단위 로드" --> SRAM["SRAM<br>(고속 온칩 메모리)"]

subgraph "SRAM 내부 연산"
Tile["타일 단위 Q, K, V"]
Compute["Softmax &<br>Masking<br>(즉석 계산)"]
Tile --> Compute
end

Compute -- "최종 결과만 기록" --> HBM2
Note2["마스크 행렬 생성 안 함<br>(No Materialization)"]
end

8.1 IO 인지(IO-Aware) 최적화

Flash Attention은 어텐션 행렬 전체를 GPU의 고대역폭 메모리(HBM)에 기록하지 않고, GPU 내부의 고속 온칩 메모리(SRAM)에서 타일(Tile) 단위로 쪼개어 연산한다.28 이 과정에서 Masked Attention의 마스킹 연산도 최적화된다.

8.2 마스크의 구체화 방지(Avoid Materialization)

기존 방식에서는 N \times N 크기의 마스크 행렬을 실제로 생성(Materialize)하여 어텐션 스코어에 더했다. 이는 N이 커질수록 막대한 메모리를 소모한다. Flash Attention이나 PyTorch 2.0의 Scaled Dot Product Attention (SDPA) 커널은 마스크 행렬을 물리적으로 생성하지 않는다. 대신 연산 커널 내부의 루프에서 현재 인덱스 ij를 비교하는 조건문(if j > i)을 통해 즉석에서 마스킹 여부를 결정한다. 이는 메모리 사용량을 O(N^2)에서 O(1)(마스크 저장 비용 제거)로 줄이고, 메모리 대역폭 소모를 획기적으로 감소시킨다.3

이러한 최적화 덕분에 수천~수만 토큰 길이의 문맥을 가진 LLM도 효율적으로 Masked Attention을 수행할 수 있게 되었다.

9. Masked Attention의 최신 변형 및 확장

기본적인 Masked Attention의 한계를 극복하고 특정 도메인에 특화시키기 위한 다양한 변형들이 연구되고 있다.

9.1 희소 어텐션(Sparse Attention)과 슬라이딩 윈도우

시퀀스 길이가 극도로 길어질 때, 모든 과거를 다 참조하는 것은 불필요하거나 비용이 많이 든다. **슬라이딩 윈도우 어텐션(Sliding Window Attention)**은 현재 토큰 t를 기준으로 고정된 크기 w만큼의 과거(t-w \sim t)만 참조하도록 제한한다.31 이때 마스크 행렬은 상삼각 영역뿐만 아니라, 윈도우 범위를 벗어난 먼 과거의 하삼각 영역도 마스킹하여 밴드(Band) 형태를 띤다. 이는 연산량을 O(N^2)에서 O(N \times w)로 줄여준다. Mistral 7B와 같은 최신 모델은 이러한 슬라이딩 윈도우와 Flash Attention을 결합하여 긴 문맥 처리를 효율화했다.3

graph LR
Curr["현재 토큰 (t)"]

subgraph "참조 가능 영역 (Window w)"
Window1["t-1"]
Window2["t-2"]
Window3["..."]
Window4["t-w"]
end

subgraph "참조 불가 영역 (Masked by Distance)"
Far1["t-(w+1)"]
Far2["t-(w+2)"]
Far3["먼 과거"]
end

Curr -- "Attention" --> Window1
Curr -- "Attention" --> Window2
Curr -- "Attention" --> Window4

Curr -. "Connection Broken" .-x Far1
Curr -. "Connection Broken" .-x Far3

9.2 다이내믹 마스크 어텐션(Dynamic Mask Attention)

고정된 마스크 패턴 대신, 입력 데이터의 내용에 따라 동적으로 마스크를 생성하는 연구도 진행 중이다.33 이는 각 어텐션 헤드가 서로 다른 희소 패턴(Sparsity Pattern)을 학습하게 하여, 어떤 헤드는 문법적 관계를 위해 가까운 과거를, 어떤 헤드는 주제 일관성을 위해 먼 과거의 핵심 키워드를 참조하도록 유도한다. 이는 인과성을 유지하면서도 정보의 선택과 집중 효율을 높인다.

graph TD
Input["입력 텍스트 Content"] --> Analyzer["마스크 예측 네트워크"]

subgraph "다양한 어텐션 헤드"
Head1["Head 1: 문법적 관계"]
Head2["Head 2: 장기 문맥"]
end

Analyzer -- "Pattern A: 근거리 집중" --> Head1
Analyzer -- "Pattern B: 핵심어 위주" --> Head2

Head1 --> Out1["희소한 문맥 정보"]
Head2 --> Out2["압축된 문맥 정보"]

Out1 --> Concat["정보 결합"]
Out2 --> Concat

9.3 비디오 및 멀티모달 생성에서의 응용

Masked Attention은 텍스트를 넘어 이미지와 비디오 생성으로 확장되고 있다. 비디오 생성 모델에서 Complete Teacher Forcing (CTF) 기술은 훈련 시 시간적 어텐션 마스크(Temporal Attention Mask)를 조작한다.19 기존 방식이 훈련 시 마스킹된 프레임에 과도하게 의존하여 추론 시 성능이 떨어지는 문제를 해결하기 위해, 훈련 시에도 각 프레임이 자기 자신과 이전 프레임들만 참조하도록(마치 추론 때처럼) 마스크를 구성하여 학습시킨다. 이는 Masked Attention이 단순한 텍스트 생성을 넘어 시계열 데이터의 인과적 생성 전반에 적용되는 핵심 원리임을 보여준다.

graph TD

subgraph "표준 학습 (Standard)"
StdInput["마스킹된 프레임 입력"]
StdAttn["전체 문맥 참조 가능"]
StdIssue["추론 시 성능 저하 (과의존)"]

StdInput --> StdAttn --> StdIssue
end

subgraph "Complete Teacher Forcing (CTF)"
CTFInput["마스킹된 프레임 입력"]
CTFAttn["과거 프레임만 참조 (Causal Mask)"]
CTFBenefit["추론 조건과 일치 (Robustness)"]

CTFInput --> CTFAttn --> CTFBenefit
end

9.4 Alibi (Attention with Linear Biases)

위치 임베딩(Positional Embedding) 대신 어텐션 스코어에 거리에 비례하는 페널티(Bias)를 더해주는 방식이다. 이 또한 일종의 ’Soft Masking’으로 볼 수 있으며, 먼 과거의 정보일수록 영향력을 줄여 외삽(Extrapolation) 성능을 높이는 데 기여한다. 이는 엄격한 -\infty 마스킹과는 다르지만, 정보의 흐름을 제어한다는 측면에서 유사한 맥락을 지닌다.

graph TD
Tokens["토큰 쌍 (Query i, Key j)"] --> Dist["거리 계산: |i - j|"]
Dist --> Penalty["선형 페널티: -m * 거리"]

RawScore["기본 어텐션 스코어 (QK^T)"] --> Add["가산 연산 (+)"]
Penalty --> Add

Add --> FinalScore["최종 스코어"]
FinalScore --> Softmax["Softmax"]

Note["먼 과거일수록 점수가 낮아짐<br>(Soft Masking)"]
FinalScore -.-> Note

10. 결론

Masked Attention 메커니즘은 트랜스포머 아키텍처가 단순한 패턴 인식 도구를 넘어, 인간 수준의 유창한 텍스트를 생성하는 생성형 AI로 진화하게 만든 결정적인 기술이다. 이 기술의 핵심 의의는 다음과 같이 요약할 수 있다.

  1. 인과성의 기술적 구현: -\infty 마스킹이라는 수학적 기법을 통해 미래 정보의 누수를 원천적으로 차단하고, 조건부 확률 분포 P(x_t | x_{<t})의 정확한 학습을 가능하게 했다. 이는 모델이 생성한 텍스트의 논리적 일관성을 보장하는 기반이다.
  2. 효율성의 패러독스 해결: ’순차적 생성’이라는 목표와 ’병렬적 학습’이라는 수단 사이의 모순을 교사 강요(Teacher Forcing)와 마스킹의 결합으로 해결했다. 이를 통해 수 조(Trillion) 단위의 토큰을 가진 데이터셋으로 거대 모델을 훈련시키는 것이 가능해졌다.
  3. 확장성과 유연성: 텍스트뿐만 아니라 이미지, 비디오, 시계열 예측 등 순서와 인과관계가 중요한 모든 데이터 양식(Modality)으로 확장 적용되고 있으며, Flash Attention과 같은 하드웨어 최적화 기술과 결합하여 그 효율성이 지속적으로 개선되고 있다.

결론적으로 Masked Attention은 현대 AI, 특히 LLM의 “생성 능력“을 담당하는 심장과도 같은 역할을 수행한다. 향후 연구는 무한히 긴 문맥(Infinite Context)을 다루기 위해 마스킹의 희소성(Sparsity)을 지능적으로 조절하거나, 마스킹 연산 자체의 비용을 더욱 줄이는 방향으로 발전할 것으로 전망된다. 이는 AGI(인공 일반 지능)를 향한 여정에서 기계가 정보를 단순히 기억하는 것을 넘어, 시간의 흐름 속에서 인과관계를 추론하고 창조하는 능력을 갖추게 하는 데 핵심적인 기여를 할 것이다.

graph TD
ProbDist["Softmax 출력 (확률 분포)"]

subgraph "결정론적 (Deterministic)"
Greedy["Greedy Search"]
MaxProb["가장 높은 확률(argmax) 선택"]
Result1["일관되지만 반복적인 텍스트"]

Greedy --> MaxProb --> Result1
end

subgraph "확률적 (Stochastic)"
Sampling["Top-k / Top-p Sampling"]
RandomPick["분포 내에서 무작위 추출"]
Result2["창의적이고 다양한 텍스트"]

Sampling --> RandomPick --> Result2
end

ProbDist --> Greedy
ProbDist --> Sampling

11. 참고 자료

  1. Transformer (deep learning) - Wikipedia, https://en.wikipedia.org/wiki/Transformer_(deep_learning)
  2. 12월 12, 2025에 액세스, [https://www.datacamp.com/tutorial/how-transformers-work#::text=STEP%203.1%20Masked%20Self%2DAttention,t%20influenced%20by%20future%20tokens.](https://www.datacamp.com/tutorial/how-transformers-work#::text=STEP 3.1 Masked Self-Attention, https://www.datacamp.com/tutorial/how-transformers-work#:~:text=STEP%203.1%20Masked%20Self%2DAttention,t%20influenced%20by%20future%20tokens.
  3. Masked and Causal Attention | ML & CV Consultant - Abhik Sarkar, https://www.abhik.xyz/concepts/attention/masked-attention
  4. A Gentle Introduction to Attention Masking in Transformer Models, https://machinelearningmastery.com/a-gentle-introduction-to-attention-masking-in-transformer-models/
  5. Explain Self-Attention, and Masked Self-Attention as used in …, https://aiml.com/explain-self-attention-and-masked-self-attention-as-used-in-transformers/
  6. Masking in Transformers’ self-attention mechanism | Analytics Vidhya, https://medium.com/analytics-vidhya/masking-in-transformers-self-attention-mechanism-bad3c9ec235c
  7. How to understand masked multi-head attention in transformer [closed], https://stackoverflow.com/questions/58127059/how-to-understand-masked-multi-head-attention-in-transformer
  8. Revisiting Softmax Masking: Stop Gradient for Enhancing Stability in …, https://arxiv.org/html/2309.14808v2
  9. The Attention Mechanism | AI Fundamentals with Python | Steve …, https://stevekinney.com/courses/python-ai/attention-mechanism
  10. Causal Self-Attention - Kaggle, https://www.kaggle.com/code/aisuko/causal-self-attention
  11. Beginners’ Guide to Causal Attention | by GurSanjjam Singh Alang, https://medium.com/@sanjjam/beginners-guide-to-causal-attention-b2e3fa9bc762
  12. Masking attention weights in PyTorch - Judit Ács’s blog, http://juditacs.github.io/2018/12/27/masked-attention.html
  13. How Do Self-attention Masks Work? - GeeksforGeeks, https://www.geeksforgeeks.org/nlp/how-do-self-attention-masks-work/
  14. Attention Models - Deep Learning, CMU, https://deeplearning.cs.cmu.edu/S23/document/slides/lec18.attention.pdf
  15. Going Beyond the Causal Mask in Language Modeling - p(doom), https://pdoom.org/causal_mask.html
  16. Introduction to Attention, Transformers and Large Language Models, https://communities.sas.com/t5/SAS-Communities-Library/Introduction-to-Attention-Transformers-and-Large-Language-Models/ta-p/932461
  17. Transformers: Attention is all you need — Teacher Forcing and …, https://medium.com/@shravankoninti/transformers-attention-is-all-you-need-teacher-forcing-and-masked-attention-9de9b3e71e9e
  18. The Hidden Cost of Autoregression: Why Masked Attention is the …, https://medium.com/@inverseatom.ai/the-hidden-cost-of-autoregression-why-masked-attention-is-the-genius-and-the-shackle-of-llms-132293caa431
  19. Taming Teacher Forcing for Masked Autoregressive Video Generation, https://openaccess.thecvf.com/content/CVPR2025/papers/Zhou_Taming_Teacher_Forcing_for_Masked_Autoregressive_Video_Generation_CVPR_2025_paper.pdf
  20. GPT vs BERT - GeeksforGeeks, https://www.geeksforgeeks.org/nlp/gpt-vs-bert/
  21. BERT vs GPT: Comparing the NLP Giants - Towards Data Science, https://towardsdatascience.com/bert-vs-gpt-comparing-the-nlp-giants-329d105e34ec/
  22. Masked self-attention: How LLMs learn relationships between tokens, https://stackoverflow.blog/2024/09/26/masked-self-attention-how-llms-learn-relationships-between-tokens/
  23. Transformers Explained Visually (Part 3): Multi-head Attention, deep …, https://towardsdatascience.com/transformers-explained-visually-part-3-multi-head-attention-deep-dive-1c1ff1024853/
  24. Self-Attention v/s Attention: understanding the differences - Medium, https://medium.com/@nishant.usapkar/self-attention-v-s-attention-understanding-the-differences-3cd1278625de
  25. GPT vs BERT: Which Model Fits Your Use Case?, https://dataengineeracademy.com/blog/gpt-vs-bert-which-model-fits-your-use-case/
  26. Masking in Transformer Encoder/Decoder Models - Sanjaya’s Blog, https://sanjayasubedi.com.np/deeplearning/masking-in-attention/
  27. How to properly apply causal mask for next char prediction in MLP, https://discuss.pytorch.org/t/how-to-properly-apply-causal-mask-for-next-char-prediction-in-mlp/215179
  28. Attention (machine learning) - Wikipedia, https://en.wikipedia.org/wiki/Attention_(machine_learning)
  29. The Evolution of Attention Mechanisms: Scaling Transformers Smartly, https://medium.com/@aadishagrawal/the-evolution-of-attention-mechanisms-scaling-transformers-smartly-73cb96f991cf
  30. The Flexibility of PyTorch with the Performance of FlashAttention, https://pytorch.org/blog/flexattention/
  31. Generalized Neighborhood Attention: Multi-dimensional Sparse …, https://arxiv.org/html/2504.16922v1
  32. Sliding Window Attention | ML & CV Consultant - Abhik Sarkar, https://www.abhik.xyz/concepts/attention/sliding-window-attention
  33. Trainable Dynamic Mask Sparse Attention - arXiv, https://arxiv.org/html/2508.02124v1
  34. Trainable Dynamic Mask Sparse Attention: Bridging Efficiency and …, https://huggingface.co/blog/wubingheng/dmattn
  35. Taming Teacher Forcing for Masked Autoregressive Video Generation, https://arxiv.org/html/2501.12389v1