Skip to main content
Summary

순서대로 읽는 모델의 아름다움과 답답함

RNN은 순서가 있는 데이터를 다루기 위해 등장한 아주 자연스러운 아이디어였습니다. 문장은 앞에서 뒤로 읽고, 음악은 시간에 따라 흐르고, 주가는 어제에서 오늘로 이어집니다. 그러니 모델도 데이터를 한 조각씩 차례대로 읽으며 기억을 업데이트하면 될 것처럼 보입니다.

예를 들어 문장 나는 어제 도서관에서 빌린 책을 오늘 반납했다를 생각해 봅시다. RNN은 첫 번째 토큰인 나는을 읽고 은닉 상태를 만듭니다. 그다음 어제를 읽으면서 이전 은닉 상태를 참고합니다. 다시 도서관에서, 빌린, 책을처럼 한 토큰씩 읽어 나갑니다. 이때 은닉 상태는 지금까지 읽은 내용을 담는 작은 메모장처럼 작동합니다.

이 방식은 직관적입니다. 우리가 글을 읽는 순서와도 닮았습니다. 하지만 바로 그 직관적인 구조 때문에 RNN은 큰 한계를 갖습니다. 모든 것을 순서대로 처리해야 하고, 오래전에 나온 정보를 끝까지 보존하기 어렵습니다. 짧은 문장에서는 괜찮아 보이던 문제가 문장이 길어지고 데이터가 커질수록 점점 크게 드러납니다.

이 장의 목표는 RNN을 비판하기 위한 것이 아닙니다. 오히려 RNN이 왜 중요한 모델이었는지, 그리고 왜 그다음 단계로 Attention과 Transformer가 필요했는지 이해하기 위한 것입니다. RNN의 약점을 알면 Attention이 단순한 성능 개선 기법이 아니라, 순서 데이터를 바라보는 방식 자체를 바꾼 구조적 전환이라는 사실이 보입니다.

RNN의 한계

RNN은 한 칸씩 앞으로만 간다

RNN의 기본 계산은 다음과 같은 흐름으로 이해할 수 있습니다.

현재 토큰을 입력받습니다. 이전 시점의 은닉 상태를 함께 봅니다. 두 정보를 섞어 새로운 은닉 상태를 만듭니다. 그리고 이 은닉 상태를 다음 시점으로 넘깁니다.

식으로 쓰면 대략 이렇게 표현할 수 있습니다.

h_t = f(x_t, h_{t-1})

여기서 x_t는 현재 시점의 입력이고, h_t는 현재 시점의 은닉 상태입니다. h_{t-1}은 바로 이전 시점의 은닉 상태입니다. 함수 f는 입력과 이전 기억을 섞어 새 기억을 만드는 신경망 계산이라고 보면 됩니다.

문제는 h_t를 계산하려면 반드시 h_{t-1}이 먼저 있어야 한다는 점입니다. h_{t-1}을 만들려면 h_{t-2}가 필요하고, h_{t-2}를 만들려면 h_{t-3}이 필요합니다. 결국 문장의 열 번째 토큰을 처리하려면 아홉 번째 토큰까지의 계산이 모두 끝나 있어야 합니다.

이 구조는 마치 줄을 서서 도장을 받는 상황과 비슷합니다. 열 번째 사람이 아무리 급해도 아홉 번째 사람이 도장을 받기 전에는 앞으로 나갈 수 없습니다. 한 명씩 차례대로 처리해야 합니다. 사람이 적을 때는 괜찮지만, 수천 명이 줄을 서 있으면 시간이 크게 늘어납니다.

딥러닝 학습에서도 비슷한 일이 벌어집니다. GPU는 많은 계산을 동시에 처리할 때 강합니다. 이미지 모델의 CNN은 여러 픽셀 영역에 대한 합성곱 계산을 한꺼번에 처리할 수 있습니다. MLP도 많은 뉴런 계산을 행렬 곱으로 묶어 병렬로 처리할 수 있습니다. 하지만 RNN은 시간 방향의 계산이 서로 강하게 의존합니다. 앞 시점의 은닉 상태가 있어야 뒤 시점을 계산할 수 있기 때문입니다.

