[AI] Seq2Seq와 Transformer — 어텐션 메커니즘, Self-Attention, Multi-head Attention, Positional Encoding
by 우와한개발자
1. Seq2Seq — 시퀀스를 시퀀스로 변환한다

1) Seq2Seq란
Seq2Seq는 RNN을 연결해 하나의 시퀀스 데이터를 다른 시퀀스 데이터로 변환하는 모델이다. 입력을 처리하는 인코더(Encoder)와 출력을 생성하는 디코더(Decoder)가 연결된 구조다. 기계 번역처럼 입력 언어의 문장을 받아 출력 언어의 문장으로 변환하는 데 사용된다.
- 인코더 : 입력 시퀀스의 모든 단어를 처리해 하나의 컨텍스트 벡터(Context Vector)로 압축한다. 이 벡터가 입력 문장의 의미를 담고 있으며 잠재 벡터(Latent Vector)라고도 한다
- 디코더 : 이 컨텍스트 벡터를 받아 출력 시퀀스를 하나씩 생성한다
LSTM을 활용할 때는 구현상 설정해야 할 옵션이 있다.
- return_state=True : Hidden State와 Cell State를 동시에 전달해야 하므로 인코더에 설정해야 한다
- return_sequences=True : 디코더가 각 시점의 출력을 다음 시점 입력으로 사용하기 때문에 인코더에서 모든 시점의 출력을 반환하도록 설정해야 한다
2) Seq2Seq의 한계
인코더가 입력 시퀀스 전체를 하나의 고정 크기 벡터로 압축하는 과정에서 정보 손실이 발생한다.
- 압축 한계 : 입력이 길어질수록 컨텍스트 벡터가 모든 정보를 담기 어려워진다
- 경사 소실 : RNN 구조의 근본적인 문제인 경사 소실도 여전히 남아있고, 입력이 길어지면 성능이 저하되는 현상이 구조적으로 나타난다
2. 어텐션 — 필요한 정보에 집중한다
1) 어텐션이란
어텐션(Attention)은 Seq2Seq의 정보 손실 문제를 해결하기 위해 등장했다. 디코더가 출력을 생성할 때 인코더의 모든 시점 출력을 직접 참조할 수 있게 한다. 컨텍스트 벡터 하나에 모든 정보를 욱여넣는 대신, 현재 생성할 단어와 관련 있는 입력 부분에 집중(Attention)하는 방식이다. 어텐션 함수는 Q(Query), K(Key), V(Value) 세 가지를 매개변수로 사용한다.
- Q(Query) : 특정 시점에서의 디코더 셀의 은닉 상태. 현재 디코더가 집중하려는 대상이다
- K(Key) : 모든 시점에서의 인코더 셀의 은닉 상태. 어텐션 가중치를 계산하는 데 사용된다
- V(Value) : 실제로 가져올 인코더의 정보다
2) 어텐션 적용 과정
(1) 어텐션 가중치 계산
디코더의 현재 은닉 상태(Query)와 인코더의 모든 시점 은닉 상태(Key)를 행렬 곱셈해 어텐션 가중치를 계산한다.
- 유사도 반영 : Query와 Key가 유사할수록 내적 값이 커진다
(2) 어텐션 분포 계산
계산된 가중치에 softmax 함수를 적용한다.
- 확률 분포화 : 결과적으로 모든 가중치의 합이 1이 되는 확률 분포가 만들어진다
- 의미 : 각 값이 해당 인코더 시점에 얼마나 집중할지를 나타낸다
(3) 어텐션 벡터 계산
어텐션 분포와 Value(인코더 은닉 상태)를 가중합해 어텐션 벡터를 만든다.
- 컨텍스트 반영 : 현재 디코더 시점에서 입력 시퀀스 전체를 참조한 컨텍스트 정보가 담긴다
(4) 연결(Concatenation)
어텐션 벡터와 디코더의 현재 은닉 상태를 연결한다.
- 최종 출력 생성 : 이 결합된 벡터가 Fully Connected Layer를 통해 최종 출력을 생성하고, 다음 시점의 입력으로도 사용된다
3. Transformer — 병렬 처리로 모든 것을 바꾼다

