인공지능

RNN 기반 Sequence-to-Sequence 모델과 Attention

원담 2025. 5. 27. 11:33
728x90

RNN 구조 다시보기

  • RNN(Recurrent Neural Network)은 시간적인 순서를 가진 데이터를 처리하는 데 특화된 신경망입니다.
  • 입력 벡터 x, 은닉 상태 s, 출력 o가 있으며, 시간의 흐름에 따라 상태가 반복적으로 연결됩니다.
  • RNN의 핵심은 이전 상태를 현재 상태 계산에 활용한다는 점입니다.

기본 Seq2Seq 구조

  • Sequence to Sequence 모델은 한 시퀀스를 다른 시퀀스로 변환하는 모델입니다.
    • 예: 영어 → 프랑스어 번역
  • Encoder는 입력 시퀀스를 요약해서 고정된 벡터 c 로 압축합니다.
  • Decoder는 이 벡터를 기반으로 출력 시퀀스를 생성합니다.
  • 이 구조는 번역뿐 아니라 챗봇, 문장 요약 등 다양한 분야에서 활용됩니다.
  • 문제점: 이 고정된 벡터 c 가 정보 병목(bottleneck)을 유발합니다. → 길고 복잡한 문장을 압축하기에 한계가 있음.

기존 모델의 한계 및 해결 방안

  • 기존 RNN 기반 Seq2Seq 모델의 문제점
    • 긴 문장을 하나의 벡터로 요약하는 것은 정보 손실을 유발함.
    • 특히 중요한 단어에 집중하지 못함.
  • 해결책
    1. Bidirectional RNN을 사용해 양방향 문맥 정보를 활용함.
    2. Attention Mechanism 도입 → 중요한 단어에 더 집중할 수 있도록.

예시

  1. Encoder는 “I am a student”을 요약해서 하나의 벡터 c 로 만듭니다.
  2. Decoder는 이 벡터 하나만 보며 차례로 단어 생성:
    • 입력: c + <SOS> → 출력: “Je”
    • 입력: c + Je → 출력: “suis”
    • 입력: c + suis → 출력: “étudiant”

문제

  • 이 벡터 하나 c에 모든 문장 정보를 다 담기엔 무리 → 중요한 단어인 “student” 정보가 약해질 수 있음
  • 길거나 복잡한 문장에서는 더 치명적
원인 (왜 문제가 생기는가?)  결과 (어떤 문제가 발생하는가?)
입력 문장을 하나의 벡터(c)로 압축함 → 문장이 길면 정보 손실 발생
모든 단어를 동일하게 다룸 (중요한 단어 구분 X) → 번역 시 핵심 단어에 집중 못함
순방향(RNN)만 사용 → 문장의 앞뒤 문맥을 완전하게 파악하지 못함

RNN Encoder와 Decoder 구조

  • Encoder: 입력 단어들을 차례대로 처리해 각 시점의 은닉 상태 h를 생성함.
    • 이 h 들을 종합해서 컨텍스트 벡터 c 를 생성.
  • Decoder: 이전 단어 출력과 은닉 상태, 그리고 컨텍스트 c를 기반으로 다음 단어를 예측.

Bidirectional Encoder

  • Bidirectional RNN을 쓰면 순방향/역방향 정보 모두를 반영한 은닉 상태 h 생성한다.
  • 이후 각 타겟 단어을 예측할 때, 모든 입력 단어의 은닉 벡터를 참고합니다. 이때 핵심이 바로 Attention입니다.
  • "bank"가 "강가"인지 "은행"인지 구분하기 위해 앞뒤 단어를 함께 봄

Attention을 도입한 Encoder-Decoder 구조(RNN 기반의 Attention)

Attention Mechanism

  • Decoder가 출력 단어를 생성할 때, 입력 시퀀스 전체를 참고하며 중요도를 계산합니다.
  • 결과적으로 각 출력 시점에서 다른 컨텍스트 벡터가 만들어지며, 이는 입력 단어들의 정보를 동적으로 조합한 것
  1. Encoder는 각 단어마다 은닉 상태 h1,h2,h3,h4 생성
    • 예: h1 = I, h2 = am, h3 = a, h4 = student
  2. Decoder는 각 시점마다, 어떤 입력 단어에 집중할지 attention weight 계산
    • “Je”를 생성할 때: h1(I)에 높은 비중
    • “suis”를 생성할 때: h2(am)에 비중
    • “étudiant”를 생성할 때: h4(student)에 가장 집중

즉, 매 시점마다 필요한 정보만 뽑아 새로운 컨텍스트 벡터 c(i) 를 만들어 사용합니다.