물론 실제 구현에서는 배치 안의 여러 문장을 동시에 처리할 수 있습니다. 예를 들어 64개의 문장을 한 배치로 넣으면 첫 번째 위치의 토큰 64개는 함께 계산할 수 있습니다. 하지만 각 문장 안에서는 여전히 1번 위치, 2번 위치, 3번 위치를 차례대로 지나야 합니다. 시퀀스 길이가 길어질수록 이 순차 처리의 비용은 피하기 어렵습니다.

병렬화가 어렵다는 것은 왜 큰 문제일까

처음에는 "조금 느린 정도 아닌가?"라고 생각할 수 있습니다. 하지만 딥러닝에서는 계산 방식이 모델의 가능성을 제한합니다. 특히 언어 모델처럼 거대한 데이터와 긴 문맥을 다루는 경우에는 병렬화가 매우 중요합니다.

모델이 많은 텍스트를 학습하려면 수많은 문장을 반복해서 읽어야 합니다. 한 문장이 20토큰이라면 RNN은 적어도 20번의 시간 단계를 거쳐야 합니다. 한 문장이 2,000토큰이라면 2,000번의 순차 단계를 지나야 합니다. 각 단계의 계산량이 작더라도, 다음 단계가 이전 단계에 묶여 있으면 전체 학습 속도는 크게 느려집니다.

이는 단순히 학습 시간이 길어진다는 뜻만은 아닙니다. 학습이 느리면 더 큰 모델을 실험하기 어렵고, 더 많은 데이터를 사용하기 어렵고, 더 긴 문맥을 다루기 어렵습니다. 모델 구조의 병목이 연구와 제품의 가능성을 함께 제한하는 셈입니다.

RNN의 순차 처리 문제는 다음과 같이 정리할 수 있습니다.

  • 각 시점의 계산이 이전 시점의 은닉 상태에 의존합니다.

  • 문장 내부의 토큰들을 시간 방향으로 완전히 동시에 처리하기 어렵습니다.

  • 시퀀스가 길수록 학습과 추론 시간이 길어집니다.

  • 긴 문맥을 많이 사용하는 대형 언어 모델로 확장하기 불리합니다.

이 지점에서 우리는 Transformer가 왜 강력했는지 미리 짐작할 수 있습니다. Transformer는 모든 토큰을 같은 무대 위에 올려놓고, 토큰들 사이의 관계를 한꺼번에 계산하는 방향으로 나아갑니다. 물론 Transformer에도 계산 비용은 있습니다. 하지만 시간 방향으로 한 칸씩만 전진해야 하는 RNN의 제약에서 벗어났다는 점이 결정적입니다.

은닉 상태라는 작은 가방

RNN의 두 번째 큰 문제는 정보를 기억하는 방식에서 나옵니다. RNN은 지금까지 읽은 내용을 은닉 상태 h에 담아 다음 시점으로 넘깁니다. 이 은닉 상태는 앞에서 말한 것처럼 작은 메모장, 혹은 여행 가방에 비유할 수 있습니다.

짧은 여행이라면 작은 가방 하나로 충분합니다. 양말 몇 켤레, 티셔츠, 충전기 정도만 넣으면 됩니다. 하지만 한 달 동안 여러 나라를 여행해야 한다면 이야기가 달라집니다. 옷도 필요하고, 약도 필요하고, 서류도 필요하고, 비상식량도 필요합니다. 가방이 작으면 무엇을 넣고 무엇을 버릴지 계속 선택해야 합니다.

RNN의 은닉 상태도 마찬가지입니다. 문장이 짧으면 이전 정보가 비교적 잘 유지됩니다. 하지만 문장이 길어지면 은닉 상태는 많은 정보를 압축해야 합니다. 앞에서 나온 주어, 중간에 나온 조건, 뒤에서 필요한 단서가 모두 이 작은 벡터 안을 지나갑니다.

예를 들어 다음 문장을 봅시다.

철수는 어릴 때부터 바이올린을 배웠고, 대학에서는 물리학을 전공했으며, 졸업 후에는 여러 나라를 여행하다가 결국 자신이 가장 사랑했던 악기인 바이올린을 다시 잡았다.

