스킬캠퍼스

오늘 끝나면

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 바다나우 — 번역의 병목을 푼 ‘주목’

모델

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

손실

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