오늘 끝나면
Seq2Seq와 Attention
- ✓Seq2Seq와 Attention의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 Seq2Seq와이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
2014 바다나우 — 번역의 병목을 푼 ‘주목’ 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
AI · Day 9 / 지도학습 · 생성 DL
한 벡터에
담을 수 없는
번역기는 문장 전체를 벡터 하나에 욱여넣음.
짧으면 됨. 길면 무너짐.
영화 한 편을 한 단어로 요약하는 꼴임.
Attention이 이 병목을 깸.
문장을 문장으로 — Seq2Seq의 등장
2014년, 구글과 몬트리올 대학이 거의 동시에 같은 걸 냄.
RNN 두 개를 마주 보게 붙임.
앞 RNN(Encoder)이 "I love you"를 한 단어씩 읽음.
마지막에 요약 벡터 하나를 만듦.
뒤 RNN(Decoder)은 그 벡터만 받아 "나는 너를 사랑해"를 한 단어씩 토해냄.
이게 Sequence-to-Sequence, 줄여서 Seq2Seq임.
입력 길이와 출력 길이가 달라도 됨.
번역·요약·챗봇의 공통 골격이 여기서 처음 생김.
Encoder가 만든 요약 벡터 하나로 Decoder가 새 문장을 푼다
병목 — 한 벡터의 저주
근데 치명적 약점이 있었음.
Decoder가 받는 건 오직 마지막 hidden state 하나임.
5단어든 50단어든 같은 크기 벡터 하나에 압축됨.
앞부분 정보는 뒤로 밀려 희미해짐.
Decoder는 흐릿한 요약본만 보고 문장을 다시 써야 함.
실제로 그랬음.
20~30단어를 넘어가면 BLEU 점수가 급락함.
정보는 많은데 통로가 하나라서 무너짐.
모든 의미가 벡터 하나를 통과한다 — 문장이 길수록 무너진다
해법 — 매 순간 돌아보기
2015년, Bahdanau 연구팀의 발상은 단순했음.
요약 벡터 하나에 매달리지 말자는 것.
Decoder가 단어 낼 때마다 입력 전체를 다시 보게 하자는 것.
사람이 번역하는 걸 떠올려 보셈.
"사랑해"를 쓸 때 원문 "love" 근처를 한 번 더 봄.
Attention은 이 행동을 모델에 넣은 것.
Decoder는 출력 단어마다 인코더의 모든 hidden state를 훑음.
지금 필요한 곳에 더 큰 가중치를 줌.
통로 하나가 입력 전체로 뚫린 직통 회선들로 바뀐 셈.
출력 단어마다 입력 전체를 보고, 필요한 곳에 가중치를 몰아준다
세 단계로 끝나는 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ᵢ 한 줄임.
고정 요약 벡터 대신 단어마다 새로 조립한 맥락을 씀.
이게 긴 문장의 저주를 풂.
정렬 행렬 — 그리고 다음 혁명
Attention의 또 다른 선물은 설명 가능성임.
가중치를 히트맵으로 그리면, 모델이 어느 입력을 보고 어느 출력을 냈는지 한눈에 보임.
비즈니스에선 이게 큼.
모델이 "왜 그렇게 답했는지" 근거를 가리킬 수 있음.
의료·법률·금융에선 도입을 결정짓는 신뢰의 문제임.
Attention은 블랙박스에 작은 창을 냄.
근데 한 가지 남음.
Attention은 여전히 RNN 위에 붙인 보조 장치였음.
RNN은 단어를 하나씩 순차로 처리하니 느림.
그래서 누가 물음. "RNN 빼고 Attention만 쓰면 안 되나?"
그 질문이 다음 챕터 Transformer임.
Q. Attention이 Seq2Seq의 정보 병목을 어떻게 없앴나?
기존 Seq2Seq는 입력 전체를 마지막 hidden state 하나에 압축해 Decoder에 넘김.Attention은 이 단일 통로를 버림.
Decoder가 출력 단어마다 인코더의 모든 hidden state를 다시 참조하게 함.
매 스텝 필요한 곳에 가중치를 몰아 맥락 벡터 cₜ를 새로 만듦.
그래서 긴 문장에서도 앞부분 정보가 안 사라짐.
가중치를 히트맵으로 — 모델이 무엇을 보고 답했는지 드러난다