AI 기초 및 활용 15회: RNN과 시퀀스 — 기억을 가진 망, 그리고 열 걸음이면 흐려지는 이유

AI 기초 및 활용 15회: RNN과 시퀀스 — 기억을 가진 망, 그리고 열 걸음이면 흐려지는 이유

오늘의 질문 — 같은 낱말이 왜 다른 뜻이 될까요

"은행에 다녀왔어"와 "강 은행에 앉아 있었어". 같은 낱말 '은행'인데 뜻이 전혀 다릅니다. 무엇이 그 뜻을 갈랐을까요. 앞에 무엇이 왔는가입니다.

14회차에서 우리는 이미지를 다뤘습니다. 거기서 중요한 것은 이웃이었어요. 픽셀이 서로 붙어 있다는 사실이 정보의 핵심이었죠.

그런데 문장, 음성, 주가, 심전도는 다릅니다. 여기서 중요한 것은 옆이 아니라 입니다. 순서가 뒤집히면 뜻이 무너져요. "개가 사람을 물었다"와 "사람이 개를 물었다"는 같은 낱말들로 이루어져 있지만 완전히 다른 이야기입니다.

오늘의 질문은 이것입니다. 순서를 어떻게 구조에 새겨 넣을 것인가. 그리고 그러려면 망에 무엇이 더 필요한가.

지난 회차 연결 — 공간 다음은 순서입니다

14회차의 교훈을 한 문장으로 줄이면 이렇습니다. 데이터에 대한 상식을 구조에 못 박아 넣으면, 그것을 데이터로 배울 필요가 없어진다.

CNN은 두 가지 상식을 새겨 넣었죠. "가까운 픽셀끼리 관계가 있다"와 "같은 무늬는 어디에 있든 같은 무늬다". 그래서 가중치가 수백만 배 줄었고 위치가 바뀌어도 알아봤습니다.

오늘 새겨 넣을 상식은 "앞에 온 것이 뒤를 결정한다"입니다. 그리고 이 상식을 구조에 넣으려면 CNN에는 없던 것이 하나 필요해요. 기억입니다.

어둠 속에 청록빛 마디들이 왼쪽에서 오른쪽으로 하나씩만 이어져 한 줄의 순서를 이루는 모습 — 앞뒤 순서 자체가 정보인 데이터를 뜻하는 개념 이미지

순서가 정보인 데이터들

순서 데이터가 얼마나 넓은지 먼저 짚고 가겠습니다. 생각보다 훨씬 넓어요.

언어가 대표적입니다. 낱말의 나열이고, 순서가 문법이자 의미입니다. 음성도 그렇습니다. 소리의 세기가 시간에 따라 변하는 긴 수열이에요.

시계열이 있습니다. 주가, 기온, 전력 수요, 서버 부하. 모두 시각과 값이 짝지어진 줄이죠. 생체 신호도 마찬가지입니다. 심전도, 뇌파, 혈당 추이.

덜 뻔한 것도 있습니다. 사용자의 행동 기록이 그렇습니다. 어떤 페이지를 어떤 순서로 눌렀는가는 순서 자체가 의도를 드러내요. 영상도 순서 데이터입니다. 이미지가 시간축으로 늘어선 것이니, CNN과 오늘의 이야기가 만나는 지점이기도 합니다.

순서를 무시하면 무엇을 잃나 — 가방 속의 낱말들

순서를 아예 버리는 방법도 있습니다. 문장을 낱말이 몇 번 나왔는가로만 표현하는 거예요. 이것을 낱말 가방이라고 부릅니다. 낱말들을 자루에 넣고 흔들어 순서를 지운 셈이죠.

놀랍게도 이 방법이 꽤 잘 통하는 문제가 있습니다. 스팸 분류 같은 일이요. 특정 낱말들이 있으면 스팸일 가능성이 높고, 그 낱말들의 순서는 별로 중요하지 않기 때문입니다. 9회차 나이브 베이즈 스팸 필터가 정확히 이 가정 위에 서 있었어요.

