Transformer의 encoder 및 decoder 구조에 대해 알아보고
decoder에서 사용되는 Masked self-attention 기법을 정리합니다.
최종적으로 이 transformer가 어떻게 다음 단어를 예측하게 되는지 이해해 봅시다.
encoding vector란? (용어 정리)
각 단어가 input으로 들어올 때 self-attention 계산 결과로
각각 input에 대응되는 encoding vector가 출력됩니다.
이때 이 encoding vector가 정확하게 무엇을 뜻하는지
self-attention 과정을 간단하게 살펴봅시다.
input으로 X1 ,X2 가 주어진다면 query도 역시 q1, q2로 존재할 것입니다.
이때 q1을 기준으로 attention을 구해 위와 같이 0.8, 0.2라는 attention을 구했다고 합시다.
이 attention 값을 기준으로 value 값을 가져온 값이 z에 1번행에 존재하며
이 vector를 input X1에 대응되는 encoding vector라 볼 수 있습니다.
즉 self-attention 연산을 하면 각 단어에 output이 encoding vector로
각 단어와 각 단어에 해당하는 encoding vector가 1:1대응이 되어
마치 many to many 구조처럼 생각해 볼 수 있습니다.
Transformer :encoder
(encoder의 자세한 구조는 아래 게시물을 참조)
2025.02.24 - [데이터 마이닝] - Transformer : Multi-head Attention (Add & Norm)
Transformer : Multi-head Attention (Add & Norm)
self-attention 연산과정에 대한 이해를 기반으로 Multi-head Attention이 무엇인지 Add&Norm 연산은 무엇인지 정리합니다.즉 위의 한 블럭을 이해하는 것을 목표로 합니다.self-attention은 무엇이었는지?20
tmddn0512.tistory.com
기본적인 encoder 구조는 아래와 같습니다.
들어온 input에 대해 embedding 및 position 정보를 처리합니다.
이후 self-attention 연산을 하여 각 단어에 대응하는 encoding된 vecotor를 얻어
마치 many to many 구조와 같이 1:1로 output을 얻게 됩니다.
이후 Add&Norm 연산을 거치고 그것이 다음 layer에 input으로 들어갑니다.
그다음 feed forward에서 또 다른 선형변환을 거쳐 동일한 size를 유지하며
encoder의 최종 output으로는 input과 벡터 차원이 같고
input과 같은 수만큼의 벡터를 얻게 됩니다.
Transformer: decoder
decoder에서도 input으로 단어 3개를 집어넣는다고 생각해 봅시다.
그러면 seq2seq에서와 같이 "나는"이라는 단어를 예측하도록 하는
적당한 단어 <sos>를 입력으로 넣게 됩니다.
Transformer에서는 3개의 input을 병렬적으로 동시에 입력받습니다.
즉 이 3개의 단어에 대해서 self-attention을 적용하게 됩니다.
따라서 아래 수식을 그대로 적용하게 되는데..
여기서 문제는 value와 곱할 attention을 구하는 과정에 있습니다.
위와 같이 attention을 구하는 과정에서
가령 "나는"을 query로 했을 때 각각의 key들과 attention을 구하는 수식을 생각해 보면
"나는"이라는 단어를 예측 대상이자 다음 단어인 "집에"라는 단어와의
attention을 계산하는 과정이 존재합니다.
즉 다음 단어가 무엇인지 정답을 보게되는 cheating 문제가 발생하게 됩니다
따라서 각 단어가 query일 때는 그 단어 이전까지의 단어만 볼 수 있도록
아래와 같이 masking을 하여 attention을 구성합니다.
이렇게 Masked Self-attention을 통해 각 input에 대응되는
encoding된 vetor를 decoder에서 얻었다고 해봅시다.
가령 아래와 같이 <sos>에 대해 encoding된 vector를 얻었다고 해봅시다.
이때 나머지 입력인 "나는" , "집에"에 대해 encoding된 vecotor와
<sos>에 대해 encoding된 vector를 self attention을 하는 것이 아니라
이 <sos>에 대해 encoding vector를 query로 하고
Transformer의 encoder의 output을 key 및 value로 하여 attention을 진행합니다.
즉 seq2seq에서의 attention mechanism과 방식이 같습니다.
이 과정을 아래와 같이 표현 할 수 있습니다.
다시 정리하자면 <sos>에 대응하는 encoding된 vector를 query로
transformer의 encoder의 output들을 key 그리고 value로 하여
attention을 구하여 최종적으로 <sos>에 대응하는 encoding된 vector를
구하게 됩니다.
이후에는 transformer의 encoder에서 했던 것과 같은 방식으로
add&norm 연산 및 feed forward 연산을 거치게 됩니다.
이후 분류 문제를 푸는 것처럼 linear weight를 거친 후 soft max를 통해
embeddding된 벡터 표현으로 다음 단어의 embedding된 벡터를 예측하게 됩니다.
계속해서 이와 같은 과정을 반복하여 최종적으로 아래와 같이 모델을 학습하여
다음 단어를 예측하는 모델을 학습시키게 되는 것입니다.
'Transformer' 카테고리의 다른 글
Transformer : Multi-head Attention (Add & Norm) (0) | 2025.02.24 |
---|---|
Transformer란? (self-attention) (0) | 2025.01.22 |