시퀀스-투-시퀀스Sequence-to-Sequence

다 듣고 나서 다른 길이로 다시 만들어 내는 구조

핵심 정리
  • 시퀀스-투-시퀀스는 줄줄이 들어온 것을 받아 줄줄이 내보내는 구조예요. 번역과 요약과 챗봇이 모두 이 틀 위에서 시작했어요.
  • 모델이 듣는 쪽과 만드는 쪽 둘로 나뉘어요. 듣는 쪽은 끝까지 다 읽고, 만드는 쪽은 그 뒤에 하나씩 내놓아요.
  • 둘 사이를 잇는 것은 요약 한 덩어리예요. 만드는 쪽은 원문을 보지 못하고 이 덩어리만 봐요.
  • 들어온 개수와 나가는 개수가 달라도 돼요. 네 마디를 듣고 세 마디를 내놓을 수 있어요.
  • 요약 덩어리 하나에 다 담으려니 긴 글에서 앞부분이 새는 문제가 생겼고, 그 답으로 어텐션이 나왔어요.
목차

1비유로 이해하기

분식집 카운터에서 주문을 받아요. 손님이 "김밥 한 줄이랑 라면 하나, 아 단무지도 좀 더 주세요" 하고 말을 끝낼 때까지 중간에 끊지 않고 끝까지 들어요. 손님 말이 끝나면 그제야 전표 한 장에 주문을 요약해 적어 주방에 넘겨요.

주방은 손님 목소리를 듣지 못해요. 넘어온 전표 한 장만 보고 김밥을 말고, 라면을 끓이고, 단무지를 담아 접시를 하나씩 내놓아요. 손님이 몇 마디를 했는지와 접시가 몇 개 나가는지는 서로 상관이 없어요. 듣는 쪽과 만드는 쪽을 이렇게 둘로 갈라 놓은 것이 시퀀스-투-시퀀스예요.

2자세히 알아보기

듣는 쪽과 만드는 쪽이 따로예요

앞서 나온 순환 신경망은 한 마디를 받으면 곧바로 한 마디를 내놓는 식이었어요. 이 방식으로는 번역을 할 수 없어요. 한국어와 영어는 단어 순서가 다르고 개수도 달라서, 첫 단어를 듣자마자 첫 단어를 내놓을 수가 없거든요.

시퀀스-투-시퀀스는 모델을 아예 둘로 나눠요. 앞쪽은 문장을 읽어 들이기만 하고 아무것도 내놓지 않아요. 뒤쪽은 읽는 일을 하지 않고 만들어 내기만 해요. 둘은 서로 다른 손잡이를 갖고 따로 학습돼요.

다 듣고 나서야 시작해요

읽는 쪽은 문장을 한 마디씩 받아들이며 요약을 계속 갱신해요. 마지막 마디까지 넣고 나면 그 시점의 요약 덩어리 하나가 남아요. 이 덩어리가 문장 전체를 대신하는 짐이에요.

만드는 쪽은 이 덩어리를 출발점으로 삼아 첫 마디를 내놓아요. 그리고 자기가 방금 내놓은 마디를 다시 자기 입력으로 받아 다음 마디를 내놓아요. 이 되먹임이 끝날 때까지 반복돼요.

멈출 때를 알려 주는 표시도 따로 있어요. 문장이 끝났다는 신호와 문장을 시작하라는 신호를 마디처럼 하나씩 만들어 두고 함께 학습시켜요. 만드는 쪽이 끝 신호를 내놓으면 거기서 멈춰요.

길이가 달라도 되는 이유

읽기와 만들기가 완전히 분리돼 있으니 개수를 맞출 이유가 없어요. 읽는 쪽은 마디 수만큼 돌고, 만드는 쪽은 끝 신호가 나올 때까지 돌아요. 네 마디를 읽고 일곱 마디를 내놓아도 아무 문제가 없어요.

