스킬캠퍼스
Day 9 · Seq2Seq와 Attention
강의

오늘 끝나면

Seq2Seq와 Attention

  • Seq2Seq와 Attention의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 Seq2Seq와이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

2014 바다나우 — 번역의 병목을 푼 ‘주목’ 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

AI · Day 9 / 지도학습 · 생성 DL

한 벡터에
담을 수 없는

번역기는 문장 전체를 벡터 하나에 욱여넣음.
짧으면 됨. 길면 무너짐.
영화 한 편을 한 단어로 요약하는 꼴임.
Attention이 이 병목을 깸.

P.01AI · Day 9

문장을 문장으로 — Seq2Seq의 등장

2014년, 구글과 몬트리올 대학이 거의 동시에 같은 걸 냄.
RNN 두 개를 마주 보게 붙임.

앞 RNN(Encoder)이 "I love you"를 한 단어씩 읽음.
마지막에 요약 벡터 하나를 만듦.
뒤 RNN(Decoder)은 그 벡터만 받아 "나는 너를 사랑해"를 한 단어씩 토해냄.

이게 Sequence-to-Sequence, 줄여서 Seq2Seq임.
입력 길이와 출력 길이가 달라도 됨.
번역·요약·챗봇의 공통 골격이 여기서 처음 생김.

ENCODER → DECODER
IloveyouENCODER (RNN)c요약 벡터나는너를사랑해DECODER (RNN)오직 c 하나만 전달

Encoder가 만든 요약 벡터 하나로 Decoder가 새 문장을 푼다

P.02AI · Day 9

병목 — 한 벡터의 저주

근데 치명적 약점이 있었음.
Decoder가 받는 건 오직 마지막 hidden state 하나임.

5단어든 50단어든 같은 크기 벡터 하나에 압축됨.
앞부분 정보는 뒤로 밀려 희미해짐.
Decoder는 흐릿한 요약본만 보고 문장을 다시 써야 함.

실제로 그랬음.
20~30단어를 넘어가면 BLEU 점수가 급락함.
정보는 많은데 통로가 하나라서 무너짐.

고정 벡터 BOTTLENECK
w1w2w3w4w5c병목 (한 벡터)긴 문장?20단어↑ → 번역 붕괴5단어든 50단어든 같은 크기 벡터에 압축

모든 의미가 벡터 하나를 통과한다 — 문장이 길수록 무너진다

P.03AI · Day 9

해법 — 매 순간 돌아보기

2015년, Bahdanau 연구팀의 발상은 단순했음.
요약 벡터 하나에 매달리지 말자는 것.
Decoder가 단어 낼 때마다 입력 전체를 다시 보게 하자는 것.

사람이 번역하는 걸 떠올려 보셈.
"사랑해"를 쓸 때 원문 "love" 근처를 한 번 더 봄.
Attention은 이 행동을 모델에 넣은 것.

Decoder는 출력 단어마다 인코더의 모든 hidden state를 훑음.
지금 필요한 곳에 더 큰 가중치를 줌.
통로 하나가 입력 전체로 뚫린 직통 회선들로 바뀐 셈.

ATTENTION 직관
Ih1loveh2youh3입력 hidden 전체 (병목 없음)사랑해지금 낼 단어0.100.750.15love에 집중

출력 단어마다 입력 전체를 보고, 필요한 곳에 가중치를 몰아준다

P.04AI · Day 9

세 단계로 끝나는 Attention

Attention은 의외로 간단함.
매 출력 스텝마다 딱 세 가지만 함.

  • 점수(score) — 지금 Decoder 상태 sₜ가 각 입력 hidden hᵢ와 얼마나 맞는지 재는 것
  • 가중치 — 점수를 softmax로 합이 1인 확률로 만드는 것
  • 맥락 벡터hᵢ들을 가중치로 섞어 cₜ를 만드는 것
파이썬 코드 보기
# 출력 스텝 t에서 (numpy 직관)
for i in range(N):                  # 입력 모든 위치
    score[i] = align(s_t, h[i])     # 얼마나 맞나
a = softmax(score)                  # 합이 1인 가중치
c_t = sum(a[i] * h[i] for i in N)   # 맥락 벡터
y_t = decoder(s_t, c_t)             # 다음 단어 예측

핵심은 c_t = Σ aᵢ·hᵢ 한 줄임.
고정 요약 벡터 대신 단어마다 새로 조립한 맥락을 씀.
이게 긴 문장의 저주를 풂.

SCORE → SOFTMAX → CONTEXT
Attention 놀이터 · 점수를 끌어 맥락 벡터를 조립한다
I0.10love0.68you0.14now0.08cₜhidden state 공간 · cₜ = Σ aᵢ·hᵢ
입력 토큰별 raw 점수 (sₜ와 얼마나 맞나)
Σa = 1.00
최대 가중치
0.68
집중 토큰
love
펴짐(엔트로피)
0.69
여러 토큰을 적당히 섞는 중
P.05AI · Day 9

정렬 행렬 — 그리고 다음 혁명

Attention의 또 다른 선물은 설명 가능성임.
가중치를 히트맵으로 그리면, 모델이 어느 입력을 보고 어느 출력을 냈는지 한눈에 보임.

비즈니스에선 이게 큼.
모델이 "왜 그렇게 답했는지" 근거를 가리킬 수 있음.
의료·법률·금융에선 도입을 결정짓는 신뢰의 문제임.
Attention은 블랙박스에 작은 창을 냄.

근데 한 가지 남음.
Attention은 여전히 RNN 위에 붙인 보조 장치였음.
RNN은 단어를 하나씩 순차로 처리하니 느림.
그래서 누가 물음. "RNN 빼고 Attention만 쓰면 안 되나?"
그 질문이 다음 챕터 Transformer임.

Q. Attention이 Seq2Seq의 정보 병목을 어떻게 없앴나?기존 Seq2Seq는 입력 전체를 마지막 hidden state 하나에 압축해 Decoder에 넘김.
Attention은 이 단일 통로를 버림.
Decoder가 출력 단어마다 인코더의 모든 hidden state를 다시 참조하게 함.
매 스텝 필요한 곳에 가중치를 몰아 맥락 벡터 cₜ를 새로 만듦.
그래서 긴 문장에서도 앞부분 정보가 안 사라짐.
ALIGNMENT MATRIX
Iloveyou나는너를사랑해0.800.100.100.100.150.750.100.800.10진할수록 강한 정렬 (love ↔ 사랑해)입력 →

가중치를 히트맵으로 — 모델이 무엇을 보고 답했는지 드러난다

3줄 요약

  1. 12014 바다나우 — 번역의 병목을 푼 ‘주목’
  2. 2Seq2Seq와 Attention은 준비운동 → 지도학습 → 시퀀스 → 생성모델 → 실무 적용 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

Seq2Seq와

2014 바다나우 — 번역의 병목을 푼 ‘주목’

모델

입력을 받아 예측이나 출력을 만드는 계산 규칙

손실

예측이 정답에서 얼마나 빗나갔는지 재는 숫자