새소식

Machine Learning

Transformer와 Attention 알기 + Attention의 query, key, value 알기

  • -

1. Attention

  • 입력의 각 요소가 다른 요소에 얼마나 집중해야 하는지를 계산하는 메커니즘.
  • 입력 시퀀스의 단어들 간의 의존 관계를 파악할 수 있게 해줌.
  • 대표적인 형태는 Self-Attention (자기 자신에 주목)

📌 예시
"나는 학교에 갔다"라는 문장에서 "갔다""나는""학교"를 참고해야 정확한 의미를 이해할 수 있는데,

Attention은 이 연결 정도(가중치)를 학습함

 

 

2. Transformer

  • Attention 메커니즘을 기반으로 만들어진 전체 아키텍처(모델 구조)
  • 2017년 Google의 논문 "Attention is All You Need"에서 처음 제안됨.
  • RNN, LSTM 없이 순서 정보를 처리하기 위해 Positional Encoding과 Self-Attention을 사용.

🧱 구성 요소:

  • Encoder & Decoder 블록으로 구성됨
  • 각 블록은 다음을 포함:
    • Multi-Head Self-Attention
    • Feed Forward Network
    • Residual Connection + Layer Norm

 

🔁 관계 정리

 

개념 설명
Attention 입력의 각 부분 간의 연관성을 계산하는 기법 (핵심 아이디어)
Transformer Attension을 이용해서 문장을 처리하는 모델 전체 구조 

 

결론

 

  • Attention은 눈(시선)이라고 생각하면
  • Transformer는 이 눈을 포함해서 뇌와 몸이 함께 움직이는 전체 시스템

 

 

Attention에서 query, key, value 중 가장 성질이 다른 것은?

1. query가 성질이 다르다 

 

 

key, value가 정보를 찾을 후보 대상이고 query는 정보를 찾을 주체이기 때문입니다.

 

검색에 비유하자면 

- 검색하는 내용이 query 

- 이미 있는 정보들이 key-value 

 

Encoder-Decoder 구조의  Cross-Attention 

encoder의 출력은 cross-attention에서 key, value로 들어가고 

decoder의 입력 sequence는 cross-attention에서 query로 들어가게 됩니다.

 

이 query에 대해서 key, value 후보들 중에 어떤 것이 가장관련이 있을지 구한 다음,

관련도에 따라서 weighted sum을 구하는 방식으로 attention이 동작하기 때문에 query가 key-value와 가장 성질이 다르다고 볼 수 있습니다.

 

 

구체적이고 명확한 설명을 위해 예시를 들자면,

Transformer로 한국어를 영어로 변환한다고 가정해 봅시다. 

 

"저를 꼭 뽑아주세요!" 를 영어로 바꾼다면, 이 한국어 시퀀스(문장)가 Transformer Encoder에 입력됩니다. 

 여기서 Encoder의 출력은 입력된 한국어 시퀀스 정보를 담고 있습니다. 

 

이제 이걸 영어로 바꿀 때,

문장 시작 토큰을 query로 두고 key-value로 한국어 문장 시퀀스 정보를 사용합니다.

 

 

그러면, 이 문장 시작 토큰이 한국어 토큰들 중에서 어느 토큰과 관련이 있을지 계산합니다.

 

관련성을 가지고 가중치를 정의하고 이 가중치들의 합을 이용해서 다음 layer로 넘기고 

결국 첫 단어를 예측하게 됩니다. 

 

만약에 예측한 첫 단어가 please면 다음 query로 Attention에 입력됩니다. 

그리고 이것을 계속 반복합니다. 

이때, query는 영어 도메인,

key-value는 한국어 도메인 입니다. 

이런 측면에서 봤을때도 query가 key, value에 비해서 성질이 다른 하나라고 볼 수 있습니다. 

 

정리

Transformer의 Cross-Attention에서, query와 key-value를 도메인 관점으로 봤을때, 서로 다른 도메인이기 때문에 query가 key-value와 성질이 다르다고 볼 수 있습니다. 

 

2. value가 성질이 다르다 

 

 

 

query와 key는 가중치를 만들고 value가 task와 관련된 결과 벡터를 만듭니다. 

 

 

Attention에서 나오는 출력은 하나의 query 당 이에 대응하는 하나의 벡터를 결과로 냅니다. 

 

이 벡터는 value의 가중치 합 (weighted sum) 입니다.

 

즉, value 벡터 가중치 합이 attention의 출력입니다. 

 

 

다시 말해, query와 key는 value와 곱해지는 가중치에 녹아 있습니다. 

즉, query와 key를 통해 가중치를 만들어줍니다. 

query와 key는 가중치를 만들 때, 서로 다른 두 도메인(한국어-영)의 정보가 얼마나 관련이 있는지를 정할 때

사용되는 벡터 입니다. (query와 key는 관련도에 대응하는 '가중치'를 만들도록 학습)

반면에, value는 학습하고 있는 task에 대해 학습합니다. 

 

예를들어, 모델이 번역 task를 학습하고 있다고 하면, 들어온 입력에 대해서 번역과 관련된 정보를 내포하도록 학습합니다. 

따라서, query-key는 가중치(도메인 간 연관)를 학습하고 value가 메인 task를 학습하기 때문에 value가 가장 성질이 다르다고 볼 수 있습니다. 

 

정리 

query가 key, value에 비해 성질이 다릅니다. 

그 이유는 cross-attention에서 도메인 상 query가 key, value와 다르기 때문입니다. 

 

value가 query, key에 비해 성질이 다릅니다.

그 이유는 query-key는 가중치를 학습하는 반면 value는 task와 관련된 벡터를 만들도록 학습하기 때문입니다. 

 

[참고]

https://www.youtube.com/watch?v=YlTDU1_Lli4&t=1s

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.