문장 마지막의 다시 잡았다를 제대로 이해하려면 앞쪽의 바이올린을 기억해야 합니다. 하지만 바이올린과 다시 잡았다 사이에는 많은 단어가 끼어 있습니다. RNN은 그 사이를 지나며 은닉 상태를 계속 업데이트합니다. 업데이트가 반복될수록 초반 정보는 뒤섞이고 약해질 수 있습니다.

사람도 비슷합니다. 긴 설명을 듣다 보면 처음에 들은 이름이나 조건을 잊어버릴 때가 있습니다. "아까 그 사람이 누구였지?" 하고 다시 앞으로 돌아가 읽습니다. RNN은 기본적으로 매 시점에서 은닉 상태만 다음으로 넘기기 때문에, 필요한 순간에 앞쪽 단어를 직접 다시 바라보기가 어렵습니다.

장기 의존성 문제

멀리 떨어진 요소 사이의 관계를 학습하기 어려운 문제를 장기 의존성 문제라고 부릅니다. 여기서 의존성은 한 정보가 다른 정보에 영향을 준다는 뜻입니다. 문장 앞쪽의 단어가 뒤쪽 해석에 필요하다면 두 단어 사이에는 의존성이 있습니다. 그 거리가 멀면 장기 의존성입니다.

언어에는 장기 의존성이 자주 등장합니다. 주어와 동사가 멀리 떨어질 수 있고, 앞 문장에서 나온 인물이 뒤 문장에서 대명사로 다시 등장할 수 있습니다. 긴 문서에서는 처음에 제시한 주장이 마지막 결론과 연결되기도 합니다. 단어 하나만 보는 모델로는 이런 관계를 이해하기 어렵습니다.

다음과 같은 문장을 생각해 봅시다.

회의실에서 조용히 발표 자료를 검토하던 지민은, 갑자기 들어온 팀장의 질문에 잠시 당황했지만, 어제 밤늦게까지 준비한 내용을 떠올리며 차분하게 대답했다.

대답했다의 주체는 지민입니다. 하지만 지민과 대답했다 사이에는 여러 구절이 끼어 있습니다. 모델은 중간 정보를 지나면서도 누가 행동의 주체인지 유지해야 합니다. 짧은 문장에서는 쉬워 보이지만, 문장이 길어질수록 이런 연결은 어려워집니다.

RNN은 이론적으로 이전 정보를 계속 은닉 상태에 담을 수 있습니다. 그래서 "원한다면 아주 오래전 정보도 기억할 수 있는 것 아닌가?"라고 생각할 수 있습니다. 문제는 이론적으로 가능하다는 것과 실제 학습에서 잘 된다는 것이 다르다는 데 있습니다. 실제로는 정보가 여러 단계의 계산을 거치며 희미해지고, 기울기도 멀리까지 잘 전달되지 않는 문제가 생깁니다.

정보는 왜 희미해질까

RNN에서 정보가 희미해지는 이유를 직관적으로 보겠습니다. 은닉 상태는 매 시점마다 새 입력과 섞입니다. 이전 기억에 현재 입력을 더하고, 가중치를 곱하고, 활성화 함수를 통과합니다. 이 과정이 수십 번, 수백 번 반복됩니다.

처음에는 선명했던 정보도 계속 변형되면 원래 모습을 잃기 쉽습니다. 물감 비유를 들어 봅시다. 처음에 파란색 한 방울을 떨어뜨렸습니다. 그다음 빨간색, 노란색, 검은색, 흰색을 계속 섞습니다. 한참 뒤에는 처음의 파란색이 있었는지 알아보기 어렵습니다. 은닉 상태 안의 정보도 비슷합니다. 새 입력이 들어올 때마다 상태가 갱신되고, 오래전 정보는 상대적으로 약해질 수 있습니다.

또 다른 관점은 역전파입니다. 우리는 앞에서 역전파를 "오차가 각 가중치에 얼마나 책임이 있는지 거꾸로 전달하는 과정"으로 배웠습니다. RNN도 학습할 때는 시간 방향으로 펼쳐진 계산 그래프를 따라 역전파를 수행합니다. 마지막 시점에서 손실을 계산했다면, 그 오차 신호가 이전 시점들로 거슬러 올라갑니다.

