AI/Transformers

Transformers Decoder의 "past_key_values"에 대하여

검정비니 2023. 10. 26. 16:55
728x90
반응형

허깅페이스 Transformers를 통해 생성 모델을 사용하다보면 생성 결과 자료구조 내에 "past_key_values"라는 값이 있는 것을 확인할 수 있다.

이를 보면 아마 두가지 의문점이 들 것이다:

1) 왜 과거의 key, value 값들이 중요한가

2) 왜 query는 포함되지 않는가?

 

이에 대해서 자세히 알아보기 위해서는 Transformer Decoder의 Causal Masking Self Attention에 대해서 알아야 한다.

 

기본적으로, transformer는 모든 단어를 병렬적으로 처리하기 때문에 autoregressive 한 특성이 없다.

따라서, Causal Masking을 사용해서 목표하는 문장의 일부를 가려서 인위적으로 연속성을 학습하게 한다.

 

Vanilla Transformer 모델에서는 아래와 같이 Encoder-Decoder 구조로 되어 있으며, Query는 이전 Decoder의 생성 결과이고 Key와 Value는 Encoder의 마지막 Layer의 아웃풋 값이 된다.

GPT와 같은 Decoder-only 모델의 경우에는 여기서 조금 변형된 형태가 되는데, Encoder가 없다보니 K와 V가 Encoder의 아웃풋이 아닌 "현재까지 생성된 모든 토큰들"이 된다.

즉, Transformer Decoder-only 모델은 현재까지 생성된 모든 토큰들을 K와 V로 쓰고, 마지막으로 생성된 토큰을 Q로 사용한다.

매번 이전 모든 생성된 토큰의 정보를 다시 계산하는 등의 방식을 사용할 수 없기 때문에, 효율성을 위해 이전 생성 토큰들을 모두 caching하고 이를 새로운 토큰 생성 과정에서 K,V로 사용하게 된다.

이것이 허깅페이스 트랜스포머 디코더 모델에서 "past_key_values"라는 항목이 있는 이유이다.

 

 

반응형

'AI > Transformers' 카테고리의 다른 글

HuggingFace Transformers에서 Zero-shot Classification의 원리  (2) 2024.03.06