끄적이는 개발노트

260708_강의 정리 (RNN → LSTM → Seq2Seq → NMT → Self-Attention 정리) 본문

머신러닝

260708_강의 정리 (RNN → LSTM → Seq2Seq → NMT → Self-Attention 정리)

크런키스틱 2026. 7. 8. 15:41
728x90

 

deep learning · sequence models
RNN → LSTM → Seq2Seq → NMT → Self-Attention 정리
  • RNN의 기억력 한계를 LSTM의 게이트 구조로 해결하는 과정
  • Seq2Seq의 context vector 병목을 attention으로 극복하는 흐름
  • NMT attention과 self-attention(Transformer)의 차이점
🔁
1. RNN Cell과 그 한계

"하나의 셀이 시간에 따라 정보를 이어받으며 처리하는 것" — 순차 데이터 처리의 기본 구조

  • FFNN(순방향 신경망)에 내부 피드백(internal feedback)을 추가한 구조가 RNN cell임
  • 구성 요소 — input(x): 현재 시점 입력값 / hidden(a): 이전 시점 정보를 담은 은닉 상태 / output(y): 현재 시점 출력값
  • 하나의 cell은 feedforward network with internal feedback으로 볼 수 있음
  • 한계: 시퀀스가 길어질수록 기울기 소실(vanishing gradient) 문제로 먼 과거 정보를 기억하기 어려움
💡 새 개념
내부 피드백 internal feedback
  • 이전 시점의 출력이 현재 시점 계산에 다시 사용되는 구조
어제 한 말을 기억하면서 오늘 대화를 이어가는 것
기울기 소실 문제
· 시퀀스가 길어질수록 초반 정보의 영향력이 점점 희미해짐
· 이 문제를 해결하기 위해 LSTM 등장
RNN의 5가지 입출력 구조
구조형태대표 태스크
one to one입력 1개 → 출력 1개일반 신경망(FFNN)과 동일
one to many입력 1개 → 출력 여러 개이미지 캡셔닝
many to one입력 여러 개 → 출력 1개감성 분석, 문서 분류
many to many (동기)입력·출력 길이 동일품사 태깅
many to many (비동기)입력·출력 길이 다름기계 번역
🧠
2. LSTM (Long Short-Term Memory)

"RNN의 기억력 문제를 게이트로 해결한 구조" — 장기 의존성을 학습하기 위한 셀 구조

  • RNN은 시퀀스가 길어지면 오래된 정보를 잊어버리는 문제가 있음
  • LSTM은 cell state(C_t)와 3개의 게이트로 정보 흐름을 제어함
💡 새 개념
Forget gate f
  • sigmoid 함수 사용, 이전 cell state 중 얼마나 지울지 결정 (0~1)
0에 가까우면 완전히 잊음, 1에 가까우면 그대로 유지
Input gate i
  • sigmoid 함수 사용, 새 정보를 얼마나 반영할지 결정 (0~1)
Candidate gate g
  • tanh 함수 사용, 새로 추가할 후보 값 자체를 생성 (-1~1)
i가 "얼마나" 반영할지 정하면, g는 "무엇을" 반영할지 정함
Output gate o
  • sigmoid 함수 사용, cell state 중 얼마나 hidden state로 내보낼지 결정
  • → C_t = f_t * C_(t-1) + i_t * g_t (cell state 업데이트)
  • → h_t = o_t * tanh(C_t) (hidden state 출력)
게이트 요약
· f, i, o는 sigmoid(0~1) — "얼마나"를 결정
· g는 tanh(-1~1) — "무엇을" 반영할지 결정
· 네 게이트가 함께 cell state의 장기 기억을 관리함
🔗
3. Seq2Seq (Encoder-Decoder)

"입력 시퀀스를 하나의 벡터로 압축한 뒤, 그 벡터로 출력 시퀀스를 생성하는 구조" — 번역·요약 등 sequence-to-sequence 태스크의 기본 틀

  • Encoder: 입력 시퀀스를 순차적으로 처리해 마지막 hidden state(=context vector)로 압축
  • Decoder: context vector를 받아 출력 시퀀스를 한 토큰씩 생성
  • 한계: 입력이 길어지면 하나의 고정 크기 context vector에 모든 정보를 담기 어려움
