인공지능/트랜스포머 이해

TR-03. 멀티-헤드 마스크드 셀프 어텐션(Multi-head Masked Self Attention)

FedTensor 2025. 10. 11. 12:06

 

멀티-헤드 마스크드 셀프 어텐션은 트랜스포머 디코더의 첫 번째 하위 계층에서 사용되는 메커니즘입니다.

핵심 기능은 문장을 생성할 때, 모델이 "미래의" 정답 단어를 미리 훔쳐보지 못하도록(cheating) 방지하는 것입니다.

1. 왜 "Masked"가 필요한가?

트랜스포머의 디코더는 자기회귀적(Autoregressive) 방식으로 작동합니다. 즉, 한 단어씩 순차적으로 문장을 생성합니다.

  • 예: "나는" $\rightarrow$ (다음 단어 예측) $\rightarrow$ "학생" $\rightarrow$ (다음 단어 예측) $\rightarrow$ "이다"

"학생"이라는 단어를 예측해야 하는 시점(Time Step 2)에서, 모델이 정답인 "학생"이나 그 뒤에 올 "이다"라는 정보를 미리 본다면, 그건 예측이 아니라 단순한 복사가 됩니다.

따라서 현재 단어를 예측할 때는 오직 이전에 생성된 단어들만 참고해야 합니다. "마스킹(Masking)"은 바로 이 "미래 정보 차단"을 수행합니다.

2. "Masked Self-Attention"은 어떻게 작동하나?

  • "Self-Attention": 인코더-디코더 어텐션과 달리, Q, K, V가 모두 디코더 자신의 이전 층 출력에서 나옵니다.
    • 의미: 디코더가 지금까지 생성한 단어들 사이의 내부 문맥을 파악합니다.
  • "Masked": 이 셀프 어텐션 계산 과정(정확히는 Softmax 직전)에 "마스크"가 개입합니다.

작동 4단계 (싱글 헤드 기준)

1. 점수(Score) 계산: $QK^T$를 통해 어텐션 점수 행렬을 계산합니다.

  • 예: "나는 학생 이다"라는 3개 단어 시퀀스가 있다면, 3x3 점수 행렬이 나옵니다.

2. 마스킹(Masking) 적용:

  •  "룩-어헤드 마스크(Look-Ahead Mask)"라는 행렬을 준비합니다. 이 행렬은 현재 위치보다 "미래"에 있는 위치(주대각선 위쪽)는 0, 나머지는 1로 채워져 있습니다. (실제로는 0 대신 $-\infty$를 사용합니다.)
  •  이 마스크를 어텐션 점수 행렬에 적용(덧셈 연산)합니다.
  • 결과: "미래" 위치에 해당하는 점수들은 모두 $-\infty$ (혹은 아주 큰 음수)가 됩니다.

    [마스킹 전 점수]

       | '나는' | '학생' | '이다'
    ---------------------------
    '나는' |  5.2  |  1.3  |  0.8
    '학생' |  2.1  |  4.5  |  3.1
    '이다' |  1.7  |  2.2  |  6.0
   

    [마스킹 적용 후 점수]

       | '나는' | '학생' | '이다'
    ---------------------------
    '나는' |  5.2  |  -∞  |  -∞   <- '나는'은 '학생', '이다'를 못 봄
    '학생' |  2.1  |  4.5  |  -∞   <- '학생'은 '이다'를 못 봄
    '이다' |  1.7  |  2.2  |  6.0   <- '이다'는 모든 과거를 볼 수 있음

3. 가중치(Weight) 계산 (Softmax):

  • 마스킹된 점수 행렬에 Softmax를 적용합니다.
  • $e^{-\infty}$는 0에 수렴합니다.
  • 결과: 미래 단어들에 대한 어텐션 가중치는 0이 됩니다. 즉, "참조하지 않음"이 됩니다.

    [최종 가중치]

       | '나는' | '학생' | '이다'
    ---------------------------
    '나는' |  1.0  |  0.0  |  0.0
    '학생' |  0.2  |  0.8  |  0.0
    '이다' | 0.15 | 0.25 |  0.6

4. 최종 출력(Output) 계산: 이 가중치와 $V$ 행렬을 곱하여 최종 출력을 얻습니다.

3. "멀티-헤드"의 역할

멀티-헤드 마스크드 셀프 어텐션은 위의 1~4번 과정을 여러 개의 헤드(예: 8개)로 나누어 병렬로 처리합니다.

  • 디코더가 지금까지 생성한 문장("나는 학생")을 입력받습니다.
  • 8개의 헤드가 각자 다른 관점으로 이 문장 내부의 관계를 (마스킹된 채로) 학습합니다.
    • Head 1: "학생"이 "나는"이라는 주어와 어떤 문법적 관계를 맺는지 학습.
    • Head 2: "학생"이 "나는"이라는 단어와 의미적으로 얼마나 가까운지 학습.
  • 각 헤드의 출력($Z_1, \dots, Z_8$)을 결합(Concatenate)하고 최종 프로젝션($W^O$)을 거쳐 디코더의 다음 층(인코더-디코더 어텐션 층)으로 전달합니다.

요약

멀티-헤드 마스크드 셀프 어텐션은 디코더가 과거 정보(이미 생성한 단어들)만을 바탕으로, 그것도 다양한 관점(멀티-헤드)에서 현재 단어의 문맥을 풍부하게 파악하도록 돕는 필수적인 장치입니다.