1) Transformer란
Transformer는 2017년 구글이 "Attention is all you need" 논문에서 발표한 모델이다. RNN이나 LSTM 없이 어텐션 메커니즘만으로 자연어 처리를 수행한다.
- 가장 큰 차이 : 병렬 처리다. RNN은 이전 시점 결과를 기다려야 하는 순차 처리 구조지만, Transformer는 모든 단어를 한 번에 처리할 수 있어 학습이 훨씬 빠르다
- 구성 : 인코딩 컴포넌트는 여러 인코더로, 디코딩 컴포넌트는 같은 수의 디코더로 구성된다. 논문에서는 6개를 사용했지만 임의로 변경 가능하다
2) Positional Encoding
Transformer는 순서를 고려하지 않고 모든 단어를 동시에 처리하기 때문에 위치 정보를 별도로 주입해야 한다.
- 적용 방식 : 각 단어의 임베딩 벡터에 위치 정보를 더해 모델 입력으로 사용한다
- 효과 : 같은 단어라도 문장에서의 위치에 따라 다른 표현이 된다
3) Self-Attention
Transformer의 핵심이다. 현재 처리 중인 단어에 대해 문장 내 다른 모든 단어와의 관계를 파악한다. 예를 들어 "The animal didn't cross the street because it was too tired"에서 "it"이 animal을 가리키는지 street을 가리키는지를 Self-Attention이 문맥으로 파악한다.
- 벡터 생성 : 입력 벡터(512차원)와 학습할 가중치(WQ, WK, WV)를 곱해 Query, Key, Value 벡터(64차원)를 생성한다
- 내적 계산 : Query에 Key의 전치 행렬을 곱해 내적을 계산한다. Query와 Key가 유사할수록 값이 커진다
- 스케일링 : Key 벡터 크기의 제곱근(8)으로 나눠 값을 스케일링한 뒤 softmax를 적용한다
- 최종 값 산출 : 결과에 Value를 곱해 최종 어텐션 값 Z를 계산한다
4) Multi-head Attention
Attention을 병렬로 여러 번 수행해 다양한 관점에서 단어 간 관계를 파악한다.
- 병렬 실행 : N개의 가중치 세트(WQ, WK, WV)로 N개의 Self-Attention을 병렬로 실행하고 N개의 어텐션 값을 얻는다
- 결합 : 이를 연결(Concatenation)한 뒤 가중치를 곱해 최종 Multi-head Attention Value Matrix를 도출한다
- 효과 : 하나의 어텐션이 놓칠 수 있는 관계를 여러 헤드가 각각 다른 관점에서 포착한다
5) 잔차 연결과 정규화
잔차 연결(Residual Connection)은 경사 소실 문제를 해결하기 위해 적용된다.
- 동작 방식 : 층을 통과한 출력에 입력을 더해 기울기가 최소한 원본 입력만큼은 전달되도록 한다
Layer Normalization은 잔차 연결로 전달된 값을 정규화해 과적합을 방지한다.
- 적용 위치 : 이 두 과정이 인코더와 디코더의 각 Sub-layer 뒤에 반복적으로 적용된다
Seq2Seq가 인코더-디코더 구조로 시퀀스 변환의 가능성을 열었고, 어텐션이 정보 손실 문제를 해결했으며, Transformer가 병렬 처리로 학습 속도와 성능을 동시에 끌어올렸다. 허깅페이스는 이 복잡한 구조를 누구나 쉽게 활용할 수 있도록 만들었다. 지금 우리가 사용하는 ChatGPT, Claude 같은 LLM은 모두 이 Transformer 아키텍처를 기반으로 한다.
'AI' 카테고리의 다른 글
블로그의 정보
우와한개발자 님의 블로그
우와한개발자