하지만 무너지는 곳이 분명합니다. 부정문이 대표적이에요. "이 영화는 좋다"와 "이 영화는 좋지 않다"는 낱말 가방으로 보면 거의 같습니다. '않다'가 하나 더 있을 뿐이죠. 그런데 뜻은 정반대입니다.

번역은 아예 불가능해집니다. 출력의 순서를 정해야 하는데 입력의 순서를 이미 버렸으니까요. 순서를 다루는 구조가 반드시 필요한 이유입니다.

어둠 속에서 청록빛 선이 시간에 따라 크게 출렁이다 잦아드는 파형을 그리는 모습 — 음성이나 심전도처럼 시간에 따라 값이 변하는 순서 데이터를 뜻하는 개념 이미지

CNN으로는 왜 안 되나

합성곱을 시간축에 쓰면 안 될까요. 실제로 됩니다. 그리고 잘 쓰입니다. 다만 한계가 분명해요.

합성곱의 창문은 크기가 정해져 있습니다. 창문이 다섯 칸이면 앞뒤 다섯 칸 안의 관계만 봅니다. 층을 쌓으면 수용장이 자라긴 하지만, 미리 정한 만큼만 자라요.

그런데 언어의 의존 관계는 길이가 정해져 있지 않습니다. "내가 어제 친구랑 오랜만에 갔던 그 식당은 문을 닫았더라"에서 '식당'과 '닫았더라'는 멀리 떨어져 있어요. 문장이 길어지면 더 멀어지고요.

그리고 입력 길이도 문제입니다. CNN은 정해진 크기의 입력을 전제합니다. 그런데 문장은 세 낱말일 수도 삼백 낱말일 수도 있어요. 길이가 정해지지 않은 입력을 다루는 구조가 필요합니다.

되먹임 — 자기 출력을 다시 자기 입력으로

순환 신경망, 줄여서 RNN의 아이디어는 한 문장입니다. 망의 출력을 다시 그 망의 입력으로 되돌려 넣는다.

구체적으로 이렇게 동작합니다. 첫 번째 낱말을 넣습니다. 망이 계산해서 무언가를 내놓아요. 그 결과를 버리지 않고 옆에 챙겨 둡니다.

두 번째 낱말을 넣을 때, 낱말만 넣는 게 아니라 아까 챙겨 둔 것도 함께 넣습니다. 망은 이 둘을 합쳐 계산하고 새 결과를 내놓습니다. 그것도 챙겨 둡니다.

세 번째 낱말도 같은 식으로요. 이렇게 하면 세 번째를 처리할 때 첫 번째와 두 번째의 흔적이 이미 들어와 있습니다. 순서가 자연스럽게 반영되는 거예요.

왼쪽부터 오른쪽으로 이어진 청록빛 마디들이 앞 마디의 잔광을 조금씩 품은 채 늘어선 모습 — 매 시점마다 갱신되며 지금까지의 흔적을 담는 은닉 상태를 뜻하는 개념 이미지

은닉 상태 — 지금까지의 요약본

"옆에 챙겨 두는 것"에는 이름이 있습니다. 은닉 상태입니다. 숫자 여러 개로 이루어진 묶음이에요.

은닉 상태를 이해하는 가장 좋은 방법은 지금까지 읽은 것의 요약본이라고 생각하는 겁니다. 책을 읽으며 여백에 메모를 남기는 것과 비슷해요. 새 문장을 읽을 때마다 메모를 고쳐 씁니다.

중요한 것은 이 요약본의 크기가 고정이라는 점입니다. 낱말을 백 개 읽든 만 개 읽든 은닉 상태의 숫자 개수는 같아요. 그래서 아무리 긴 입력도 처리할 수 있습니다. CNN이 못 하던 일이죠.