이 성질 덕분에 쓸 수 있는 곳이 확 넓어졌어요. 긴 글을 짧게 줄이는 요약, 짧은 질문에 긴 답을 붙이는 대화, 음성을 글자로 옮기는 받아쓰기가 모두 같은 틀에 들어와요. 들어오는 줄과 나가는 줄의 종류가 달라도 상관없어요.

전표 한 장이 좁으면 흘려요

문제는 전표가 한 장이라는 데 있어요. 세 마디짜리 주문이든 서른 마디짜리 주문이든 같은 크기의 덩어리 하나에 눌러 담아야 해요. 주문이 길어지면 앞쪽에서 들은 것부터 자리를 잃어요.

번역에서 이 증상이 뚜렷하게 나타났어요. 짧은 문장은 잘 옮기는데 문장이 길어지면 앞 절의 내용을 통째로 빠뜨리거나 엉뚱하게 바꿔 놓는 일이 잦았어요. 구조 자체에서 오는 한계라 모델을 키운다고 해결되지 않았어요.

지금은 어떻게 바뀌었나요

해결책은 전표 한 장만 넘기지 말고, 만드는 쪽이 필요할 때마다 원문 쪽을 다시 돌아보게 하는 것이었어요. 접시 하나를 만들 때마다 손님이 한 말 중 어느 대목이 지금 필요한지 골라 보는 셈이에요. 이 장치가 어텐션이에요.

어텐션이 붙자 성능이 크게 뛰었고, 얼마 지나지 않아 순환 구조를 아예 걷어내고 어텐션만 남긴 트랜스포머가 나왔어요. 지금 쓰는 번역기와 대화형 인공지능도 안쪽 부품은 달라졌지만 읽는 쪽과 만드는 쪽을 나눠 다른 길이로 옮긴다는 뼈대는 그대로 물려받았어요.

3조금 더 정확하게

시퀀스-투-시퀀스는 인코더와 디코더 두 신경망을 이어 붙여, 길이가 정해지지 않은 입력 열을 길이가 다른 출력 열로 바꾸는 틀이에요. 인코더의 마지막 은닉 상태가 문맥 벡터가 되어 디코더의 첫 상태로 들어가요. 초기에는 두 신경망 모두 순환 신경망이나 장단기 메모리로 만들었어요.

비유가 어긋나는 지점도 있어요. 전표에는 사람이 읽을 수 있는 글자가 적히지만 문맥 벡터는 숫자 묶음이라 열어 봐도 읽을 수 없어요. 또 주방은 접시를 동시에 여러 개 만들 수 있지만, 디코더는 앞에서 내놓은 마디를 봐야 다음 마디를 만들 수 있어서 반드시 하나씩 순서대로 나와요.

학습할 때와 실제로 쓸 때 동작이 조금 달라요. 학습할 때는 정답 문장을 미리 넣어 주며 다음 마디를 맞히게 하고, 실제로 쓸 때는 자기가 방금 만든 마디를 다시 넣어요. 그래서 한 번 어긋나면 뒤가 줄줄이 어긋나기도 해요.

4직접 해보기

5흔한 오해

  • 입력과 출력의 개수가 같아야 한다고 생각하기 쉽지만, 실제로는 개수가 달라도 되게 만든 것이 이 구조의 핵심이에요.

  • 만드는 쪽이 원문을 계속 보고 있다고 여기기 쉽지만, 실제로는 기본 구조에서 원문 대신 요약 덩어리 하나만 넘겨받아요.

  • 트랜스포머가 나오면서 이 틀은 사라졌다고 생각하기 쉽지만, 실제로는 읽는 쪽과 만드는 쪽을 나누는 발상이 그대로 이어졌고 부품만 바뀌었어요.

7한 줄 요약

그러니까시퀀스-투-시퀀스는 끝까지 다 읽어 요약 하나로 넘긴 뒤 그것만 보고 다시 하나씩 만들어 내는 구조라, 들어온 길이와 나가는 길이가 달라도 다룰 수 있어요.

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