그런데 길이가 긴 시퀀스에서는 이 거슬러 올라가는 길이 매우 깁니다. 기울기는 여러 연산을 연달아 통과합니다. 이때 작은 값들이 계속 곱해지면 기울기가 점점 작아집니다. 반대로 큰 값들이 계속 곱해지면 기울기가 지나치게 커질 수 있습니다. 앞의 경우를 기울기 소실, 뒤의 경우를 기울기 폭주라고 합니다.

기울기 소실이 생기면 오래전 시점의 가중치가 손실에 어떤 영향을 주었는지 학습 신호가 거의 전달되지 않습니다. 마치 멀리서 외치는 소리가 중간에 사라져 버리는 것과 같습니다. 모델 입장에서는 "문장 앞쪽의 단어가 중요했구나"라는 피드백을 제대로 받지 못합니다. 그러면 다음 학습에서도 그 관계를 잘 잡아내기 어렵습니다.

짧은 기억으로 긴 문장을 읽을 때 생기는 일

RNN의 한계를 조금 더 현실적인 예로 살펴보겠습니다. 감성 분류 모델이 다음 리뷰를 읽는다고 해 봅시다.

처음 30분은 지루했고 배우들의 대사도 어색했지만, 중반 이후 이야기가 살아나기 시작했고 마지막 장면은 올해 본 영화 중 가장 인상적이었다.

이 리뷰의 전체 감성은 긍정에 가깝습니다. 하지만 앞부분에는 지루했고, 어색했지만 같은 부정적인 단어가 나옵니다. 뒤쪽에는 가장 인상적이었다라는 강한 긍정 표현이 등장합니다. 모델은 문장 전체의 흐름을 보고 판단해야 합니다.

RNN은 문장을 순서대로 읽으며 은닉 상태를 업데이트합니다. 앞부분의 부정적인 정보가 들어오고, 중간의 전환 표현인 하지만이 들어오고, 마지막의 긍정 표현이 들어옵니다. 짧은 문장에서는 어느 정도 처리할 수 있습니다. 하지만 리뷰가 훨씬 길어져서 중간에 줄거리 설명, 배우 소개, 촬영 이야기까지 들어가면 어떻게 될까요? 초반의 불만, 중간의 반전, 마지막의 평가를 균형 있게 유지하기가 어려워집니다.

번역에서도 비슷한 문제가 생깁니다. 어떤 언어에서는 문장 앞쪽의 단어가 뒤쪽의 어미나 성별, 수, 격과 연결됩니다. 앞에서 나온 명사를 기억하지 못하면 뒤쪽 번역이 어색해질 수 있습니다. 질의응답에서도 질문의 핵심 단어가 긴 문맥 앞쪽에 있고 답이 뒤쪽에 있다면, 모델은 그 연결을 놓치기 쉽습니다.

결국 RNN의 은닉 상태는 모든 과거 정보를 하나의 흐름으로 압축해 전달합니다. 중요한 정보와 덜 중요한 정보가 같은 통로를 지나갑니다. 필요한 정보를 나중에 직접 꺼내 보는 방식이 아니라, 계속 덮어쓴 요약본에 의존하는 방식입니다. 이것이 긴 문맥에서 불리하게 작동합니다.

LSTM은 무엇을 고치려 했나

RNN의 장기 의존성 문제를 완화하기 위해 등장한 대표적인 구조가 LSTM입니다. LSTM은 Long Short-Term Memory의 줄임말입니다. 이름 그대로 짧은 정보와 긴 정보를 더 잘 다루기 위해 설계된 RNN 계열 모델입니다.

기본 RNN은 은닉 상태 하나에 많은 부담을 줍니다. LSTM은 여기에 셀 상태라는 별도의 기억 통로를 둡니다. 셀 상태는 오래 보존해야 할 정보를 비교적 안정적으로 흘려보내는 길입니다. 그리고 이 길 위에 여러 개의 문을 둡니다. 여기서 문은 실제 문이 아니라, 정보를 얼마나 통과시킬지 결정하는 작은 신경망 계산입니다.