그런데 바로 여기에 오늘 이야기의 씨앗이 들어 있습니다. 크기가 고정된 요약본에 계속 새 내용을 눌러 담으면 어떻게 될까요. 오래된 것이 밀려납니다. 이 문제가 곧 나옵니다.

펼쳐 보면 아주 깊은 망입니다

RNN을 이해할 때 흔히 막히는 지점이 되먹임 고리입니다. 고리가 있으면 어떻게 학습시키나 싶죠.

해법은 시간 방향으로 펼쳐 보는 것입니다. 낱말이 열 개인 문장을 처리한다면, 같은 망이 열 번 반복해서 쓰인 겁니다. 그러니 같은 가중치를 공유하는 열 개 층짜리 망이라고 생각하면 돼요.

이렇게 펼쳐 놓으면 13회차의 역전파를 그대로 쓸 수 있습니다. 다만 오차가 시간을 거슬러 흐른다는 점이 다르죠. 그래서 시간을 거슬러 오르는 역전파라고 부릅니다.

여기서 가중치 공유가 또 등장합니다. CNN이 공간에서 같은 필터를 반복해 썼듯, RNN은 시간에서 같은 가중치를 반복해 씁니다. "규칙은 시점이 달라도 같다"는 상식을 구조에 새겨 넣은 거예요.

왼쪽 끝에서는 굵고 환하던 청록빛 사슬이 오른쪽으로 갈수록 가늘고 흐려지다 어둠 속으로 사라지는 모습 — 시점이 멀어질수록 기억과 학습 신호가 옅어지는 현상을 뜻하는 개념 이미지

그런데 기억이 몇 걸음이면 흐려집니다

이론상 RNN은 아무리 오래된 것도 기억할 수 있습니다. 은닉 상태가 계속 이어지니까요. 그런데 실제로는 그렇지 않았습니다.

1990년대에 RNN을 훈련시켜 보면, 대략 열 걸음 정도만 지나도 앞선 정보가 사실상 사라졌습니다. 긴 문장의 앞부분은 뒷부분에 거의 영향을 주지 못했어요.

구체적인 예를 들어 봅시다. "프랑스에서 자란 나는 유창하게 프랑스어를 한다"라는 문장에서, 마지막 낱말을 맞히려면 맨 앞의 '프랑스'가 필요합니다. 그런데 그 사이에 낱말이 열 개쯤 끼면 RNN은 그 연결을 못 잡았습니다.

이것을 장기 의존성 문제라고 부릅니다. 그리고 원인은 13회차에서 이미 만난 그 범인이에요.

왜 흐려지나 — 같은 수를 계속 곱하기 때문에

13회차에서 배운 연쇄 법칙을 떠올려 봅시다. 역전파는 단계별 민감도를 계속 곱해 나가는 것이었죠. 그리고 1보다 작은 수를 계속 곱하면 0으로 수렴합니다. 사라지는 기울기 문제였어요.

RNN에서는 이 문제가 훨씬 심각해집니다. 이유는 두 가지예요.

첫째, 펼친 길이가 깁니다. 낱말 백 개짜리 문장이면 백 층짜리 망입니다. 2012년 이전에 스무 층도 어려워하던 시절에 말이죠.

둘째, 더 고약합니다. 각 층이 같은 가중치를 씁니다. 층마다 값이 달라 어떤 층은 좀 크고 어떤 층은 좀 작아 상쇄되는 일이 없어요. 같은 수를 백 번 곱하는 셈입니다. 0.9를 백 번 곱하면 사실상 0이 됩니다.

그러니까 RNN의 망각은 설계 실수가 아니라 구조에서 필연적으로 나오는 성질이었습니다.

매끈한 어두운 벽의 좁은 틈으로 청록빛이 지나가는데 그 앞을 어두운 판이 가로막아 일부만 통과시키는 모습 — 무엇을 얼마나 통과시킬지 조절하는 게이트를 뜻하는 개념 이미지

