인코더·디코더Encoder-Decoder

읽는 쪽과 쓰는 쪽을 따로 둔 두 부분 구조

핵심 정리
  • 인코더·디코더는 읽는 쪽과 쓰는 쪽을 따로 둔 구조예요. 앞쪽이 입력을 요약해 담고, 뒤쪽이 그 요약을 보고 새 문장을 만들어요.
  • 인코더는 문장 전체를 앞뒤 가리지 않고 한꺼번에 봐요. 디코더는 앞에서부터 한 조각씩 이어 써요.
  • 두 쪽을 잇는 것은 원문이 아니라 뜻만 남긴 숫자 묶음이에요. 글자 그대로는 건너가지 않아요.
  • 번역이나 요약처럼 입력과 출력의 모양이 다른 일에 잘 맞는 구조예요.
  • 요즘 모델은 인코더만 쓰거나 디코더만 쓰기도 해요. 하는 일에 따라 필요한 쪽만 남긴 거예요.
목차

1비유로 이해하기

이삿날 방을 통째로 트럭에 밀어 넣는 사람은 없어요. 옷장 속 옷도 책장 책도 일단 상자에 차곡차곡 담고, 상자 옆면에 무엇이 들었는지 적어 두죠. 이 순간 물건이 어느 서랍 몇 번째 칸에 있었는지는 사라지고 무엇이 얼마나 있는지만 남아요.

새 집에 도착하면 상자를 하나씩 열어 그 집에 맞게 다시 놓아요. 방 크기도 창문 위치도 달라서 예전 배치를 그대로 옮길 수는 없어요. 상자에 담긴 내용을 보고 이 집에 어울리는 자리에 새로 놓는 거예요.

짐을 담는 쪽이 인코더, 새 집에서 푸는 쪽이 디코더예요. 그리고 그사이를 건너가는 상자가 요약된 뜻이에요.

2자세히 알아보기

담는 쪽은 문장을 통째로 훑어요

인코더는 들어온 문장을 처음부터 끝까지 한꺼번에 봐요. 세 번째 낱말을 처리하면서 열 번째 낱말을 참고해도 아무 문제가 없어요. 이미 다 들어와 있는 글이니까요.

이 자유로움이 중요한 이유가 있어요. "배가 아파요"의 배가 몸의 배인지 과일 배인지는 뒤에 나오는 말을 봐야 알 수 있어요. 인코더는 뒤를 볼 수 있으니 이런 애매함을 앞에서 미리 정리해 둘 수 있어요.

훑고 나면 문장은 조각마다 하나씩 숫자 묶음으로 바뀌어요. 이 숫자 묶음에는 그 조각이 문장 안에서 어떤 역할을 했는지가 함께 들어가요. 짐을 상자에 담을 때 물건만 넣는 게 아니라 옆면에 내용을 적어 두는 것과 같아요.

쓰는 쪽은 한 조각씩 이어 붙여요

디코더는 사정이 달라요. 아직 만들지 않은 뒷부분을 미리 볼 수는 없으니까요. 지금까지 자기가 써 놓은 조각과 인코더가 넘겨준 상자, 이 두 가지만 보고 다음 한 조각을 골라요. 고른 조각을 뒤에 붙이고, 다시 처음부터 읽고, 또 다음 조각을 골라요.

그래서 디코더에는 뒤를 못 보게 막는 가림막이 걸려 있어요. 학습할 때 정답 문장을 통째로 넣어 주면 다음 조각을 커닝해 버리기 때문에, 아직 오지 않은 자리는 일부러 가려 놓는 거예요.

출력이 끝났다는 신호도 스스로 만들어요. 더 붙일 게 없다고 판단하면 "여기까지"에 해당하는 조각을 내놓고 멈춰요.

상자를 계속 들춰 보게 해 준 장치