LSTM에는 보통 세 종류의 게이트가 등장합니다.

  • 잊기 게이트는 이전 기억 중 무엇을 버릴지 결정합니다.

  • 입력 게이트는 새로운 정보 중 무엇을 기억에 넣을지 결정합니다.

  • 출력 게이트는 현재 기억 중 무엇을 바깥으로 내보낼지 결정합니다.

이 구조는 매우 영리합니다. 모든 정보를 무작정 덮어쓰지 않고, 보존할 것과 버릴 것을 학습하게 만듭니다. 예를 들어 문장 앞에서 주어가 등장했을 때, LSTM은 그 정보를 셀 상태에 오래 남겨 둘 수 있습니다. 중간에 덜 중요한 수식어가 많이 나와도 중요한 기억을 쉽게 지우지 않도록 조절할 수 있습니다.

LSTM은 실제로 많은 순서 데이터 문제에서 기본 RNN보다 훨씬 좋은 성능을 보였습니다. 음성 인식, 기계 번역, 텍스트 분류, 시계열 예측 등 다양한 분야에서 오랫동안 중요한 역할을 했습니다. 장기 의존성 문제를 완전히 없애지는 못했지만, 기본 RNN보다 훨씬 더 긴 기억을 다룰 수 있게 해 주었습니다.

GRU는 더 단순한 선택지였다

GRU는 Gated Recurrent Unit의 줄임말입니다. LSTM과 비슷하게 게이트를 사용하지만, 구조는 조금 더 단순합니다. LSTM이 셀 상태와 은닉 상태를 나누고 여러 게이트를 사용하는 반면, GRU는 더 적은 구성 요소로 비슷한 효과를 노립니다.

GRU에는 업데이트 게이트와 리셋 게이트가 있습니다. 업데이트 게이트는 이전 정보를 얼마나 유지할지 결정하고, 리셋 게이트는 과거 정보를 얼마나 무시할지 조절합니다. 쉽게 말해 GRU는 "이전 기억을 계속 들고 갈까, 새 정보로 바꿀까?"를 매 시점마다 학습합니다.

GRU는 LSTM보다 계산이 가벼운 경우가 많고, 데이터나 문제에 따라 비슷한 성능을 내기도 합니다. 그래서 비교적 작은 모델이나 빠른 실험이 필요한 상황에서 자주 사용되었습니다. 기본 RNN보다 장기 의존성을 더 잘 다루면서도 LSTM보다 단순하다는 장점이 있습니다.

하지만 GRU 역시 RNN 계열입니다. 다시 말해 토큰을 순서대로 처리한다는 기본 구조는 그대로입니다. 은닉 상태를 통해 과거 정보를 전달한다는 점도 그대로입니다. 게이트가 정보 흐름을 개선해 주지만, 아주 긴 문맥에서 필요한 단어를 직접 찾아 연결하는 방식은 아닙니다.

LSTM과 GRU가 남겨 둔 문제

LSTM과 GRU는 RNN의 약점을 상당히 완화했습니다. 하지만 한계를 완전히 제거하지는 못했습니다. 이유는 구조의 뿌리가 여전히 순환적이기 때문입니다. 현재 시점의 계산이 이전 시점의 상태에 의존하고, 정보가 시간 단계를 따라 이동한다는 점은 변하지 않습니다.

가장 먼저 병렬화 문제가 남습니다. LSTM과 GRU도 각 시점의 상태를 이전 상태에서 받아옵니다. 따라서 문장 내부의 시간 단계 계산을 완전히 동시에 처리하기 어렵습니다. 게이트가 추가되면서 한 시점당 계산량은 오히려 더 늘어날 수 있습니다. 긴 문장을 대량으로 학습해야 하는 상황에서는 여전히 부담이 큽니다.

장기 의존성 문제도 완전히 사라지지 않습니다. 게이트가 중요한 정보를 오래 보존하도록 도와주지만, 모든 문맥 관계를 완벽히 유지하기는 어렵습니다. 특히 여러 정보가 복잡하게 얽힌 긴 문서에서는 어떤 정보를 기억해야 할지 결정하는 일 자체가 어렵습니다. 하나의 흐름으로 요약된 상태를 계속 전달하는 방식에는 근본적인 압축 손실이 생길 수 있습니다.