반대 방향의 사고 — 폭발하는 기울기

같은 수를 계속 곱하는 구조에는 반대 방향의 사고도 있습니다. 곱하는 수가 1보다 크면 어떻게 될까요. 1.1을 백 번 곱하면 만 배가 넘습니다.

이것을 폭발하는 기울기라고 합니다. 훈련 중에 손실이 갑자기 무한대나 계산 불가 값으로 튀어 오르는 현상이에요. RNN을 돌려 본 사람이라면 한 번쯤 겪습니다.

다행히 이쪽은 대처가 간단합니다. 기울기의 크기에 상한을 두고, 넘으면 잘라 버립니다. 방향은 유지하고 크기만 줄이는 거예요. 기울기 자르기라고 부릅니다.

사라지는 쪽은 이렇게 못 합니다. 0에 가까워진 것을 억지로 키우면 방향 정보 자체가 잡음이 되어 버리거든요. 그래서 사라지는 기울기는 구조를 바꿔서 풀어야 했습니다. 그 답이 LSTM입니다.

LSTM의 핵심 아이디어 — 곱하지 말고 더하자

1997년, 제프 호흐라이터와 위르겐 슈미트후버가 LSTM을 발표합니다. 우리말로 옮기면 긴 단기 기억 정도가 됩니다.

이름부터 요점을 담고 있어요. 기본 RNN의 기억은 짧은 단기 기억이었습니다. LSTM은 그 단기 기억을 길게 늘인 것입니다.

핵심 아이디어는 놀랄 만큼 단순합니다. 문제가 같은 수를 계속 곱하는 것이었으니, 곱하지 않고 더하는 통로를 하나 만들자는 겁니다.

더하기는 곱하기와 달리 값을 줄이지 않습니다. 1을 백 번 더해도 100이지 0이 되지 않아요. 그리고 역전파에서도 더하기 통로는 기울기를 그대로 통과시킵니다. 14회차에서 본 레스넷의 지름길과 정확히 같은 원리예요. 레스넷보다 18년 앞서 나온 아이디어입니다.

화면 위쪽을 하나의 밝은 청록빛 막대가 끊김 없이 가로지르고 그 아래 작은 마디들이 짧은 선으로 매달려 있는 모습 — 간섭 없이 정보를 멀리 나르는 셀 상태 통로를 뜻하는 개념 이미지

셀 상태라는 고속도로

LSTM에는 은닉 상태 말고 셀 상태라는 것이 하나 더 있습니다. 이것이 방금 말한 더하기 통로예요.

셀 상태를 망 전체를 관통하는 고속도로라고 생각하면 좋습니다. 매 시점마다 이 고속도로에는 큰 변형이 가해지지 않습니다. 필요한 것을 조금 더하고, 불필요해진 것을 조금 덜어낼 뿐이에요.

기본 RNN에서는 매 시점마다 은닉 상태 전체가 새로 계산되어 통째로 갈아엎어졌습니다. 그러니 오래된 정보가 남아날 수가 없었죠.

LSTM에서는 고속도로가 유지됩니다. 백 걸음 전에 올려놓은 정보가 아무도 건드리지 않으면 그대로 남아 있어요. 이것이 긴 의존성을 잡아내는 비결입니다.

세 개의 문 — 잊기, 넣기, 내보내기

그러면 무엇을 더하고 무엇을 덜어낼지는 누가 정할까요. 게이트라고 부르는 장치 셋이 정합니다. 각 게이트는 0과 1 사이의 값을 내놓는 작은 신경망이고, 그 값 자체도 학습됩니다.

망각 게이트는 셀 상태에서 무엇을 지울지 정합니다. 값이 0에 가까우면 그 정보를 버리고 1에 가까우면 유지해요. 예를 들어 문장의 주어가 바뀌면 앞 주어의 성별 정보를 지웁니다.

입력 게이트는 지금 들어온 새 정보 중 무엇을 고속도로에 올릴지 정합니다. 중요하지 않은 낱말이면 거의 올리지 않아요.

