Causal Mask
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을 훔쳐보지 않는 이유는 무엇인가?