Decoder (Transformer) (KO)
디코더 (영어: Decoder) — 머신 러닝 및 딥 러닝에서 신경망의 구성 요소로, 주요 역할은 인코딩된 표현(예: 인코더로부터 얻은 컨텍스트 벡터 또는 은닉 상태 시퀀스)을 출력 데이터 시퀀스(예: 텍스트 또는 이미지)로 변환하는 것입니다. 디코더는 일반적으로 자기회귀(autoregressive) 방식으로 출력 데이터를 단계적으로 생성합니다.
더 넓은 의미에서, 정보 이론에서 디코더는 인코딩된 데이터를 원래 형식 또는 이해 가능한 형식으로 다시 변환하는 모든 장치 또는 알고리즘을 의미합니다.
개념 및 목적
인코더가 입력 데이터의 이해와 압축을 담당한다면, 디코더는 출력 데이터의 생성과 전개를 담당합니다. 디코더는 압축되고 정보가 풍부한 표현을 받아 이를 원하는 형식으로 순차적으로 변환합니다. 여기서 원하는 형식이란 다른 언어의 문장, 이미지의 텍스트 설명, 또는 음표의 시퀀스일 수 있습니다.
대부분의 디코더의 핵심 특성은 자기회귀적(autoregressive) 성질입니다. 즉, 시퀀스의 다음 요소(예: 단어 또는 픽셀)를 생성하기 위해 인코딩된 표현과 이전에 생성된 모든 요소를 함께 사용합니다.
다양한 아키텍처에서의 디코더
오토인코더(Autoencoder)에서의 디코더
오토인코더 아키텍처에서 디코더는 인코더와 반대되는 작업을 수행합니다.
- 인코더는 입력 데이터를 잠재 표현으로 압축합니다.
- 디코더는 이 잠재 표현을 받아 원본 데이터를 복원(재구성)하려고 시도합니다.
이러한 네트워크를 학습하면 디코더를 별도로 사용하여 잠재 공간의 벡터를 입력으로 제공함으로써 새로운 데이터를 생성할 수 있습니다.
순환 신경망(RNN/LSTM)에서의 디코더
RNN 또는 LSTM 기반의 고전적인 시퀀스-투-시퀀스(seq2seq) 모델에서 디코더는 출력 시퀀스를 토큰 단위로 생성하는 순환 신경망입니다.
- 작동 원리: 디코더는 인코더의 최종 은닉 상태(컨텍스트 벡터)로 초기화됩니다. 각 단계에서 이전에 생성된 토큰과 자신의 이전 은닉 상태를 입력으로 받아 다음 토큰을 생성하고 상태를 업데이트합니다. 이 과정은 시퀀스 종료를 나타내는 특수 토큰(`<EOS>`)이 생성될 때까지 계속됩니다.
Transformer 아키텍처에서의 디코더
Transformer 아키텍처 기반의 디코더도 자기회귀 방식으로 작동하지만, 내부 구조가 다릅니다. 디코더는 동일한 레이어의 스택()으로 구성되며, 각 레이어는 세 가지 주요 서브레이어를 포함합니다.
- 마스크드 멀티헤드 셀프 어텐션 (Masked Multi-Head Self-Attention): 이 메커니즘은 인코더와 동일하게 작동하지만, 한 가지 중요한 차이점인 마스킹이 있습니다. 마스크는 각 위치가 시퀀스의 이후 위치에 "주의를 기울이는" 것을 방지합니다. 이를 통해 위치 에 대한 예측이 위치 의 이미 알려진 출력에만 의존하도록 보장하여 자기회귀 특성을 유지합니다.
- 멀티헤드 크로스 어텐션 (Multi-Head Cross-Attention): 이것은 디코더와 인코더를 연결하는 핵심 메커니즘입니다. 여기서 Query는 디코더의 이전 레이어에서, Key와 Value는 인코더의 출력 표현에서 제공됩니다. 이를 통해 디코더는 생성의 각 단계에서 입력 시퀀스의 가장 관련성 높은 부분에 집중할 수 있습니다.
- 완전 연결 신경망 (Feed-Forward Network): 인코더에서 사용되는 것과 유사합니다.
디코더 기반 모델의 유형
인코더-디코더 모델
인코더와 디코더가 쌍으로 작동하는 고전적인 아키텍처입니다.
- 작동 원리: 인코더가 입력 데이터의 표현을 생성하고, 디코더는 이 표현을 사용하여 출력 데이터를 생성합니다.
- 예시: 원본 Transformer, T5, BART.
디코더 전용 모델 (Decoder-Only)
생성형 AI에서 주류가 된 이 모델들은 Transformer의 디코더 스택만을 사용합니다.
- 작동 원리: 이러한 모델에는 인코더가 없으므로 인코더에 대한 크로스 어텐션이 존재하지 않습니다. 모델은 순수하게 자기회귀 방식으로 작동하며, 동일한 시퀀스 내의 모든 이전 토큰을 기반으로 다음 토큰을 예측합니다. 입력 prompt와 이미 생성된 텍스트는 함께 처리됩니다.
- 적용: 주어진 텍스트를 이어가는 작업(텍스트 생성, 대화 시스템, 챗봇)에 이상적입니다.
- 예시: GPT 시리즈, LLaMA, Claude.
인코더와의 관계
인코더와 디코더의 상호작용은 변환 작업의 핵심 원리입니다.
- 인코더는 입력 시퀀스에 대한 정보를 벡터 집합으로 압축합니다.
- 디코더는 이 벡터 집합을 사용하여 새로운 시퀀스를 순차적으로 생성합니다.
크로스 어텐션을 통해 디코더는 각 단계에서 인코더에 "문의"하여 현재 시점에서 원본 텍스트의 어느 부분에 집중해야 하는지 파악할 수 있습니다. 예를 들어, 문장을 번역할 때 디코더는 독일어 단어를 생성하면서 입력에서 해당하는 영어 단어를 "참조"할 수 있습니다.
같이 보기
- GPT
참고 문헌
- Vaswani, A. et al. (2017). Attention Is All You Need. NIPS.