출력 게이트는 고속도로에 실려 있는 것 중 무엇을 지금 꺼내 쓸지 정합니다. 기억하고 있는 것과 지금 필요한 것은 다르니까요.

정리하면 LSTM은 무엇을 잊고 무엇을 넣고 무엇을 꺼낼지를 스스로 배우는 망입니다. 기억을 고정된 규칙이 아니라 학습되는 정책으로 만든 것이 진짜 도약이었어요.

하나의 빛 통로를 따라 세 개의 어두운 문이 각각 다른 폭으로 열려 서로 다른 양의 청록빛을 통과시키는 모습 — 잊기·넣기·내보내기를 맡는 LSTM의 세 게이트를 뜻하는 개념 이미지

GRU — 문을 둘로 줄이기

LSTM은 강력했지만 복잡했습니다. 게이트가 셋이고 상태가 둘이라 계산이 무거웠어요.

2014년에 조경현 교수 등이 GRU를 내놓습니다. 게이트를 둘로 줄이고 셀 상태와 은닉 상태를 하나로 합친 구조예요.

결과는 어땠을까요. 많은 과제에서 LSTM과 비슷한 성능이 나왔고, 계산은 더 가벼웠습니다. 그래서 한동안 둘 중 무엇을 쓸지는 취향과 실험의 문제였어요.

여기서 얻을 교훈이 하나 있습니다. 더 복잡한 구조가 반드시 더 낫지는 않습니다. 무엇이 본질이었는지 알고 나면 대개 더 단순하게 다시 만들 수 있어요. 이 교훈이 다음 회차의 트랜스포머에서 극단적으로 반복됩니다.

양방향 — 뒤도 보고 앞도 보기

지금까지의 RNN은 왼쪽에서 오른쪽으로만 읽었습니다. 그런데 뒤에 오는 것이 앞을 결정하는 경우도 많아요.

"그 는 무척 달았다"에서 '배'가 무엇인지는 '달았다'를 봐야 압니다. 앞만 읽어서는 알 수 없어요.

그래서 양방향 RNN이 나옵니다. 한 망은 앞에서 뒤로 읽고, 다른 망은 뒤에서 앞으로 읽습니다. 그리고 각 위치에서 두 결과를 합쳐 씁니다.

다만 조건이 있습니다. 전체 문장이 이미 주어져 있어야 합니다. 실시간으로 말을 받아 적는 상황에서는 뒷부분이 아직 없으니 쓸 수 없어요. 번역이나 문서 분석처럼 전체를 놓고 하는 일에 적합합니다.

같은 축을 따라 청록빛 두 줄기가 서로 반대 방향으로 흐르며 가운데에서 만나는 모습 — 앞에서 뒤로, 뒤에서 앞으로 동시에 읽는 양방향 구조를 뜻하는 개념 이미지

인코더-디코더 — 문장을 문장으로

번역은 특별한 어려움이 있습니다. 입력과 출력의 길이가 다르고 순서도 다릅니다. 한국어와 영어는 어순부터 뒤집혀 있죠.

2014년에 나온 해법이 인코더-디코더 구조입니다. 두 개의 RNN을 이어 붙였어요.

인코더가 원문을 끝까지 읽어 은닉 상태 하나로 압축합니다. 이 하나의 묶음이 문장 전체의 뜻을 담았다고 보는 거예요. 문맥 벡터라고 부릅니다.

디코더는 그 묶음에서 출발해 번역문을 한 낱말씩 만들어 냅니다. 자기가 방금 만든 낱말을 다시 입력으로 받아 다음 낱말을 만들고요.

이 구조는 기계 번역의 수준을 크게 끌어올렸습니다. 그런데 치명적인 병목이 하나 있었어요. 문장이 아무리 길어도 고정된 크기의 묶음 하나에 전부 밀어 넣어야 한다는 점입니다. 긴 문장일수록 번역 품질이 뚝 떨어졌습니다. 이 병목을 뚫는 것이 다음 회차의 주제입니다.

