LSTM 네트워크 이해하기
게시일: 2025년 11월 22일 | 원문 작성일: 2015년 8월 27일 | 저자: Christopher Olah | 원문 보기
핵심 요약
- RNN의 한계: 전통적인 순환 신경망은 장기 의존성(long-term dependency) 문제로 인해 오래전 정보를 사용하기 어려워요
- LSTM의 해법: LSTM은 게이트라는 메커니즘으로 정보를 기억하거나 잊을 수 있어서, 장기 의존성 문제를 해결해요
- 핵심 아이디어: 셀 상태(cell state)라는 컨베이어 벨트 같은 구조로 정보가 거의 변하지 않고 흘러가면서, 게이트들이 필요한 정보만 추가하거나 제거해요
- 실용적 성공: 음성 인식, 언어 모델링, 번역, 이미지 캡션 생성 등 다양한 태스크에서 표준 RNN보다 훨씬 뛰어난 성능을 보여요
순환 신경망 (Recurrent Neural Networks)
사람은 매 순간마다 생각을 처음부터 시작하지 않아요. 지금 이 글을 읽으면서도, 여러분은 이전 단어들에 대한 이해를 바탕으로 각 단어를 이해하고 있죠. 모든 걸 버리고 처음부터 다시 생각하지 않아요. 우리의 생각에는 지속성(persistence)이 있어요.
전통적인 신경망은 이걸 할 수 없는데, 이건 꽤 큰 단점이에요. 예를 들어, 영화의 모든 시점에서 어떤 종류의 이벤트가 일어나고 있는지 분류하고 싶다고 해봐요. 전통적인 신경망으로는 영화의 이전 장면을 이해한 걸 바탕으로 다음 장면을 파악하기가 어려워요.
순환 신경망(Recurrent Neural Network)은 이 문제를 해결해요. RNN은 루프가 있는 네트워크로, 정보가 계속 유지될 수 있게 해줘요.
다이어그램 설명: 원문에는 RNN의 루프 구조를 보여주는 다이어그램이 있어요. 신경망 모듈 A가 입력 x_t를 받아서 출력 h_t를 내보내며, 자기 자신으로 다시 연결되는 루프를 가지고 있어요.
위 다이어그램에서, 신경망 모듈 A는 입력 \(x_t\)를 받아서 값 \(h_t\)를 출력해요. 루프 덕분에 네트워크의 한 단계에서 다음 단계로 정보를 전달할 수 있어요.
이런 루프 때문에 순환 신경망이 좀 신비로워 보일 수 있어요. 하지만 좀 더 생각해보면, 일반 신경망과 그렇게 다르지 않다는 걸 알 수 있어요. 순환 신경망은 같은 네트워크의 여러 복사본으로 생각할 수 있는데, 각각이 다음 복사본에게 메시지를 전달하는 거죠. 루프를 펼치면 이렇게 돼요:
다이어그램 설명: 펼쳐진 순환 신경망의 다이어그램. 같은 네트워크 A가 여러 번 반복되면서 시간 순서대로 배열되어 있고, 각 단계에서 다음 단계로 정보를 전달해요.
이런 체인 같은 구조는 순환 신경망이 시퀀스나 리스트 같은 데이터와 잘 맞는다는 걸 보여줘요. 이런 데이터를 위한 자연스러운 신경망 아키텍처죠.
그리고 실제로도 많이 쓰이고 있어요! 지난 몇 년간 RNN을 다양한 문제에 적용해서 놀라운 성공을 거뒀어요: 음성 인식, 언어 모델링, 번역, 이미지 캡션 생성… 정말 많아요. RNN으로 달성할 수 있는 놀라운 성과에 대한 논의는 Andrej Karpathy의 훌륭한 블로그 포스트 The Unreasonable Effectiveness of Recurrent Neural Networks에 맡길게요. 정말 놀라워요.
이런 성공의 핵심은 바로 LSTM이에요. LSTM은 아주 특별한 종류의 순환 신경망인데, 많은 태스크에서 표준 버전보다 훨씬 훨씬 잘 작동해요. 순환 신경망을 기반으로 한 거의 모든 흥미로운 결과들이 LSTM으로 달성됐어요. 이 글에서 탐구할 건 바로 이 LSTM이에요.
장기 의존성 문제 (The Problem of Long-Term Dependencies)
RNN의 큰 장점 중 하나는 과거 정보를 현재 작업에 활용할 수 있다는 거예요. 예를 들어 이전 비디오 프레임이 현재 프레임을 이해하는 데 도움을 줄 수 있는 것처럼요. RNN이 이걸 할 수 있다면 엄청 유용할 거예요. 하지만 할 수 있을까요? 경우에 따라 달라요.
때로는 현재 작업을 하는 데에 최근 정보만 있어도 충분해요. 예를 들어, 이전 단어들로 다음 단어를 예측하는 언어 모델을 생각해봐요. “the clouds are in the sky”에서 마지막 단어를 예측하려고 한다면, 더 이상의 맥락이 필요 없어요 – 다음 단어가 sky일 거라는 게 꽤 명백하죠. 이런 경우, 관련 정보와 그게 필요한 곳 사이의 간격이 작을 때, RNN은 과거 정보를 사용하는 법을 배울 수 있어요.
다이어그램 설명: 짧은 의존성을 보여주는 RNN 다이어그램. 최근 정보만으로 현재 예측이 가능한 경우.
하지만 더 많은 맥락이 필요한 경우도 있어요. “I grew up in France… I speak fluent French”에서 마지막 단어를 예측하려는 경우를 생각해봐요. 최근 정보는 다음 단어가 아마 언어의 이름일 거라고 알려주지만, 어떤 언어인지 알려면 훨씬 전에 나온 France라는 맥락이 필요해요. 관련 정보와 그게 필요한 지점 사이의 간격이 매우 커지는 게 충분히 가능해요.
안타깝게도, 그 간격이 커지면 RNN이 정보를 제대로 연결하지 못해요.
다이어그램 설명: 장기 의존성을 보여주는 RNN 다이어그램. 관련 정보와 현재 시점 사이의 간격이 매우 큰 경우, 신경망이 연결하기 어려워져요.
이론적으로는 RNN이 이런 “장기 의존성”을 충분히 다룰 수 있어요. 사람이 신중하게 파라미터를 선택하면 이런 형태의 간단한 문제를 풀 수 있어요. 하지만 실제로는 RNN이 이걸 학습하지 못하는 것 같아요. 이 문제는 Hochreiter (1991) [독일어]와 Bengio, et al. (1994)가 깊이 탐구했는데, RNN이 왜 이걸 학습하기 어려운지에 대한 근본적인 이유를 발견했어요.
다행히도, LSTM은 이 문제가 없어요!
LSTM 네트워크
Long Short Term Memory 네트워크 – 보통 그냥 “LSTM”이라고 불러요 – 는 특별한 종류의 RNN인데, 장기 의존성을 학습할 수 있어요. Hochreiter & Schmidhuber (1997)가 도입했고, 이후 많은 사람들이 다듬고 대중화시켰어요.1 다양한 문제에서 엄청나게 잘 작동하고, 지금은 널리 사용되고 있어요.
LSTM은 장기 의존성 문제를 피하도록 명시적으로 설계됐어요. 긴 시간 동안 정보를 기억하는 게 기본 특성이에요. 애써 배워야 하는 게 아니라요!
모든 순환 신경망은 신경망 모듈이 반복되는 체인 형태를 띠어요. 표준 RNN에서는 이 반복되는 모듈이 아주 간단한 구조를 가지는데, 예를 들어 단일 tanh 레이어 같은 거예요.
다이어그램 설명: 표준 RNN의 반복 모듈. 단일 레이어(tanh)를 포함하는 간단한 구조.
LSTM도 이런 체인 같은 구조를 가지지만, 반복 모듈이 다른 구조를 가져요. 단일 신경망 레이어 대신, 네 개의 레이어가 있고 아주 특별한 방식으로 상호작용해요.
다이어그램 설명: LSTM 신경망의 반복 모듈. 네 개의 상호작용하는 레이어를 포함하는 복잡한 구조.
자세한 내용은 걱정하지 마세요. 나중에 LSTM 다이어그램을 단계별로 살펴볼 거예요. 지금은 우리가 사용할 표기법에 익숙해지기만 하면 돼요.
표기법 설명: 다이어그램에서 각 라인은 한 노드의 출력에서 다른 노드의 입력으로 전체 벡터를 전달해요. 분홍색 원은 벡터 덧셈 같은 포인트와이즈 연산을 나타내고, 노란색 박스는 학습된 신경망 레이어예요. 라인이 합쳐지는 건 연결(concatenation)을 의미하고, 라인이 갈라지는 건 내용이 복사되어 다른 위치로 가는 걸 의미해요.
LSTM의 핵심 아이디어
LSTM의 핵심은 셀 상태(cell state)인데, 다이어그램의 맨 위를 가로지르는 수평선이에요.
셀 상태는 일종의 컨베이어 벨트 같아요. 전체 체인을 따라 곧장 흐르는데, 약간의 선형 상호작용만 있어요. 정보가 변하지 않고 그냥 흘러가는 게 아주 쉬워요.
다이어그램 설명: LSTM의 셀 상태를 보여주는 다이어그램. 수평선이 전체 체인을 관통하며 컨베이어 벨트처럼 정보를 전달해요.
LSTM은 셀 상태에 정보를 빼거나 더할 수 있는데, 게이트(gate)라고 불리는 구조로 조절돼요.
게이트는 정보를 선택적으로 통과시키는 방법이에요. 시그모이드 신경망 레이어와 포인트와이즈 곱셈 연산으로 구성돼요.
다이어그램 설명: 게이트를 나타내는 작은 다이어그램. 시그모이드 레이어와 곱셈 연산을 보여줘요.
시그모이드 레이어는 0과 1 사이의 숫자를 출력하는데, 각 부분이 얼마나 통과할지를 나타내요. 0이라는 값은 “아무것도 통과시키지 마”를 의미하고, 1이라는 값은 “모든 걸 통과시켜!”를 의미해요.
LSTM은 셀 상태를 보호하고 제어하기 위해 이런 게이트를 세 개 가져요.
단계별 LSTM 살펴보기
LSTM의 첫 번째 단계는 셀 상태에서 어떤 정보를 버릴지 결정하는 거예요. 이 결정은 “망각 게이트”라는 시그모이드 레이어가 해요. \(h_{ t-1 }\)과 \(x_t\)를 보고, 셀 상태 \(C_{ t-1 }\)의 각 숫자에 대해 0과 1 사이의 숫자를 출력해요. 1은 “이걸 완전히 유지해”를 나타내고 0은 “이걸 완전히 제거해”를 나타내요.
이전 단어들로 다음 단어를 예측하는 언어 모델 예제를 다시 생각해봐요. 이런 문제에서 셀 상태는 현재 주어의 성별을 포함할 수 있어서, 올바른 대명사가 사용될 수 있어요. 새로운 주어를 보게 되면, 이전 주어의 성별을 잊고 싶을 거예요.
다이어그램 설명: 망각 게이트에 초점을 맞춘 LSTM 다이어그램. 시그모이드 레이어가 어떤 정보를 버릴지 결정해요.
다음 단계는 셀 상태에 어떤 새로운 정보를 저장할지 결정하는 거예요. 이건 두 부분으로 나뉘어요. 첫째, “입력 게이트 레이어(input gate layer)“라고 불리는 시그모이드 레이어가 어떤 값을 업데이트할지 결정해요. 다음으로, tanh 레이어가 셀 상태에 추가할 후보 값들의 벡터 \(\tilde{ C }_t\)를 만들어요. 다음 단계에서 이 둘을 결합해서 상태에 대한 업데이트를 만들어요.
언어 모델 예제에서는, 새로운 주어의 성별을 셀 상태에 추가해서, 잊어버리고 있는 이전 것을 대체하고 싶을 거예요.
다이어그램 설명: 입력 게이트에 초점을 맞춘 LSTM 다이어그램. 시그모이드 레이어와 tanh 레이어가 함께 새로운 정보를 추가할지 결정해요.
이제 이전 셀 상태 \(C_{ t-1 }\)을 새로운 셀 상태 \(C_t\)로 업데이트할 시간이에요. 이전 단계들에서 이미 뭘 할지 결정했으니, 실제로 하기만 하면 돼요.
이전 상태에 \(f_t\)를 곱해서, 잊기로 한 정보를 제거해요. 그런 다음 \(i_t*\tilde{ C }_t\)를 더해요. 이건 새로운 후보 값들인데, 각 값을 얼마나 업데이트할지에 맞춰 스케일링돼요.
언어 모델의 경우, 여기가 실제로 이전 주어의 성별에 대한 정보를 버리고 새로운 정보를 추가하는 곳이에요. 이전 단계에서 결정한 대로요.
다이어그램 설명: 셀 상태 업데이트에 초점을 맞춘 LSTM 다이어그램. 이전 상태에서 정보를 잊고 새로운 정보를 추가하는 과정을 보여줘요.
마지막으로, 무엇을 출력할지 결정해야 해요. 이 출력은 셀 상태를 기반으로 하지만, 필터링한 버전이에요. 먼저, 셀 상태의 어떤 부분을 출력할지 결정하는 시그모이드 레이어를 실행해요. 그런 다음 셀 상태를 tanh에 통과시켜서 (값을 -1과 1 사이로 만들어요) 시그모이드 게이트의 출력과 곱하는데, 그래서 결정한 부분만 출력하게 돼요.
언어 모델 예제에서, 주어를 막 봤으니 다음에 올 게 동사일 경우를 대비해서 동사와 관련된 정보를 출력하고 싶을 거예요. 예를 들어, 주어가 단수인지 복수인지를 출력해서, 다음에 동사가 온다면 어떤 형태로 활용되어야 하는지 알 수 있게 해요.
다이어그램 설명: 출력 게이트에 초점을 맞춘 LSTM 다이어그램. 시그모이드 레이어와 tanh 레이어가 셀 상태의 어떤 부분을 출력할지 결정해요.
Long Short Term Memory의 변형들
지금까지 설명한 건 꽤 일반적인 LSTM이에요. 하지만 모든 LSTM이 위와 같은 건 아니에요. 사실, LSTM을 포함하는 거의 모든 논문이 약간 다른 버전을 사용하는 것 같아요. 차이점은 미미하지만, 몇 가지를 언급할 가치가 있어요.
Gers & Schmidhuber (2000)가 도입한 인기 있는 LSTM 변형 중 하나는 “피프홀 연결(peephole connections)“을 추가하는 거예요. 게이트 레이어들이 셀 상태를 직접 볼 수 있게 하는 거죠.
다이어그램 설명: 피프홀 연결이 있는 LSTM 변형. 게이트들이 셀 상태를 직접 볼 수 있어요.
위 다이어그램은 모든 게이트에 피프홀을 추가하지만, 많은 논문들은 일부 피프홀만 제공하기도 해요.
또 다른 변형은 합쳐진 망각 게이트와 입력 게이트를 사용하는 거예요. 무엇을 잊고 어디에 새 정보를 추가할지 따로 결정하는 대신, 함께 결정해요. 뭔가를 입력할 때만 잊고, 뭔가 더 오래된 걸 잊을 때만 새로운 값을 상태에 입력해요.
다이어그램 설명: 결합된 forget/input 게이트가 있는 LSTM 변형.
LSTM에 대한 약간 더 극적인 변형은 Cho, et al. (2014)가 도입한 게이티드 순환 유닛(Gated Recurrent Unit, GRU)이에요. 망각 게이트와 입력 게이트를 단일 “업데이트 게이트”로 합쳐요. 또한 셀 상태와 은닉 상태를 병합하고, 다른 변경도 좀 해요. 결과 모델이 표준 LSTM 모델보다 간단하고, 점점 더 인기를 얻고 있어요.
다이어그램 설명: 게이티드 순환 유닛(GRU) 신경망. LSTM보다 간단한 구조를 가져요.
이건 가장 주목할 만한 LSTM 변형들 중 몇 개일 뿐이에요. Yao, et al. (2015)의 Depth Gated RNN 같은 다른 것들도 많이 있어요. Koutnik, et al. (2014)의 Clockwork RNN처럼 장기 의존성을 다루는 완전히 다른 접근법도 있어요.
이 변형들 중 어느 게 최고일까요? 차이가 의미 있을까요? Greff, et al. (2015)는 인기 있는 변형들을 멋지게 비교했는데, 모두 거의 같다는 걸 발견했어요. Jozefowicz, et al. (2015)는 만 개 이상의 RNN 아키텍처를 테스트했는데, 특정 태스크에서 LSTM보다 더 잘 작동하는 것들을 발견했어요.
결론
앞에서 RNN으로 사람들이 이루어낸 놀라운 결과들을 언급했어요. 본질적으로 이 모든 게 LSTM을 사용해서 달성됐어요. 대부분의 태스크에서 정말 훨씬 더 잘 작동해요!
수식으로만 보면 LSTM이 꽤 어려워 보일 수 있어요. 이 글에서 단계별로 살펴본 게 좀 더 이해하기 쉽게 만들었기를 바라요.
LSTM은 RNN으로 달성할 수 있는 것에서 큰 진전이었어요. 자연스럽게 궁금해지죠: 또 다른 큰 진전이 있을까요? 연구자들 사이에서 대체로 그렇다고 봐요. 다음 단계는 어텐션(attention)이에요! 아이디어는 RNN의 각 스텝에서 더 큰 정보 집합 중에서 필요한 정보를 선택하게 하는 거예요. 예를 들어, RNN을 사용해서 이미지를 설명하는 캡션을 만든다면, 출력하는 모든 단어마다 이미지의 일부분을 선택해서 볼 수 있어요. 실제로, Xu, et al. (2015)가 정확히 이걸 해요 – 어텐션을 탐구하고 싶다면 재미있는 시작점이 될 수 있어요! 어텐션을 사용한 정말 흥미로운 결과들이 많이 나왔고, 앞으로 훨씬 더 많은 게 나올 것 같아요…
어텐션만이 RNN 연구의 유일한 흥미로운 실마리는 아니에요. 예를 들어, Kalchbrenner, et al. (2015)의 Grid LSTM이 엄청 유망해 보여요. 생성 모델에서 RNN을 사용하는 작업 – Gregor, et al. (2015), Chung, et al. (2015), 또는 Bayer & Osendorfer (2015) – 도 아주 흥미로워 보여요. 지난 몇 년은 순환 신경망에 있어 흥미로운 시기였고, 앞으로 올 시기는 더욱 그럴 거라고 약속해요!
감사의 말
LSTM을 더 잘 이해하는 데 도움을 주고, 시각화에 코멘트하고, 이 포스트에 피드백을 제공해준 많은 분들께 감사드려요.
Google의 동료들, 특히 Oriol Vinyals, Greg Corrado, Jon Shlens, Luke Vilnis, Ilya Sutskever의 도움이 되는 피드백에 정말 감사해요. 또한 시간을 내어 도와준 많은 다른 친구들과 동료들, Dario Amodei와 Jacob Steinhardt에게도 감사해요. 특히 제 다이어그램에 대해 엄청 사려 깊게 대화해준 Kyunghyun Cho에게 특별히 감사드려요.
이 포스트 전에, 제가 가르쳤던 신경망에 대한 두 세미나 시리즈 동안 LSTM을 설명하는 연습을 했어요. 저를 인내해주고 피드백을 준 모든 참가자들에게 감사해요.
1 원저자 외에도 많은 사람들이 현대 LSTM에 기여했어요. 완전하지 않은 목록으로는: Felix Gers, Fred Cummins, Santiago Fernandez, Justin Bayer, Daan Wierstra, Julian Togelius, Faustino Gomez, Matteo Gagliolo, Alex Graves.
저자 소개: Christopher Olah는 머신러닝 연구자로, 신경망을 시각적이고 직관적으로 설명하는 것으로 유명해요. 현재 Anthropic에서 해석가능성(interpretability) 연구를 하고 있어요.
참고: 이 글은 LSTM의 작동 원리를 이해하기 위한 입문 자료예요. 원문에는 많은 다이어그램이 포함되어 있으니, 시각적 설명을 원하시면 원문을 참고하세요.
원문: Understanding LSTM Networks - Christopher Olah, colah’s blog (2015년 8월 27일)
생성: Claude (Anthropic)