training 시에는 autoregressive하게 하나씩 생성하지 않는다. 왜냐하면 이미 Decoder input으로 정답 시퀀스가 주어지기 때문에 전체를 한 번에 넣(teacher forcing)을 수가 있기 때문. <SOS> tok1 tok2 tok3 tok4를 한꺼번에 넣고 Causal mask 덕분에 각 position은 현재 ~ 이전의 토큰들만 보게 됨. 출력으로 tok1 tok2 tok3 tok4 <EOS> 예측을 병렬로 한 번에 계산. Loss도 모든 position에서 동시에 계산
Inference 시에는 incremental(autoregressive) generation이 일어남 (그래서 더 느림)
정리하면 causal masking은 training시에 Decoder가 치팅하지 않고 학습할 수 있게 해주는 장치인 셈임.
yes. Encoder의 KV도 Cross Attention에 쓰이긴 하지만 어차피 주어진 input을 한번 계산해두면 끝임. 이에 반해 Decoder의 Self Attention에서 autoregressive하게 계산할 때는 이전 토큰에 대한 KV도 계속 다시 계산해야 함 (한 step이 끝나면 전부 초기화되기 때문. 따라서 이 과정에서 KV Cache가 쓰이는 것.