아직 만들지 않은 단어를 미리 볼 수 있다면?
문장을 생성할 때 Decoder는 앞에서 만든 내용을 바탕으로 다음 토큰을 결정해야 합니다. 아직 생성하지 않은 토큰은 존재하지 않는 것처럼 다뤄야 합니다.
Decoder는 문장을 한 번에 완성하지 않는다
“나는 이 책을 좋아한다”라는 문장도 실제 생성 과정에서는 아래처럼 조금씩 만들어집니다.
미래 토큰을 보는 것은 답안지를 미리 보는 것과 같다
시험 문제
정답을 스스로 생각해야 합니다.
나는 이 책을 ______.미리 열린 답안지
정답이 이미 보입니다.
좋아한다그래서 미래 토큰을 가린다
현재 “책을”까지 보고 다음 토큰을 예측하는 상황입니다. 버튼을 눌러 Mask가 있을 때와 없을 때를 비교해 보세요.
현재 위치에 따라 볼 수 있는 범위가 달라진다
Decoder는 현재 토큰과 그 앞쪽 토큰만 볼 수 있습니다. 왼쪽의 위치를 선택해 각 단계에서 어떤 토큰이 보이는지 확인해 보세요.
“나는”을 처리하는 순간
Mask가 없을 때와 있을 때의 차이
미래를 볼 수 있다면
정답 토큰을 미리 참고하게 됩니다. 학습할 때는 잘 맞히는 것처럼 보여도 실제 생성 상황과 조건이 달라집니다.
미래를 가린다면
이미 생성된 앞쪽 토큰만으로 다음 토큰을 예측합니다. 실제 문장 생성과 같은 조건에서 학습할 수 있습니다.
Encoder의 Self-Attention과 무엇이 다를까?
Encoder의 Self-Attention
입력 문장은 이미 모두 주어져 있으므로 전체 토큰을 함께 볼 수 있습니다.
Decoder의 Masked Self-Attention
문장을 생성 중이므로 현재 위치보다 뒤쪽 토큰은 볼 수 없습니다.
핵심 정리
- Decoder는 문장을 한 토큰씩 생성합니다.
- 현재 위치보다 뒤에 있는 토큰은 아직 생성되지 않은 미래입니다.
- 미래 토큰을 미리 보면 정답을 보고 예측하는 문제가 생깁니다.
- Mask는 미래 위치로 향하는 Attention을 차단합니다.
- 따라서 Decoder는 현재 토큰과 앞쪽 토큰만 참고할 수 있습니다.
- 이 구조 덕분에 실제 생성 상황과 같은 조건에서 다음 토큰을 예측할 수 있습니다.