[Home] AI로 돌아가기

Encoder - 인코더


1. 인코더란?

[목차로 돌아가기]


2. 인코더와 디코더


1) Seq2Seq(시퀀스-투-시퀀스): 통역사의 귀와 입

Seq2Seq(Sequence-to-Sequence) 모델은 '입력된 문장을 요약하고 새로운 문장으로 변환하는 모델'이다. 마치 동시통역사와 같다. 우리가 외국인과 대화한다고 생각해 보자. 예를 들어 영어로 말을 하면 이를 한국어로 번역해 주는 동시통역사가 있다고 가정해 보자. 이 통역사는 두 가지 역할을 한다.

    1. 들고 이해하기(인코더: Encoder)
    2. 새로운 언어로 말하기(디코더: Decoder)
...
시퀀스-투-시퀀스(Sequence-to-Sequence)
seq2seq는 크게 인코더와 디코더라는 두 개의 모듈로 구성된다. 인코더(encoder)는 입력 문장의 모든 단어들을 순차적으로 입력받은 뒤에 마지막에 이 모든 단어 정보들을 압축해서 하나의 벡터로 만드는데, 이를 컨텍스트 벡터(context vector)라고 한다. 입력 문장의 정보가 하나의 컨텍스트 벡터로 모두 압축되면 인코더는 컨텍스트 벡터를 디코더로 전송한다. 디코더(decoder)는 컨텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력한다.
출처: https://wikidocs.net/24996

2) 인코더(Encoder): 들고 이해하기

통역사는 상대방의 말을 주의 깊게 듣고, 중요한 의미를 머릿속에 정리한다. 하지만 영어 문장을 그대로 외우지는 않고, 핵심 내용을 요약해서 머릿속에 저장한다.

여기에서 중요한 점은 이렇게 요약한 정보를 다음 사람이 이해할 수 있도록 '압축된 형태'로 전달해야 한다는 것이다. 즉, 인코더는 전체 문장을 그대로 넘기는 것이 아니라, 핵심 정보(핵심 벡터)로만 정리하여 전달하는 역할을 한다. 이것이 바로 문장을 벡터(vector) 형태로 압축하여 디코더에 넘기는 과정이다. 이 압축된 벡터는 컨텍스트 벡터(context vector)라고도 한다.


3) 디코더(Decoder): 새로운 언어로 말하기

통역사는 이때 들은 내용을 바탕으로 한국어로 자연스럽게 번역해서 전달한다. 하지만 단어 하나하나를 그대로 변환하는 것이 아니라, 전체적인 의미를 고려해서 자연스럽게 문장을 생성해야 한다.

즉, 디코더는 인코더가 압축한 정보를 받아 이를 다시 자연어로 풀어내는 역할을 한다. 이 과정은 마치 암호화된 메시지를 풀어서 자연스럽게 전달하는 것과 비슷하다. 그렇다면 인코더는 어떻게 원래 문장을 압축할 수 있었을까? 토큰화(tokenization)임베딩(embedding)으로 인공지능이 계산할 수 있도록 문장을 숫자로 바꾸고 벡터로 변환했기 때문이다.

다음 문장으로 토큰화와 임베딩의 전 과정을 살펴보자. 다음 내용은 토큰화와 임베딩의 과정을 직관적으로 이해하기 위함이니 각 숫자가 무엇을 의미하는지는 크게 신경 쓰지 않아도 된다.

먼저 이 문장을 작은 단위(토큰)로 나누어야 한다.

문장을 나눈 후 각 토큰을 숫자로 변환하는 과정을 거친다.

이렇게 토큰 ID(숫자)로 변환한 후 토큰 관계를 모델이 이해할 수 있도록 벡터 형태로 변환하는 '임베딩 과정'을 거친다. 4차원 벡터로 변환한다고 가정하면 다음과 같이 변환된다.

이제 Seq2Seq 인코더의 핵심이 등장한다. 바로 정보를 압축하여 디코더로 넘기는 것이다.

인코더는 이 토큰 임베딩 벡터들을 분석하여 문장의 핵심 정보를 하나의 벡터로 압축한다. 이 벡터를 컨텍스트 벡터(context vector)라고 한다. 문맥 정보를 담고 있다고 해서 문맥을 의미하는 컨텍스트 벡터라는 이름을 붙였다. 컨텍스트 벡터는 마치 문장의 요약본처럼 작동한다. 예를 들어 다음과 같이 전체 문장을 요약하는 하나의 벡터가 생성될 수 있다.

이제 인코더는 이 벡터를 디코더에 넘긴다. 디코더는 압축된 정보, 즉 이 컨텍스트 벡터를 받아서 새로운 문장을 생성한다. 하지만 문제는 단순한 숫자 벡터를 어떻게 자연어 문장으로 바꾸냐는 것이다. 그래서 디코더는 RNN(순환 신경망)을 이용하여 한 단어씩 생성하면서 문장을 만든다.

[디코더(출력 생성 과정)]

최종 출력 문장은 다음과 같습니다.

즉, 디코더는 '압축된 의미'를 받아 한 단어씩 문장을 만들어 가는 역할을 한다. 이 과정은 마치 요약한 개요를 보고 새로운 글을 써 내려가는 것과 비슷하다.

Seq2Seq 모델은 기존 RNN과 달리 단순히 예측하는 것이 아니라 새로운 문장을 생성하는 모델이다.

이 구조를 기반으로 챗봇, 번역 모델, 텍스트 요약 모델, 문장 생성 AI가 발전할 수 있었다. 하지만 RNN 기반 알고리즘이기 때문에 몇 가지 문제점이 있다.

먼저 긴 문장을 처리하는 데 한계가 있다. 문장이 길어질수록 앞부분 정보가 점점 희미해지는 문제가 발생하기 때문이다.

그리고 컨텍스트 벡터의 한계가 있다. 인코더가 디코더로 넘기는 압축 정보(컨텍스트 벡터)가 너무 작으면 중요한 정보를 충분히 전달하지 못할 수도 있다. 그래서 문장이 길어진다면 번역 품질이 떨어지는 문제가 발생할 수 있다.

이러한 문제를 해결하기 위해 '어텐션 메커니즘'이 도입되었고, 어텐션 모델은 마침내 트랜스포머(Transformer)의 핵심 요소로 발전했다. 즉, Seq2Seq는 자연어 생성(Natural Language Generation, NLG)의 시작을 알린 중요한 모델이었다.