구성  요소설명
RNN 구조 순차 데이터 처리에 적합, 이전 상태 기억
Seq2Seq 입력 시퀀스를 고정 벡터로 요약 후 출력 생성
문제점 고정 벡터의 정보 병목 (bottleneck)
해결책 Bidirectional RNN + Attention 도입
Attention 디코더가 입력 시퀀스 중 중요한 부분에 집중
항목 
Bidirectional RNN  Attention Mechanism
어디서 사용? Encoder Decoder
언제 사용? 인코딩 시, 각 입력 단어의 표현 만들 때 디코딩 시, 어떤 입력 단어에 집중할지 정할 때
무엇을 하냐? 각 단어의 앞뒤 문맥을 같이 고려해 은닉 벡터 h(j) 생성 Decoder가 출력할 단어마다 입력 단어 중 중요한 것에 집중
문맥을 어떻게 반영? 단어 기준: 각 단어가 자기 주변을 더 잘 이해하게 됨 문장 기준: Decoder가 전체 문장 중 필요한 단어를 뽑아씀
출력은? 단어마다 풍부한 h(j) 출력 시점마다 다른 컨텍스트 벡터 c(i)

메모리 네트워크(with Attention)

Matching Network는 One-shot learning 문제를 해결하기 위해 제안된 메모리 기반 아키텍처로, 핵심은 Attention 메커니즘과 외부 Memory 구조의 결합입니다. 이 모델은 학습된 파라미터만 사용하는 일반적인 parametric 방식이 아니라, 비파라메트릭(non-parametric) 방식으로 작동합니다. 즉, 새롭게 주어진 테스트 샘플에 대해, Support Set이라는 메모리 내 예제들과의 유사도를 Attention 방식으로 계산하고, 그 결과를 기반으로 예측을 수행합니다.

여기서 중요한 점은, Attention Kernel을 통해 각 support 예제의 중요도를 정량화하고, 이를 기반으로 soft-label 또는 weighted prediction을 수행한다는 것입니다. 또한 Matching Network는 문장이나 이미지처럼 시퀀스 기반 입력도 처리 가능하며, Full Context Embedding 기법을 적용하면, support 예제 하나하나가 독립된 벡터가 아닌, 전체 문맥을 반영해 더 정교하게 표현되므로 성능이 향상됩니다.

  • Attention + Memory: 입력 샘플이 메모리 내 예제들과 얼마나 유사한지 가중치를 부여
  • Non-parametric: 학습된 파라미터에만 의존하지 않고, 예제 기반 예측 수행
  • Few-shot / One-shot Learning: 적은 수의 예제만으로 일반화 가능
  • Attention Kernel: Attention Kernel은 test 샘플과 각 support 예제의 유사도를 정량화합니다. 이 유사도는 softmax를 통해 정규화되며, 각 예제가 얼마나 중요한지(=집중할지)를 나타내는 가중치가 됨.
    • 가장 가까운 하나만 보는 것이 아니라, 여러 예제에 정도별로 집중해서 예측할 수 있는 모델이 됨
  • Full Context Embeddings: 각 support 예제를 독립적으로 표현하면, support set 안의 다른 예제들과의 관계를 반영하지 못함 그래서 Support set 전체를 보고 각 예제를 표현할 수 있게 한다.

예를 들어, 어떤 사람이 강아지 사진을 3장만 보고도 새로운 강아지 사진이 어떤 종류인지 맞출 수 있다고 할때 사람은 머릿속에 있던 “기억”을 떠올려서 비교해보고 판단해야 하는데 이걸 기계가 하게 하려면 어떻게 해야 할까?

새로운 입력을 받았을 때, 기억 속에 있는 예제들과 비교해서 어떤 게 가장 비슷한지를 찾아내는 방식이 메모리 네트워크이다.

Memory Network 구조

  1. 기억 공간(Support Set)
    • 미리 주어진 예제 집합을 메모리처럼 저장해둡니다.
    • 예: “이건 리트리버, 이건 시바견, 이건 허스키…” 같은 이미지와 라벨 쌍들이 저장됨.
  2. 질문(Query)
    • “이 강아지는 어떤 종류일까?”라는 새로운 샘플을 주면, 모델은 이걸 기억들과 비교합니다.
  3. Attention을 사용한 비교
    • 기억에 있는 각 예제들과 새 샘플 간의 유사도를 계산합니다.
    • 이때 단순 비교가 아니라, Attention이라는 방식으로: “이 예제가 현재 상황에서 얼마나 중요한지”를 숫자로 판단합니다.
  4. 가장 비슷한 것에 집중해서 예측
    • 모델은 가장 비슷한 예제들에 높은 점수(가중치)를 주고,
    • 그것들의 라벨을 조합해서 정답을 예측합니다.
    • 예: 70%는 “리트리버”, 20%는 “시바견”처럼 나오면 → “리트리버”라고 예측.
    • Attention은 일종의 중요도 스코어 계산기입니다.
    • 새로 들어온 예제와 기억 속 예제들 각각을 비교해서, 이 예제가 지금 상황에 얼마나 유의미한가를 수치로 계산합니다.