또한 멀리 떨어진 두 토큰이 직접 만나는 길이 멉니다. 첫 번째 토큰의 정보가 백 번째 토큰에 영향을 주려면 많은 중간 단계를 통과해야 합니다. LSTM과 GRU는 이 길을 조금 더 튼튼하게 만들어 주지만, 길 자체를 없애지는 않습니다. Attention은 바로 이 지점에서 다른 질문을 던집니다. "굳이 중간 단계를 하나씩 지나야 할까? 필요한 단어를 직접 바라보면 안 될까?"

필요한 순간에 직접 바라본다는 생각

문장을 읽을 때 사람은 항상 완벽하게 한 방향으로만 읽지 않습니다. 긴 문장을 읽다가 "이 동사의 주어가 뭐였지?" 싶으면 앞쪽을 다시 봅니다. 대명사가 나오면 그 대명사가 가리키는 대상을 찾아 문맥을 훑습니다. 중요한 단어가 멀리 떨어져 있어도 필요하면 그곳에 주의를 돌립니다.

RNN은 기본적으로 은닉 상태라는 요약본에 의존합니다. 반면 Attention은 각 토큰이 다른 토큰들을 직접 참고할 수 있게 합니다. 예를 들어 대답했다라는 토큰을 처리할 때, 문장 앞쪽의 지민은을 직접 강하게 바라볼 수 있습니다. 바이올린을 다시 잡았다를 이해할 때는 앞에서 나온 바이올린에 높은 중요도를 줄 수 있습니다.

이 차이는 작아 보이지만 매우 큽니다. RNN에서는 정보가 시간의 복도를 따라 한 칸씩 이동합니다. Attention에서는 토큰들이 서로를 향해 바로 선을 그을 수 있습니다. 물론 실제 계산은 행렬과 벡터로 이루어지지만, 직관적으로는 "필요한 단어를 직접 찾아보는 구조"라고 이해하면 좋습니다.

이제 Transformer로 가는 문이 열립니다. Transformer는 RNN처럼 토큰을 하나씩 순서대로 처리하는 대신, 입력된 토큰들의 관계를 Attention으로 한꺼번에 계산합니다. 각 토큰은 다른 토큰들과 얼마나 관련 있는지 점수를 매기고, 그 점수에 따라 정보를 섞습니다. 이 덕분에 병렬화에 유리하고, 멀리 떨어진 토큰 사이의 관계도 더 직접적으로 다룰 수 있습니다.

RNN의 한계를 shape로 바라보기

앞 장에서 우리는 모델 디버깅을 하며 shape를 추적하는 습관을 익혔습니다. 이제 그 습관을 RNN과 Transformer의 차이를 이해하는 데도 활용해 봅시다.

텍스트 배치가 다음과 같은 shape를 가진다고 해 봅시다.

(batch_size, seq_len, embed_dim)

예를 들어 배치 크기가 32, 문장 길이가 100, 임베딩 차원이 128이라면 입력은 대략 (32, 100, 128) 형태입니다. 여기서 seq_len은 문장 안의 토큰 개수입니다.

RNN은 이 중 seq_len 방향을 따라 한 칸씩 이동합니다. 첫 번째 토큰 위치를 처리하고, 그 결과 은닉 상태를 두 번째 위치로 넘깁니다. 두 번째 위치를 처리하고, 다시 세 번째 위치로 넘깁니다. shape만 보면 전체 텐서가 한 번에 들어가는 것처럼 보일 수 있지만, 모델의 핵심 계산은 시간 순서에 묶여 있습니다.

반면 Attention에서는 각 토큰 위치가 다른 모든 토큰 위치와 관계를 계산합니다. 문장 길이가 100이라면 100개의 토큰이 서로를 바라보는 관계 표를 만들 수 있습니다. 이 표는 대략 (seq_len, seq_len) 형태의 Attention 점수 행렬로 생각할 수 있습니다. 배치와 헤드까지 포함하면 더 많은 차원이 붙지만, 핵심은 토큰과 토큰 사이의 관계를 직접 행렬로 계산한다는 점입니다.

