RNN 구조 다시보기
- RNN(Recurrent Neural Network)은 시간적인 순서를 가진 데이터를 처리하는 데 특화된 신경망입니다.
- 입력 벡터 x, 은닉 상태 s, 출력 o가 있으며, 시간의 흐름에 따라 상태가 반복적으로 연결됩니다.
- RNN의 핵심은 이전 상태를 현재 상태 계산에 활용한다는 점입니다.
기본 Seq2Seq 구조
- Sequence to Sequence 모델은 한 시퀀스를 다른 시퀀스로 변환하는 모델입니다.
- 예: 영어 → 프랑스어 번역
- Encoder는 입력 시퀀스를 요약해서 고정된 벡터 c 로 압축합니다.
- Decoder는 이 벡터를 기반으로 출력 시퀀스를 생성합니다.
- 이 구조는 번역뿐 아니라 챗봇, 문장 요약 등 다양한 분야에서 활용됩니다.
- 문제점: 이 고정된 벡터 c 가 정보 병목(bottleneck)을 유발합니다. → 길고 복잡한 문장을 압축하기에 한계가 있음.
기존 모델의 한계 및 해결 방안
- 기존 RNN 기반 Seq2Seq 모델의 문제점
- 긴 문장을 하나의 벡터로 요약하는 것은 정보 손실을 유발함.
- 특히 중요한 단어에 집중하지 못함.
- 해결책
- Bidirectional RNN을 사용해 양방향 문맥 정보를 활용함.
- Attention Mechanism 도입 → 중요한 단어에 더 집중할 수 있도록.
예시
- Encoder는 “I am a student”을 요약해서 하나의 벡터 c 로 만듭니다.
- 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가 출력 단어를 생성할 때, 입력 시퀀스 전체를 참고하며 중요도를 계산합니다.
- 결과적으로 각 출력 시점에서 다른 컨텍스트 벡터가 만들어지며, 이는 입력 단어들의 정보를 동적으로 조합한 것
- Encoder는 각 단어마다 은닉 상태 h1,h2,h3,h4 생성
- 예: h1 = I, h2 = am, h3 = a, h4 = student
- 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 구조
- 기억 공간(Support Set)
- 미리 주어진 예제 집합을 메모리처럼 저장해둡니다.
- 예: “이건 리트리버, 이건 시바견, 이건 허스키…” 같은 이미지와 라벨 쌍들이 저장됨.
- 질문(Query)
- “이 강아지는 어떤 종류일까?”라는 새로운 샘플을 주면, 모델은 이걸 기억들과 비교합니다.
- Attention을 사용한 비교
- 기억에 있는 각 예제들과 새 샘플 간의 유사도를 계산합니다.
- 이때 단순 비교가 아니라, Attention이라는 방식으로: “이 예제가 현재 상황에서 얼마나 중요한지”를 숫자로 판단합니다.
- 가장 비슷한 것에 집중해서 예측
- 모델은 가장 비슷한 예제들에 높은 점수(가중치)를 주고,
- 그것들의 라벨을 조합해서 정답을 예측합니다.
- 예: 70%는 “리트리버”, 20%는 “시바견”처럼 나오면 → “리트리버”라고 예측.
- Attention은 일종의 중요도 스코어 계산기입니다.
- 새로 들어온 예제와 기억 속 예제들 각각을 비교해서, 이 예제가 지금 상황에 얼마나 유의미한가를 수치로 계산합니다.
정리
| 구성 | 요소역할 |
| Support Set (Memory) | 내가 가진 기억들 (예제들) |
| Query Input | 새로 들어온 질문/샘플 |
| Attention Mechanism | 어떤 기억이 가장 중요한지를 판단하는 도구 |
| Output | 가장 관련 있는 기억들을 참고해서 결과 도출 |
딥러닝에서 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은 이 문장의 각 단어에 대해 다음을 수행합니다:
- Query 생성: 지금 바라보는 단어 (예: "chasing")
- Key & Value 생성: 전체 문장의 단어들
- Query와 모든 Key 간의 유사도 계산
→ "chasing"이 "criminal", "FBI", "is" 등과 얼마나 관련이 있는지 계산 - Softmax로 가중치 정규화
→ 가장 관련 있는 단어(예: "criminal")에 더 높은 집중 - 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처럼 순서대로 처리할 필요 없이, 모든 단어가 동시에 서로를 참고할 수 있어서
- 더 빠르게 학습 가능
- 문장 전체의 문맥을 효율적으로 포착 가능
- 병렬처리에 최적화됨
'인공지능' 카테고리의 다른 글
| 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 |