어두운 바닥선 위에 청록빛 점들이 저마다 다른 높이로 오르내리며 길게 늘어선 모습, 숫자나 눈금은 없다 — 시각에 따라 값이 변하는 시계열 데이터를 뜻하는 개념 이미지

실전 ① 음성 인식과 자막

RNN 계열이 가장 크게 바꾼 분야가 음성 인식입니다. 2010년대 초중반 스마트폰 음성 인식 정확도가 급격히 좋아진 것이 LSTM 덕분이에요.

음성은 RNN에 잘 맞습니다. 시간 순서가 명확하고, 앞소리가 뒷소리의 해석을 바꾸며, 길이가 제각각이니까요.

여기서 접근성 이야기가 나옵니다. 자동 자막이 실용 수준에 오른 것이 이 시기입니다. 청각장애인의 영상 접근성이 실질적으로 달라졌어요.

다만 한계도 분명합니다. 자동 자막은 고유명사, 전문용어, 사투리, 여러 명이 겹쳐 말하는 상황에서 무너집니다. 그리고 화자 구분이나 중요한 비언어 정보를 놓치죠. 자동 자막은 사람이 만든 자막의 대체재가 아니라 없는 것보다 나은 안전망입니다. 14회차의 자동 대체텍스트와 정확히 같은 결론이에요.

실전 ② 시계열 예측과 이상 탐지

산업 현장에서 RNN 계열이 꾸준히 쓰이는 곳이 시계열입니다.

수요 예측이 대표적입니다. 전력 수요, 매장 판매량, 서버 트래픽. 과거의 흐름에서 다음을 내다보는 일이죠.

이상 탐지는 조금 다르게 씁니다. 정상 상태의 흐름만 학습시켜 다음 값을 예측하게 한 다음, 실제 값이 예측에서 크게 벗어나면 이상 신호로 봅니다. 8회차 비지도학습의 발상과 통합니다. 설비 고장 예측, 부정 거래 탐지, 심전도 부정맥 감지가 이 방식이에요.

여기서 10회차의 경고를 다시 꺼내야 합니다. 시계열은 미래 정보가 훈련에 새어 들어가기 아주 쉽습니다. 데이터를 무작위로 섞어 훈련·검증을 나누면 미래를 보고 과거를 맞히는 셈이 되어, 검증 성적은 훌륭한데 실전에서 무너집니다. 시계열은 반드시 시간 순서로 잘라야 해요.

어둠 속 왼쪽 끝과 오른쪽 끝에 청록빛 점이 하나씩 떨어져 있고 그 사이는 아무것도 없이 캄캄한 모습 — 멀리 떨어진 두 정보를 이어 주지 못하는 장기 의존성 문제를 뜻하는 개념 이미지

실전 ③ 저시력 접근성 — 읽어 주는 기계

순서를 다루는 망은 접근성에서 양방향으로 쓰입니다.

한쪽은 소리를 글자로 바꾸는 일입니다. 음성 인식이죠. 손으로 입력하기 어려운 상황에서 말로 쓰게 해 줍니다.

다른 쪽은 글자를 소리로 바꾸는 일입니다. 음성 합성이고, 저시력·시각장애 사용자에게는 화면 낭독기의 심장입니다. 여기서도 순서가 핵심이에요. 같은 글자라도 앞뒤 맥락에 따라 발음과 억양이 달라지기 때문입니다. "10월 1일"을 어떻게 읽어야 하는지, 문장이 질문인지 서술인지에 따라 끝을 올릴지 내릴지.

2010년대 중반 이후 합성 음성이 급격히 자연스러워진 것이 이런 순서 모델 덕분입니다. 기계 억양으로 장시간 듣는 것은 상당한 피로인데, 그 피로가 실제로 줄었어요. 오래 읽어야 하는 사람에게는 정확도만큼이나 중요한 개선입니다.