이때 지난 장에서 강조한 shape 감각이 중요해집니다. Transformer에서는 batch_size, seq_len, embed_dim, num_heads, head_dim 같은 차원이 함께 등장합니다. 복잡해 보이지만, 기본 질문은 단순합니다. "지금 어떤 토큰이 어떤 토큰을 보고 있는가?" RNN의 한계를 이해했다면 이 질문이 왜 중요한지 알 수 있습니다.

RNN이 사라졌다는 뜻은 아니다

여기까지 읽으면 RNN은 이제 쓸모없는 모델처럼 느껴질 수도 있습니다. 하지만 그렇게 이해하면 곤란합니다. RNN, LSTM, GRU는 여전히 많은 문제에서 좋은 선택이 될 수 있습니다. 데이터가 비교적 작고, 시퀀스가 짧고, 실시간으로 하나씩 들어오는 데이터를 처리해야 하는 경우에는 RNN 계열 모델이 단순하고 효과적일 수 있습니다.

예를 들어 센서 데이터가 시간 순서대로 들어오는 작은 예측 문제, 짧은 로그 패턴을 보는 문제, 제한된 환경에서 동작해야 하는 모델에서는 RNN이 충분히 실용적입니다. 모든 문제에 거대한 Transformer가 필요한 것은 아닙니다. 모델 선택은 언제나 데이터의 성격, 계산 자원, 목표 성능, 구현 복잡도를 함께 고려해야 합니다.

다만 이 책의 목적지는 LLM과 Transformer입니다. LLM은 방대한 텍스트를 학습하고 긴 문맥 속에서 토큰 관계를 파악해야 합니다. 이 목적지에서는 RNN의 순차 처리와 장기 의존성 문제가 큰 병목이 됩니다. 그래서 우리는 RNN을 버리기 위해서가 아니라, Transformer가 왜 등장했는지 제대로 이해하기 위해 RNN의 한계를 살펴본 것입니다.

구조적 전환의 순간

딥러닝의 발전은 종종 "더 많은 층", "더 많은 데이터", "더 빠른 GPU"로 설명됩니다. 물론 맞는 말입니다. 하지만 때로는 계산을 바라보는 구조 자체가 바뀌면서 큰 도약이 일어납니다. RNN에서 Transformer로의 이동이 바로 그런 사례입니다.

RNN은 순서 데이터를 시간의 흐름으로 처리합니다. 첫 토큰에서 마지막 토큰까지 은닉 상태를 넘기며 정보를 이어 갑니다. 이 방식은 자연스럽지만, 길고 복잡한 문맥에서는 정보가 희미해지고 병렬화가 어렵습니다.

Transformer는 질문을 바꿉니다. "이전 상태를 어떻게 잘 넘길까?"가 아니라 "각 토큰이 어떤 토큰을 얼마나 참고해야 할까?"를 묻습니다. 이 질문의 중심에 Attention이 있습니다.

RNN의 한계를 다시 핵심만 모으면 다음과 같습니다.

  • 토큰을 순서대로 처리해야 하므로 문장 내부 병렬화가 어렵습니다.

  • 긴 문장에서는 초반 정보가 은닉 상태를 거치며 희미해질 수 있습니다.

  • 멀리 떨어진 단어 사이의 관계를 학습하기 어렵습니다.

  • LSTM과 GRU는 게이트로 문제를 완화했지만 순환 구조의 제약은 남아 있습니다.

이 네 가지를 이해했다면 다음 장을 읽을 준비가 된 것입니다. Attention은 RNN의 약점을 덧칠한 작은 보조 장치가 아닙니다. 필요한 정보를 필요한 순간에 직접 바라보게 만든 새로운 연결 방식입니다. 그리고 이 연결 방식이 Transformer의 심장이 됩니다.

다음 장에서는 드디어 Attention이 왜 등장했는지 살펴보겠습니다. 모델이 문장 속 단어들 사이에서 어디에 주의를 기울이는지, 그리고 그 주의가 어떻게 숫자 계산으로 바뀌는지 차근차근 따라가 보겠습니다.

책 목록

처음 만나는 딥러닝: 신경망에서 Transformer와 LLM까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기