Causal Mask

transformerattentiondecoder-only

Decoder-only LLM은 다음 token을 예측하도록 학습한다.

지금까지의 token -> 다음 token 예측

그러려면 현재 위치의 token이 미래 위치의 token을 보면 안 된다. 예를 들어 3번째 token을 예측하는 표현을 만들 때 4번째, 5번째 token 정보를 미리 보면 정답을 훔쳐보는 셈이 된다.

이 문제를 막는 것이 causal mask다.

Attention score에 mask를 씌운다

Self-attention score matrix는 [T, T] 모양이다.

scores[i, j]
  = i번째 token이 j번째 token을 얼마나 볼지

Causal mask는 j > i인 위치를 막는다.

token i는 자기 자신과 이전 token만 볼 수 있다.
미래 token은 볼 수 없다.

그림으로 보면 허용되는 영역은 대략 아래쪽 삼각형이다.

O X X X
O O X X
O O O X
O O O O

O는 볼 수 있는 위치이고, X는 막힌 위치다.

학습 때도 필요하다

학습에서는 전체 sequence를 한 번에 넣는다. 그래야 GPU에서 병렬 계산을 잘 할 수 있다.

하지만 전체 sequence를 한 번에 넣더라도, causal mask를 적용하면 각 위치는 미래 token을 보지 못한다. 그래서 병렬 계산을 하면서도 autoregressive 학습 조건을 유지할 수 있다.

확인

  • Causal mask는 왜 필요한가?
  • scores[i, j]에서 어떤 위치가 막히는가?
  • 학습 때 전체 sequence를 넣어도 미래 token을 훔쳐보지 않는 이유는 무엇인가?