그런데 RNN에는 구조적 한계가 있습니다

LSTM은 훌륭했지만 두 가지 한계를 끝내 넘지 못했습니다. 그리고 이 둘이 다음 회차의 등장 이유입니다.

첫째, 순차 처리라 병렬화가 안 됩니다. 열 번째 낱말을 처리하려면 아홉 번째 은닉 상태가 있어야 하고, 그러려면 여덟 번째가 먼저여야 하죠. 줄을 서서 한 명씩 지나가야 합니다. 그래픽카드는 수천 개를 동시에 계산하는 장치인데 그 힘을 쓸 수가 없어요. 데이터와 모델이 커질수록 이 제약은 치명적이 됩니다.

둘째, 기억이 여전히 유한합니다. LSTM이 열 걸음을 수백 걸음으로 늘렸지만 고정 크기 상태에 눌러 담는다는 사실 자체는 그대로예요. 책 한 권 분량의 맥락은 여전히 무리입니다.

2017년에 나온 답은 기억을 잘 눌러 담는 방법을 개선하는 것이 아니었습니다. 아예 눌러 담기를 그만두고, 필요할 때마다 원본 전체를 직접 들여다보는 쪽이었어요. 그것이 어텐션입니다.

어둠 속에 같은 높이와 밝기의 청록빛 기둥 세 개가 나란히 솟아오른 모습 — 이번 회차의 핵심 정리 세 가지를 뜻하는 개념 이미지

핵심 정리 — 세 줄

첫째, RNN은 자기 출력을 다시 자기 입력으로 되돌려 순서를 다룹니다. 지금까지 읽은 것의 요약본인 은닉 상태를 매 시점 갱신하며, 그 크기가 고정이라 길이가 정해지지 않은 입력도 처리합니다. 시간 방향으로 펼치면 같은 가중치를 공유하는 아주 깊은 망이 되고, 학습은 시간을 거슬러 오르는 역전파로 합니다.

둘째, 같은 가중치를 반복해 곱하기 때문에 기억이 열 걸음이면 흐려집니다. 사라지는 기울기가 RNN에서 특히 심각한 이유이며, 이것은 설계 실수가 아니라 구조에서 나오는 필연입니다. 반대로 1보다 큰 값이 반복되면 폭발하는데, 이쪽은 기울기를 잘라 대처할 수 있지만 사라지는 쪽은 구조를 바꿔야만 풀립니다.

셋째, LSTM은 곱하는 대신 더하는 통로를 만들어 그 문제를 풉니다. 셀 상태라는 고속도로에 무엇을 잊고 무엇을 넣고 무엇을 꺼낼지를 세 개의 게이트가 학습으로 정합니다. 기억을 고정된 규칙이 아니라 학습되는 정책으로 만든 것이 도약이었지만, 순차 처리라 병렬화가 안 되고 기억이 여전히 유한하다는 두 한계는 남았습니다.

용어 정리

순서 데이터 — 앞뒤 순서 자체가 정보인 데이터. 언어, 음성, 시계열, 생체 신호, 행동 기록, 영상이 모두 해당합니다.

낱말 가방 — 순서를 버리고 낱말의 출현 횟수만으로 문장을 표현하는 방식. 스팸 분류에는 통하지만 부정문과 번역에서 무너집니다.

RNN(순환 신경망) — 출력을 다시 입력으로 되돌려 순서를 다루는 신경망.

은닉 상태 — 지금까지 읽은 것의 요약본에 해당하는 고정 크기의 숫자 묶음. 매 시점 갱신됩니다.

시간을 거슬러 오르는 역전파 — RNN을 시간 방향으로 펼친 뒤 역전파를 적용하는 학습 방식.

장기 의존성 문제 — 멀리 떨어진 정보 사이의 관계를 학습하지 못하는 현상.