💡 새 개념
Context vector
  • encoder의 마지막 hidden state, 입력 시퀀스 전체 정보를 압축한 벡터
긴 문장을 한 문장으로 요약해서 통역사에게 전달하는 메모
이 병목을 해결하기 위해 attention 메커니즘이 등장함
🌐
4. NMT (Neural Machine Translation)와 Attention

"디코더가 매 시점마다 인코더의 모든 정보를 다시 참고하는 것" — 고정된 context vector의 한계를 극복하는 방법

  • NMT(Neural Machine Translation, 신경망 기계 번역): seq2seq 구조 기반 번역 모델
  • 기존 seq2seq는 context vector 하나로만 전체 문장을 표현 → 정보 손실 발생
  • Attention 적용 시, decoder가 출력을 생성할 때마다 encoder의 모든 hidden state를 다시 참조함
flow
Attention 동작 순서
decoder가 매 출력마다 encoder를 다시 훑어보는 과정
  • ① decoder의 현재 상태와 encoder의 각 hidden state 간 유사도 계산 → attention weight 산출
  • ② attention weight로 encoder hidden state들을 가중합 → context vector 생성
  • ③ context vector를 이용해 다음 단어 예측
💡 새 개념
Attention weight
  • 입력의 각 위치가 현재 출력에 얼마나 중요한지를 나타내는 가중치 (합이 1)
"Je"를 생성할 때 weight (0.5, 0.3, 0.1, 0.1)로 입력 각 단어를 참조
encoder hidden states attention weight 계산 context vector decoder 출력
🎯
5. Self-Attention

"같은 문장 안에서 단어끼리 서로 얼마나 관련 있는지 계산하는 것" — Transformer의 핵심 메커니즘

  • NMT attention: 서로 다른 시퀀스(encoder ↔ decoder) 간 관계 계산
  • self-attention: 같은 시퀀스 내부에서 단어 간 관계 계산
  • Query, Key, Value 세 가지 벡터로 관계를 계산함
💡 새 개념
Query
  • 현재 기준이 되는 단어가 "무엇을 찾고 있는지"를 나타내는 벡터
Key
  • 각 단어가 "내가 무엇을 갖고 있는지"를 나타내는 벡터, query와의 유사도 계산에 사용
Value
  • 실제로 가중합에 사용되는 정보 벡터
도서관에서 검색어(query)로 책 제목(key)을 찾고, 실제 필요한 건 책 내용(value)인 것
  • ① query와 각 key의 유사도로 score 계산
  • ② score를 정규화해 가중치 산출
  • ③ 가중치로 value들을 가중합(multiplication) → 출력 생성
NMT attention vs self-attention
· NMT attention → 서로 다른 시퀀스 간 (encoder-decoder)
· self-attention → 같은 시퀀스 내부
· 이름은 같지만 목적과 참조 대상이 다름
🖼️
6. RNN을 이미지 데이터에 적용하는 예시 (MNIST)

"이미지를 시퀀스처럼 취급해서 RNN에 입력하는 것" — RNN 활용 예시

  • MNIST 손글씨 숫자 이미지(28×28)를 RNN 입력으로 사용하는 예시
  • 이미지의 각 행(28픽셀)을 하나의 timestep 입력으로 취급
  • → 28×28 이미지 = 28개 timestep × 28차원 벡터 입력
  • hidden size = 128 (BasicRNNCell의 은닉 차원), batch size = 128 (한 번에 학습하는 이미지 개수)
  • 출력: many-to-one 구조로 마지막 timestep의 출력을 one-hot encoding(10, 0~9 숫자 분류)으로 매핑
💡 새 개념
BasicRNNCell
  • TensorFlow/Keras 등에서 제공하는 가장 기본적인 RNN 셀 구현체
  • hidden 차원을 파라미터로 지정해 사용
주의
· hidden size와 batch size는 우연히 같은 숫자(128)일 뿐 다른 개념임
· 입력 시퀀스 길이(28)는 이미지의 세로 픽셀 수, 벡터 차원(28)은 이미지의 가로 픽셀 수에서 옴
728x90