Seq2Seq와 Encoder-Decoder: Attention의 탄생을 이끈 단일 벡터 병목 현상
요약
Seq2Seq 모델의 구조인 Encoder-Decoder 아키텍처와 컨텍스트 벡터의 개념을 설명합니다. 입력 시퀀스를 하나의 벡터로 압축하는 과정에서 발생하는 병목 현상과 이를 해결하기 위한 RNN 기반의 작동 원리를 다룹니다.
핵심 포인트
- Seq2Seq는 입력과 출력의 길이가 다른 시퀀스 변환을 가능하게 함
- Encoder는 입력을 컨텍스트 벡터로 압축하고, Decoder는 이를 바탕으로 출력을 생성함
- SOS와 EOS 토큰을 통해 가변적인 출력 시퀀스의 시작과 종료를 제어함
- 학습 시 정답을 사용하는 Teacher Forcing 기법의 중요성
Transformer가 등장하기 전, 현대적인 챗봇이 나타나기 전에는 하나의 시퀀스를 다른 시퀀스로 변환하기 위한 아름답고 단순한 아이디어가 있었습니다. 전체를 읽고, 그것을 하나의 벡터로 압축한 다음, 그 벡터를 다시 새로운 시퀀스로 펼치는 것입니다. 이것이 바로 sequence-to-sequence (Seq2Seq) 학습이며, 신경망 기계 번역 (Neural Machine Translation)의 첫 번째 물결을 이끌었습니다. 또한 이는 지나고 보니 너무나 명백한 결함을 가지고 있었으며, 이 결함을 해결하는 과정에서 현대 AI 시대 전체가 탄생했습니다.
저는 간단한 태스크를 통해 이 모든 과정이 단계별로 일어나는 것을 볼 수 있는 인터랙티브 페이지를 만들었습니다. 다음은 그 설명입니다.
문제점: 가변적인 입력과 가변적인 출력
사람들이 처음 접하는 대부분의 모델은 분류기 (Classifier)입니다. 즉, 하나의 입력과 하나의 레이블이 존재합니다. 하지만 현실의 수많은 문제들은 전체 시퀀스를 다른 전체 시퀀스로 매핑하며, 그 길이는 서로 일치하지 않습니다. 세 개의 프랑스어 단어를 다섯 개의 영어 단어로 번역합니다. 긴 기사를 두 줄의 요약으로 바꿉니다. 오디오를 텍스트로 전사합니다. 입력 단계마다 하나의 출력을 내보내는 일반적인 RNN (Recurrent Neural Network)은 이를 수행할 수 없습니다. 왜냐하면 출력을 입력과 정확히 같은 길이로 강제하기 때문입니다. 우리는 먼저 모든 것을 읽은 다음, 원하는 어떤 길이의 출력이라도 생성할 수 있는 무언가가 필요합니다.
해결책: 직렬로 연결된 두 개의 RNN
Seq2Seq의 해답은 놀라울 정도로 깔끔합니다. 두 개의 네트워크를 사용하는 것입니다.
**Encoder (인코더)**는 입력을 한 번에 하나의 토큰씩 읽으며, 매 단계마다 진정한 재귀 (Recurrence)를 통해 은닉 상태 (Hidden State)를 업데이트하는 RNN입니다: h_t = tanh(Wx·x_t + Wh·h_{t-1} + b). 마지막 토큰 이후, 인코더의 최종 은닉 상태는 Context Vector (컨텍스트 벡터) (어떤 이들은 이를 "Thought Vector (사고 벡터)"라고 부릅니다)로 취해집니다. 원칙적으로 이 하나의 고정된 크기의 벡터가 이제 모델이 입력에 대해 알아야 할 모든 정보를 담게 됩니다.
**디코더 (decoder)**는 초기 은닉 상태 (initial hidden state)가 해당 컨텍스트 (context)로 설정되는 두 번째 RNN입니다. 디코더는 한 번에 하나의 토큰씩 출력을 생성합니다. 즉, 이전 토큰을 가져와 상태를 업데이트하고, 어휘 사전 (vocabulary)에 대한 확률 분포로 투영 (project)한 뒤, 토큰을 선택하여 이를 다시 입력으로 피드백합니다. 읽기 (reading)와 쓰기 (writing)를 분리함으로써 양측이 서로 다른 길이와 심지어 서로 다른 어휘 사전을 가질 수 있게 됩니다.
시작과 종료: SOS와 EOS
출력 길이가 고정되어 있지 않기 때문에 모델에는 마커 (marker)가 필요합니다. 특수한 시작 토큰인 <SOS> (start-of-sequence)는 디코더의 가장 첫 번째 입력으로서, 아무것도 없는 상태에서 생성을 시작하게 합니다. 특수한 종료 토큰인 <EOS> (end-of-sequence)는 디코더가 "끝났다"라고 말하기 위해 방출 (emit) 할 수 있는 것입니다. 디코딩 루프는 <EOS>가 나타날 때까지 (또는 최대 길이에 도달할 때까지) 계속됩니다. <EOS>가 없다면 모델은 언제 멈춰야 할지 결코 알 수 없을 것입니다.
교사 강요 (Teacher forcing) vs 자유 실행 (free-running)
이 부분은 사람들이 자주 혼동하는 지점이므로, 데모에는 이를 위한 토글 (toggle) 스위치가 있습니다.
학습 (training) 단계에서는 이미 정답 출력을 알고 있으므로, 각 디코더 단계에서 모델의 자체 추측 대신 실제 (true) 이전 타겟 토큰을 입력으로 넣어줍니다. 이것이 교사 강요 (teacher forcing)이며, 이는 초기의 실수가 전체 시퀀스에 걸쳐 눈덩이처럼 불어나는 것을 방지하여 학습을 빠르고 안정적으로 만듭니다.
추론 (inference) 단계에서는 정답 (ground truth)이 없으므로, 디코더는 자기회귀적 (autoregressively)으로 동작합니다. 즉, 자신의 이전 예측값을 다음 입력으로 다시 피드백합니다. 동일한 네트워크가 두 가지 다른 방식으로 디코딩되는 것입니다. 데모에서 토글을 전환하여 디코더의 입력 스트림이 실제 타겟에서 자신의 출력으로 바뀌는 것을 확인해 보세요.
체감할 수 있는 병목 현상
여기에 치명적인 결함이 있으며, 이것이 바로 이 페이지가 존재하는 이유입니다. 입력이 아무리 길더라도 인코더는 그 모든 것을 하나의 고정된 크기의 컨텍스트 벡터 (context vector)에 쑤셔 넣어야 합니다. 5개의 토큰이라면 괜찮습니다. 50개의 토큰이라면 어떨까요? 벡터 크기는 동일하며, 정보는 압축되어 버립니다. 특히 초기에 읽은 토큰들에 대한 정보가 그렇습니다. 경험적으로 볼 때, 번역 품질은 20~30단어를 넘어서면 급격히 떨어집니다.
이 데모는 그 현상을 생생하게 보여줍니다. 장난감 과제, 즉 숫자 문자열을 뒤집는 작업에 실제 인코더-디코더를 적용합니다. 따라서 3 1 4가 4 1 3으로 돌아와야 합니다. 업데이트되는 은닉 상태(hidden state)는 스크립트된 만화가 아니라 진정한 순환 계산(recurrence math)입니다. 짧은 입력에는 완벽하게 뒤집습니다. 그런 다음 길이 슬라이더를 올리면, 3자리 문자열을 성공적으로 처리했던 바로 그 기계가 9자리 문자열을 망치기 시작합니다. 왜냐하면 9개의 토큰이 더 이상 8차원 컨텍스트에 맞지 않기 때문입니다. 과부하되면서 작은 '압력' 게이지가 녹색에서 빨간색으로 변하는 것을 볼 수 있습니다.
이것이 중요한 이유: 어텐션과 트랜스포머 (Attention and the Transformer)
그 병목 현지를 바라보던 누군가가 당연한 질문을 던졌습니다. 하나의 벡터가 너무 작다면, 왜 디코더에게 인코더의 마지막 상태만 사용하도록 강제하는 것일까요? 어텐션(Attention) (2014년)은 모든 인코더 은닉 상태를 유지하고, 디코더는 각 출력 단계에서 이 모든 상태에 가중치 합산(weighted blend)을 계산하여, 자신이 생성하려는 토큰과 가장 관련성이 높은 입력 위치에 집중합니다. 단일 요약 벡터가 사라지고, 긴 문장 번역이 갑자기 구원받게 된 것입니다.
어텐션은 너무 잘 작동해서 연구자들이 더 대담한 질문을 던지게 했습니다. RNN(Recurrent Neural Network) 자체가 필요할까? 트랜스포머(Transformer) (2017년)는 순환 구조를 완전히 버리고 모든 것을 셀프-어텐션(self-attention)으로 구축했습니다. 순차적인 루프를 제거함으로써 전체 시퀀스를 병렬로 처리할 수 있게 되었고, 이것이 GPU에서 확장 가능한 이유이며, 모든 현대 LLM은 이 흐름을 따릅니다: seq2seq → 어텐션 → 트랜스포머.
여기서 구축한 인코더-디코더 구조는 여전히 번역, 요약, 음성, 이미지 캡셔닝, 그리고 수많은 LLM의 기반이 됩니다. 이것을 학습하는 것은 그 이후에 나오는 모든 것들이 정제(refinement)하는 골격을 배우는 것입니다.
여기서 인코더, 디코더, 티처-포싱(teacher-forcing) 토글 및 길이 슬라이더를 가지고 놀아보세요:
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기