폭발하는 기울기 — 1보다 큰 값이 반복해 곱해져 기울기가 발산하는 현상. 기울기 자르기로 대처합니다.

기울기 자르기 — 기울기의 크기에 상한을 두어 방향은 유지하고 크기만 줄이는 안정화 기법.

LSTM — 곱하지 않고 더하는 통로를 두어 장기 의존성을 잡아내는 순환 망 구조. 1997년 발표.

셀 상태 — LSTM에서 정보를 큰 변형 없이 멀리 나르는 통로.

게이트 — 무엇을 얼마나 통과시킬지 0과 1 사이 값으로 정하는 작은 신경망. 그 값도 학습됩니다.

망각·입력·출력 게이트 — 각각 무엇을 지울지, 무엇을 새로 담을지, 무엇을 지금 꺼내 쓸지를 정합니다.

GRU — 게이트를 둘로 줄이고 상태를 하나로 합친 더 가벼운 구조. 많은 과제에서 LSTM과 비슷한 성능을 냅니다.

양방향 RNN — 앞에서 뒤로, 뒤에서 앞으로 동시에 읽어 두 결과를 합치는 구조. 전체 입력이 미리 주어져야 씁니다.

인코더-디코더 — 입력을 하나의 묶음으로 압축한 뒤 그로부터 출력을 생성하는 두 망의 조합. 길이가 다른 입출력을 다룹니다.

문맥 벡터 — 인코더가 입력 전체를 압축해 만든 고정 크기 묶음. 긴 문장에서 병목이 됩니다.

다음 회차 예고 — 그리고 생각해볼 질문

16회차는 「어텐션과 트랜스포머」입니다. 오늘 마지막에 걸어 둔 두 가지 한계를 정면으로 뚫는 이야기예요.

출발점은 인코더-디코더의 병목입니다. 문장 전체를 묶음 하나에 밀어 넣는 대신, 번역할 낱말마다 원문에서 관련 있는 부분을 그때그때 돌아본다면? 이 발상이 어텐션이고, 2017년에 이르러 사람들은 더 과감한 결론에 도달합니다. 순환 구조를 아예 걷어내고 어텐션만 남겨도 되는 것 아닌가.

그렇게 태어난 트랜스포머가 왜 병렬 처리를 가능하게 했는지, 그래서 왜 모델을 지금 크기까지 키울 수 있었는지, 그리고 오늘 다룬 순환 구조가 왜 대부분의 자리에서 물러났는지를 다룹니다. 제4부 LLM 시대로 넘어가는 다리가 되는 회차입니다.

생각해볼 질문. 오늘 LSTM이 기억을 다루는 방식을 봤습니다. 무엇을 잊고 무엇을 담고 무엇을 꺼낼지를 스스로 배웁니다. 그리고 무엇을 잊을지 정하는 게이트가 맨 앞에 있었어요.

사람의 기억도 비슷한 것 같습니다. 우리는 모든 것을 기억하지 않고, 무엇을 흘려보낼지를 끊임없이 고르죠. 여러분은 무엇을 기준으로 잊고 무엇을 기준으로 붙드나요? 그리고 잘 잊는 능력이 잘 기억하는 능력만큼 중요하다고 느낀 적이 있나요? 댓글로 들려주세요.


이 포스트는 SVIL 연구소 「AI 기초 및 활용」 30회 시리즈의 15회차이며, 제3부 「딥러닝과 신경망」의 네 번째 회입니다. 하버드 CS50 AI, MIT 6.S191 등 공개 교육과정의 구조를 참고했으며, 모든 내용은 이미지 없이 본문만으로 이해할 수 있도록 구성되어 있습니다. 모든 이미지에는 내용을 설명하는 대체텍스트가 포함되어 있습니다.


협업문의 : kuroicode@gmail.com
블로그 : https://blog.svil.dev/
홈페이지 : https://kuroicode-beep.github.io/svil-homepage/