초기 구조에는 답답한 지점이 있었어요. 아무리 긴 문장이라도 상자 하나에 다 밀어 넣어야 했거든요. 짐이 많은 집을 상자 한 개로 옮기려니 앞쪽에 담은 물건이 짓눌려 뭉개졌어요. 문장이 길수록 앞부분을 잊는 현상이 이래서 생겼어요.

해결책은 상자를 하나로 합치지 않는 것이었어요. 인코더가 조각마다 만든 숫자 묶음을 그대로 남겨 두고, 디코더가 한 조각을 쓸 때마다 그중 지금 필요한 것을 골라 들춰 보게 했어요. 이 장치가 어텐션이에요.

"어제 친구가 준 책을 오늘 읽었어요"를 옮긴다면, 시제를 쓸 때는 "어제"가 담긴 상자를, 목적어를 쓸 때는 "책"이 담긴 상자를 봐요. 필요한 상자만 열어 보는 셈이라 문장이 길어져도 앞부분이 흐려지지 않아요.

요즘은 한쪽만 쓰기도 해요

하는 일에 따라 필요한 쪽이 달라요. 문장의 뜻을 파악하는 일에는 쓰는 쪽이 필요 없어요. 분류나 검색처럼 답이 짧게 떨어지는 일은 인코더만 있는 모델로 충분해요.

반대로 대화나 글쓰기처럼 계속 이어 쓰는 일에는 디코더만 있는 모델이 쓰여요. 입력으로 받은 질문도 이미 써 놓은 글처럼 취급하고 그 뒤를 이어 가면 되니까요. 요즘 대화형 모델 대부분이 이쪽이에요.

둘 다 갖춘 구조는 입력과 출력이 확실히 다른 일에 남아 있어요. 번역이나 요약처럼 들어오는 글과 나가는 글의 언어나 길이가 크게 다를 때예요.

3조금 더 정확하게

인코더는 입력 조각들을 문맥이 반영된 숫자 묶음으로 바꾸는 부분이고, 디코더는 그 숫자 묶음과 지금까지의 출력을 함께 받아 다음 조각의 확률을 내놓는 부분이에요. 디코더 안에서 자기 출력을 보는 통로와 인코더 쪽을 보는 통로는 따로 있고, 뒤를 가리는 처리를 마스킹이라고 불러요.

비유가 어긋나는 지점도 있어요. 이사 상자는 물건을 넣었다 빼도 그대로지만, 인코더가 만든 숫자 묶음에는 원문이 남아 있지 않아요. 되돌려서 원문을 그대로 복원할 수는 없어요. 또 상자는 다 싸고 나서 트럭이 출발하지만, 디코더는 조각을 하나 만들 때마다 인코더 쪽을 새로 들춰 봐요. 한 번 건네받고 끝나는 관계가 아니에요.

인코더·디코더는 특정 모델의 이름이 아니라 부품을 배치하는 방식이에요. 순환 신경망으로도, 트랜스포머로도 같은 배치를 만들 수 있어요.

4직접 해보기

5흔한 오해

  • 인코더가 문장을 압축 파일처럼 저장한다고 생각하기 쉽지만, 실제로는 원문을 되살릴 수 없는 형태로 뜻만 남기기 때문에 압축 해제 같은 복원은 되지 않아요.

  • 디코더가 인코더의 결과를 한 번만 받는다고 여기기 쉽지만, 실제로는 조각을 하나 만들 때마다 인코더 쪽을 다시 참고해요.

  • 모든 언어 모델이 인코더와 디코더를 둘 다 가진다고 생각하기 쉽지만, 실제로는 요즘 대화형 모델 상당수가 디코더만으로 이루어져 있어요.

7한 줄 요약

그러니까인코더·디코더는 입력을 뜻만 남겨 담는 쪽과 그 뜻을 보고 새 문장을 한 조각씩 써 나가는 쪽을 나눠 놓은 구조예요.

잘못된 내용이나 더 좋은 비유가 있나요? 수정 제안 보내기 · 마지막 수정2026-09-02