본문 바로가기
개발/Python

Seq2Seq, 어텐션, 트랜스포머

by 피로물든딸기 2025. 10. 9.
반응형

전체 링크

 

  • Seq2Seq → 어텐션 → 트랜스포머: 점점 정보 병목과 연산 한계 개선
  • RNN 기반 Seq2Seq는 이해하기 쉽지만 긴 시퀀스 한계
  • Attention 도입 → 중요한 정보 선택 가능
  • Transformer → 완전 병렬, Self-Attention으로 성능 극대화

Seq2Seq (Sequence-to-Sequence)

- 입력 시퀀스 X=(x1, x2, ..., xn)를 받아 출력 시퀀스 Y=(y1, y2, ..., yn)로 변환하는 모델

- 주로 RNN 계열(LSTM, GRU)로 구성됨

 

Encoder-Decoder 구조

- Encoder: 입력 시퀀스를 받아 고정 길이 context vector로 압축

- Decoder: context vector를 기반으로 출력 시퀀스 생성

 

특징

- 순차적 처리: 시간 순서대로 입력과 출력을 처리

- NLP 번역, 요약, 챗봇 등에 사용됨

 

장점

- 시퀀스 길이가 다른 입력과 출력 처리 가능

- RNN 계열을 사용하면 문맥 정보 반영 가능

 

한계점

1. Long-term dependency 문제

- 긴 문장의 경우, 고정 길이 context vector가 모든 정보를 담기 어려움

 

2. 병렬 처리 불가

- RNN 구조 특성상 시퀀스를 순차적으로 처리해야 해서 훈련 속도 느림

 

3. 정보 손실 가능성

- Encoder에서 context vector에 모든 정보를 담아야 하므로 정보 일부 손실 가능


어텐션 메커니즘 (Attention)

- Decoder가 매 시점마다 Encoder의 모든 hidden state를 참조할 수 있도록 함.

- Context vector가중합으로 바뀌어, 필요한 정보에 집중(attend)할 수 있음.

 

수식 요약

 

특징

- Seq2Seq의 정보 병목 문제 해결.

- 번역, 텍스트 요약에서 품질 크게 향상.

- RNN 기반 Seq2Seq에 쉽게 통합 가능.

- Self-Attention은 입력 시퀀스의 각 단어가 같은 시퀀스의 모든 단어와 어텐션을 수행, 문맥 상에서 다른 단어와의 관계 학습

 

Query, Key, Value 세 가지 벡터를 이용

  • Query (Q) : "내가 지금 찾고 싶은 정보는 무엇인가? -  현재 데이터"
    • Decoder가 현재 시점에서 참조할 정보를 나타냄
    • 또는 Self-Attention에서는 같은 시점의 토큰이 다른 토큰과 관계를 볼 때 Q를 생성
  • Key (K): "이 정보가 어떤 특성을 가지고 있는가?"
    • 각 입력 토큰이 가진 특징을 나타냄
    • Q와 얼마나 잘 맞는지 계산할 기준
    • 데이터베이스에서 Q와 비교하여 유사도 측정
  • Value (V) : "실제 정보 값은 무엇인가?"
    • K에 대응하는 실제 정보
    • 최종적으로 Q와 K의 유사도로 가중치가 부여되어 합산되는 값

 

 

Q는 "내가 보고 싶은 것", K는 "입력 정보의 특성", V는 "실제 값"

 

장점

- 긴 시퀀스에서도 중요한 정보 선택 가능.

- 시각화 가능 → 모델이 어느 단어에 집중했는지 확인 가능.

- 정보 손실 감소.

 

한계점

- 여전히 RNN 기반이면 병렬 처리 어려움.

- 계산량 증가: 입력 길이가 길면 attention 연산 비용 증가.


트랜스포머 (Transformer)

- 2017년 Google의 “Attention is All You Need” 논문에서 제안.

- RNN 없이 어텐션만 사용 → 시퀀스 순서 정보 제공을 위한 Positional Encoding 사용

- Self-Attention으로 입력 시퀀스 내 모든 위치 관계 계산.

- Encoder-Decoder 구조 유지하지만 병렬 처리 가능

 

구조

- Encoder: 여러 층의 Self-Attention + Feed-forward Network

- Decoder: Masked Self-Attention + Encoder-Decoder Attention + Feed-forward

- Positional Encoding: 순서 정보 보존

 

