Transformer 와 Attention (2)
Transformer 와 Attention (1)
https://dreamrunning.tistory.com/3
지난 포스팅에 이어서 이번 포스팅에서는 Attention 의 종류인 Self-Attention 과 Cross-Attention 에 대해 이야기하겠습니다.
6. Self-Attention 과 Cross-Attention
Query, Key, Value 를 이용해 유사도를 구해 Vector의 의미를 계산하는 Attention 의 종류에는 Self-Attention 과 Cross-Atttention 두 가지가 있습니다.
Self Attention 은 Query, Key, Value 가 하나의 벡터에서 생성되어 Attention 연산을 합니다. Transformer 에서는 Encoder 에서 사용합니다.
Cross Attention은 Query 와 Key, Value 가 서로 다른 벡터에서 생성되어 Attention 연산을 합니다. Transformer 에서는 Decoder 에서 사용합니다.
왜 Transformer Encoder 에서는 Self-Attention 을 사용하는지, Decoder 에서는 Cross Attention 을 사용할까요?
7. Transformer Encoder 의 Self-Attention

다시 AutoEncoder 를 되살펴보면, Encoder 에서는 문장의 의미를 Latent Vector $z$ 로 잘 압축시키는 역할을 한다고 했습니다. 그리고 Transformer 에서는 Attention 을 사용한다고 했습니다. 어떻게 Attention 을 사용해서 문장의 의미를 잘 요약하는 Latent Vector 를 만들지 생각해봅시다.
문장은 단어와 단어들이 모여서 만들어집니다. 그렇다면 단어와 다른 단어 사이의 관계를 알면 문장의 의미를 계산할 수 있다고 생각할 수 있습니다. 이것이 Self-Attention 의 핵심 아이디어 입니다.
The animal didn't cross the street because it was too tired 라는 문장 중 it 이 어떤 단어랑 유사한지 봅시다.

it 은 animal 이랑 유사할 확률이 가장 높습니다. 그리고 다음으로 street 일 확률이 잇고, The, it 이 뒤를 잇습니다. 이렇게 it 이 어떤 단어와 유사한지, 어떤 Value 를 가져야 하는지 계산하기 위해 Self-Attention 을 사용합니다
- [Query] 문장 내어서 it 은 어떤 단어랑 유사하지?
- [Key] 유사도 : 0.6 animal, 0.2 street, ...
- [Attention Score] 계산 : 0.6 * animal Value + 0.2 * street Value + ...
이렇게 Key - Attention Value 쌍을 만듦으로서 Encoder 에서 문장의 의미를 잘 압축하는 Latent Vector $z$ 를 만들게 됩니다.
정리하면, Encoder 에서 전체 문장을 Input 으로 받아들여 Self-Attention 을 이용하여 Latent Vector 로 Key-Attention Value 쌍을 만들어 Decoder 에 전달하게 됩니다.
8. Transformer Decoder 의 Cross-Attention
이번에는 Decoder 를 살펴봅시다.

Transformer Decoder 에서는 Encoder 에서 전달된 latent Vector 를 이용하여 문장을 생성하는 역할을 합니다.
그런데 문장을 생성할 때 한 번에 전체 문장을 생성할까요? 아닙니다. 단어 하나 하나 차례대로 하나씩 생성을 해서 전체 문장을 만듭니다. 'I am good' 이라는 문장을 Decoder 로 생성하는 예를 들면,

위 이미지와 같이, 문장 생성을 알리는 Token 인 <Start of Sentence> Token 이 Decoder 에 입력되면, Decoder 는 latent Vector 를 이용해 단어 'I' 를 생성하고 출력합니다. 그리고 다시 출력인 <Start of Sentence> 와 I 를 입력으로 받아들여 단어 'am' 을 생성하고 출력합니다.
이 과정을 반복하여 전체 문장 'I am good' 을 생성하게 됩니다. 어떻게 보면 RNN 과 똑같이 동작하는 것처럼 느껴지네요.
여기서, Decoder 는 Cross Attention 을 이용하여 다음에 올 단어를 예측하여 생성합니다.

앞서 언급했듯이, Cross Attention 은 Query 와 Key, Value 가 각각 다른 Vector 에서 생성되어 Attention 을 한다고 했습니다. Decoder 에서 Query는 Input Vector 에서, Key, Value 는 Encoder 에서 전달되는 latent vector 가 됩니다.
이전 Decoder 에서 나온 출력을 Query 로, Encoder에서 Key, Value 를 가지고 Attention 연산을 하여 Attention Value 를 계산하게 됩니다. 지금까지 생성된 단어가 어떤 단어와 유사한지 유사도를 구하는 것입니다. 그리고 계산된 값을 Feed Forwad network 에 전달하여 다음 단어를 예측하게 됩니다.
'DeepLeaning > 이론' 카테고리의 다른 글
| [논문리뷰] A ConvNet for the 2020s, ConvNeXt 리뷰 (0) | 2023.08.02 |
|---|---|
| [논문리뷰]Deep Residual Learning for Image Recognition(2015), ResNet 리뷰 (0) | 2023.07.17 |
| Transformer 와 Attention (1) (0) | 2023.06.29 |



