최근 자연어 처리(NLP) 분야에서는 트랜스포머(Transformer) 기반의 LLM(Large Language Model)이 많이 쓰이고 있습니다.
이런 모델의 대부분은 Encoder-Decoder 구조를 기반으로 설계되어 있습니다.
이 구조는 입력 문장을 압축된 표현으로 바꾸는 인코더(Encoder)와 이 표현을 다시 원하는 출력으로 복원하는 디코더(Decoder)로 나뉩니다.
하지만 모든 모델이 두 구조를 동시에 사용하는 것은 아니고, 인코더만 존재하는 모델도 있고 반대로 GPT처럼 디코더만 사용하는 모델도 존재합니다!
오늘은 이 두 구조의 개념을 바탕으로, Encoder와 Decoder란 무엇인지 좀 더 깊이 있게 이해하고 제어와 자율주행 관점에서도 살펴봅시다!
1. BERT
구글의 BERT(Bidirectional Encoder Representations from Transformers)는 이름에서도 알 수 있듯이 인코더(Encoder)만 사용하는 모델입니다!
입력 문장에서 앞 단어와 뒷 단어의 관계를 동시에 고려하여 문맥을 양방향으로 이해하는 것이 특징입니다.
기존의 RNN이나 LSTM기반 모델은 문장을 왼쪽에서 오른쪽 혹은 오른쪽에서 왼쪽으로만 처리했기 때문에 문맥을 온전히 반영하지 못하는 단점이 있었습니다.
BERT는 Transformer의 Self-Attention 메커니즘을 활용해 문장 전체의 단어 관계를 동시에 고려합니다.
예를 들어, "나는 [Mask] 먹었다" 라는 문장에서 BERT는 [MASK] 위치에 올 수 있는 단어를 예측하기 위해 앞뒤의 "나는" 과 "먹었다" 라는 단어 모두를 참고하게 되는 것이죠!
이와 같은 방식은 MLM(Masked Language Modeling)이라는 학습 기법을 기반으로 작동하며 단어 간의 관계를 더욱 잘 파악할 수 있게 해줍니다.
이런 특징으로 BERT는 문장 이해에 장점이 있지만, 양방향 처리를 위해 많은 계산이 필요하므로 추론 속도가 느릴 수 있다는 단점이 있습니다.
2. GPT
OpenAI의 GPT(Gnerative pretrained Transformer)는 디코더(Decoder)만 사용하는 트랜스포머 기반 모델입니다!
GPT는 문장에서 이전 단어들을 바탕으로 다음 단어를 예측하는 방식으로 작동합니다.
그렇기 때문에 주로 순차적인 텍스트 생성과 질문에 대한 답변에 아주 큰 강점을 가지고 있는 것이죠.
예를 들어, 주어진 문장이 "나는 밥을" 이라면, 그 뒤에 올 가능성이 가장 높은 단어를 예측하여 "먹었다" 와 같은 출력을 생성합니다.
이처럼 GPT는 BERT와는 다르게 왼쪽에서 오른쪽 방향, 즉 단방향으로 순차적으로 정보를 처리합니다!
GPT는 입력 문장 $\mathbf{x}=(x_1,x_2,\cdots,x_n)$에 대해, 각 시점 $t$에서 다음 단어 $x_t$의 확률을 계산하게됩니다.
이때 사용되는 Self-Attention은 Casual Masking을 통해 현재 위치보다 미래의 토큰을 보지 못하게 제한합니다.
덕분에 GPT는 예측 과정에서 논리적 순서를 보장하게 됩니다.
하지만 단방향 처리라는 특성상, 문장의 미래 맥락을 반영하지 못해 BERT처럼 전체 문장을 정밀하게 이해하는 데는 상대적으로 불리할 수 있습니다.
따라서 정보 추출이나 문장 분류 등의 일부 태스크에서는 BERT 계열 모델이 더 효과적일 수 있습니다!
3. T5
구글의 T5(Text-to-Text Transfer Transformer)는 인코더(Encoder)-디코더(Decoder)구조를 사용하는 대표적인 트랜스포머 모델입니다.
이 구조는 입력 문장을 인코더가 요약해서 벡터로 압축한 뒤, 그 정보를 기반으로 디코더가 새로운 출력 문장을 생성하는 방식입니다.
T5는 질의응답, 요약, 번역 등과 같이 입력과 출력의 형식이 서로 다른 작업들에 매우 유용하게 사용되는데요,
예를 들어, T5는 번역 작업을 수행할 때 입력 문장을 먼저 이해하고 그 의미를 프랑스어나 한국어 등의 출력 문장으로 변환하는 방식으로 동작합니다!
작동방식에 대해 간단히 정리해볼게요.
입력 문장 $\mathbf{x}=(x_1,x_2,\cdots,x_n)$을 받아서, 이를 고차원 벡터로 인코딩 합니다.
인코더 내부에서는 여러 층의 Self-Attention과 Feed Forward Network를 통해 문장 전체의 의미를 담은 표현 $\mathbf{z}$를 생성하게 됩니다.
그 후, 디코더는 인코더가 만든 표현 $\mathbf{z}$를 바탕으로 새로운 시퀀스 $\mathbf{y}=(y_1,y_2,\cdots,y_m)$를 왼쪽에서 오른쪽으로 생성합니다.
이 과정에서 디코더는 이전까지 생성된 출력 단어들과 인코더의 정보를 함께 참고하며 다음 단어를 예측하게 됩니다.
인코더-디코더 구조는 문장 전체의 의미를 요약해서 다른 형식으로 변환하는데 탁월한 성능을 보여주기 때문에 문장 변환 이나 이해 후 생성해야하는 작업에 특히 효과적입니다.
하지만, 인코더와 디코더를 모두 사용하는 만큼 계산량과 메모리 사용량이 증가하고 추론 속도가 느려질 수 있는 단점도 존재합니다.
참고로 T5는 모든 NLP 태스크를 텍스트 입력에서 텍스트 출력으로 통일한 최초의 모델로 이후 많은 파생 모델의 기반이 되었습니다!
4. Encoder와 Decoder란? (제어와 자율주행 관점의 접근)
Encoder-Decoder 구조는 단순히 언어 처리에만 쓰이는 것이 아닙니다.
실제로는 입력 데이터를 요약하고 이를 바탕으로 미래의 결과나 행동을 생성해야 하는 다양한 상황에서 매우 유용하게 사용되죠!
특히 자율주행 차량에서의 행동 예측, 경로 계획, 로봇 제어 정책 생성 등에서 이 구조는 시계열 데이터에서 미래 예측 또는 행동 시퀀스로 이어지는 구조로 모델링 할 수 있게 해줍니다.
다시 한번 정리하면, Encoder는 입력 상태를 고차원 벡터로 요약하고 Decoder는 그 요약 정보를 바탕으로 미래의 행동 시퀀스나 제어 명령을 생성합니다.
수식적으로 간단히 정리해보면 아래와 같이 할 수 있습니다:
$$
\mathbf{x}=(x_{t-K},x_{t-K+1},\cdots,x_t)
$$
여기서 각 $x_i$는 차량의 상태(위치, 속도, 등)를 나타냅니다.
인코더(Encoder)는 이 시퀀스를 고차원 표현 $\mathbf{x}$로 요약합니다:
$$
\mathbf{x}=\text{Encoder} (x_{t-K:t})
$$
디코더(Decoder)는 이 표현을 바탕으로 미래의 행동 시퀀스 $\mathbf{u}=(u_{t+1},\cdots,u_{t+H})$를 예측합니다:
$$
u_{t+h}=\text{Decoder} (z,u_{t+1:t+h-1})\quad \text{for} \; h=1,\cdots,H
$$
즉, 미래 행동은 과거 정보의 요약($z$)과 이전 출력된 행동에 조건화되어 생성됩니다.
이는 실제 자동 운전 제어기가 과거 상태를 바탕으로 매 순간 최적의 제어 명령을 생성하는 것과 유사하죠.
Encoder-Decoder 구조는 아주 좋은 모델이지만, 미래 오차 누적 문제가 발생할 수 있고 제어 문제에서는 시간 지연과 불확실성 등으로 인해 안정성 확보가 어려울 수 있습니다.
이를 해결하기 위해 스케쥴링과 제어기 등에서 다양한 연구가 이루어지고 있습니다!
'AI' 카테고리의 다른 글
| [AI] Diffusion Model 이해하기 - 2 (2) | 2025.06.17 |
|---|---|
| [AI] Diffusion model 이해하기 - 1 (4) | 2025.06.16 |
| [AI] LSTM(Long Short-Term Memory) (0) | 2024.06.25 |