정리

구성  요소역할
Support Set (Memory) 내가 가진 기억들 (예제들)
Query Input 새로 들어온 질문/샘플
Attention Mechanism 어떤 기억이 가장 중요한지를 판단하는 도구
Output 가장 관련 있는 기억들을 참고해서 결과 도출
 
 
Self-Attention 이란?

딥러닝에서 Attention 메커니즘은 “입력 전체 중에서 어떤 부분에 집중해야 할지를 학습하는 기술”입니다. 기존의 Seq2Seq 모델에서는 Decoder가 Encoder의 출력을 ‘선택적으로’ 참고하기 위해 Attention을 사용했습니다.

  • 예: 영어 문장을 프랑스어로 번역할 때,
    Decoder는 "student"라는 단어를 생성할 때 "student"라는 입력 단어에 집중함.

이처럼 Attention은 입력 A와 출력 B가 분리된 구조에서 사용되었습니다. 그런데, 문장 안에서도 서로 참고할 수 없을까? 에 대한 고민이 self-attention 의 시작이다.

Self-Attention: 문장 내부의 Attention

Query, Key, Value가 모두 같은 문장 내의 단어들에서 나온다는 점이 핵심입니다.

  • 이전에는 Decoder → Encoder에 Attention
  • 이제는 Encoder 내부에서도 서로 Attention을 줍니다.

작동 방식 요약

"The FBI is chasing a criminal" 이라고 할때 Self-Attention은 이 문장의 각 단어에 대해 다음을 수행합니다:

  1. Query 생성: 지금 바라보는 단어 (예: "chasing")
  2. Key & Value 생성: 전체 문장의 단어들
  3. Query와 모든 Key 간의 유사도 계산
    → "chasing"이 "criminal", "FBI", "is" 등과 얼마나 관련이 있는지 계산
  4. Softmax로 가중치 정규화
    → 가장 관련 있는 단어(예: "criminal")에 더 높은 집중
  5. Value들을 가중합
    → 중요한 단어들의 정보를 모아 새로운 "chasing" 표현 생성

이 과정을 문장 내 모든 단어에 대해 반복합니다.

일반 Attention (e.g. Seq2Seq에서 Decoder → Encoder)

  • Query: Decoder의 현재 상태 (출력 단어를 만들기 직전)
  • Key, Value: Encoder에서 만들어진 입력 문장의 은닉 상태들
  • Context Vector: Decoder가 출력 단어를 예측하기 위해 입력 문장에서 뽑아낸 문맥 요약 정보

예시로 입력 문장이 "I am a student" 이고 출력 문장이 "Je suis étudiant" 라고 할때, Decoder가 “étudiant”를 출력할 차례면

  • Query: 현재 Decoder 상태
  • Key/Value: Encoder의 h₁(I), h₂(am), h₃(a), h₄(student)
  • Context Vector: “student”와 가장 유사하니, 그걸 중심으로 만든 요약 벡터

Self-Attention (e.g. Transformer Encoder 내부)

  • Query, Key, Value: 모두 같은 문장에서 나옴
  • 각 단어가 Query가 되어,
    → 자기 자신을 포함한 모든 단어(Key)와의 관계를 계산
    → 중요도를 반영해 Value들을 가중합해서 Context Vector 생성

예시 문장이 "The FBI is chasing a criminal" 일떄,

  • “chasing”이라는 단어가 Query가 되면:
    • Key/Value: 문장 내 모든 단어들의 표현
    • "criminal", "FBI"와 강하게 연결 → 이들 중심으로 Context Vector 생성

이 과정을 모든 단어에 대해 반복 → 모든 단어가 문맥을 반영한 벡터로 바뀜

Self-Attention 은 이후 등장한 Transformer 모델의 핵심이 됩니다. RNN처럼 순서대로 처리할 필요 없이, 모든 단어가 동시에 서로를 참고할 수 있어서

  • 더 빠르게 학습 가능
  • 문장 전체의 문맥을 효율적으로 포착 가능
  • 병렬처리에 최적화됨
728x90

'인공지능' 카테고리의 다른 글

CV 분야에서 Transformers  (1) 2025.05.28
Post Transformer(feat. GPT, BERT)  (2) 2025.05.27
알고 있으면 쓸모 있는 AI 지식(14)  (2) 2025.05.26
NLP(Natural Language Processing) (13)  (2) 2025.05.26
Embedding(12)  (1) 2025.05.24