* Masked Self-Attention : 미래 토큰을 미리 보지 못하도록 신뢰성 있는 생성 보장

 

특징

- 병렬 처리 가능 → 학습 속도 대폭 향상

- 긴 문장 처리 가능 → Long-term dependency 문제 해결

- NLP뿐 아니라 이미지, 음성 등 다양한 시퀀스 모델링 가능

 

장점

- 학습 및 추론 속도 빠름.

- 성능 우수 : 번역, 요약, 언어모델(예: GPT, BERT) 기반

- 긴 문장에서도 안정적 성능.

 

한계점

- 계산량 O(N2) → 긴 시퀀스에 메모리 부담

- Transformer 모델이 크면 학습 비용이 높음

- Positional Encoding 사용으로 시퀀스 길이 제한



멀티-헤드 셀프 어텐션 (Multi-Head Self-Attention)

- 입력 시퀀스 각 단어가 다른 단어와의 관계를 동시에 여러 관점(head)에서 학습

- Self-Attention: 입력 시퀀스 자체 내 단어 간 관계를 계산

- 멀티 헤드: H개의 서로 다른 Q, K, V 선형 변환 → 병렬 attention 수행 후 concat

- 어텐션을 여러번 동시에 수행

 

특징

- 여러 관점에서 단어 관계 학습 가능

- 긴 문장도 효과적으로 문맥 반영

- 완전 병렬 처리 가능

 

장점

- 다양한 의미 관계 캡처 가능.

- Long-term dependency 문제 해결.

 

한계

- 계산량이 많고 긴 시퀀스 시 메모리 부담

- 구조가 복잡해 학습 비용 높음


포지션 와이즈 피드 포워드 네트워크 (Position-wise Feed-Forward Network)

- 각 위치별로 독립적으로 선형 변환 + 비선형 변환(ReLU)

 

특징

- 위치별 특징 변환

- Self-Attention이 단어 간 관계 학습 후, FFN은 각 단어 표현 강화

- 첫 번째 레이어에서 ReLU, 두 번째 레이어는 활성화 함수가 없음

 

장점

- 단어별 복잡한 특징 표현 가능

- 병렬 처리 용이

 

한계

- 순차적 정보 자체는 학습 못함 → Self-Attention과 함께 사용해야 의미 있음

 

Decoder 구조

- Decoder도 N개의 동일한 층으로 구성되고, Encoder와 거의 유사하나 추가 블록 존재

- 마스크드 멀티-헤드 셀프 어텐션 (Masked Multi-Head Self-Attention)

- 멀티-헤드 인코더-디코더 어텐션 (Multi-Head Encoder-Decoder Attention)

- 포지션 와이즈 피드 포워드 네트워크 (Position-wise FFN)


마스크드 멀티-헤드 셀프 어텐션

- 미래 정보 차단: t 시점의 단어는 t 이후 단어를 참조하지 못함 (이전 단어만을 참고)

- ex) 번역 시, 아직 생성하지 않은 단어는 참고 불가

 

특징

- Masking → Decoder가 올바른 시퀀스 생성 학습

- Self-Attention과 구조 동일, 단 미래 단어를 0 가중치로 처리

 

장점

- 자동 완성, 번역 시 정확한 순차 생성 가능

- Teacher Forcing과 함께 학습 가능

 

한계

- 계산량 증가 (마스크 적용)

- 긴 시퀀스 처리 시 메모리 부담


멀티-헤드 인코더-디코더 어텐션

- Decoder가 Encoder의 출력(hidden state)을 참조

- 디코더가 인코더의 정보에 집중

- Q: Decoder hidden state, K,V: Encoder output

- 출력 시점에서 입력 문장 전체를 참고해 의미 맞춤

 

특징

- Encoder-Decoder 관계 학습

- 번역, 요약 등 입력과 출력 시퀀스 연관성 반영

 

장점

- 입력 문맥 정보 반영

- 정확한 시퀀스 생성 가능

 

한계

- 계산량 증가

- 긴 입력 시 메모리 부담

반응형

'개발 > Python' 카테고리의 다른 글

Ridge, Lasso, Elastic Net  (2) 2025.10.11
스케일링  (0) 2025.10.11
PCA vs LDA vs t-SNE  (0) 2025.10.09
오즈와 오즈비  (0) 2025.10.09
순환신경망 RNN  (0) 2025.10.09

댓글