🔗 관련 영상: YouTube - LSTM 개념 강의 | YouTube - LSTM 게이트 시각화
장단기 메모리 순환 신경망 (Long Short-Term Memory)
본격적인 설명에 앞서, LSTM이 어떤 문제를 해결하기 위해 등장했는지부터 이해하면 훨씬 쉽게 다가온다. 한마디로 LSTM은 "기본 RNN은 기억력이 나쁘다"는 문제를 해결하기 위해 만들어졌다.
• RNN의 한계
기본 RNN은 시퀀스(Sequence, 순서대로 정렬된 연속된 데이터)가 길어질수록 초반 정보를 잊어버리는 기울기 소실(Gradient Vanishing) 문제가 발생한다. 학습 과정에서 오차를 거꾸로 전달할 때 그 신호가 층을 거칠수록 점점 작아져서, 결국 아주 오래전 정보는 거의 반영되지 못하는 것이다.
• 장기 의존성 문제(long-term dependency problem)
다음과 같은 문장이 있다.
"나는 프랑스에서 자랐다. ... (중간에 한국, 미국 등이 섞인 많은 문장) ... 그래서 나는 프랑스어를 유창하게 한다."
이 문장에서 RNN은 앞부분의 "프랑스"라는 정보를 끝까지 기억하기 어렵다.
이와 같이 시퀀스(sequence)의 길이가 길어질 때 초반부에 등장한 중요한 정보(예: 프랑스)가 후반부의 결과에 영향을 미치지 못하는 현상을 "장기 의존성 문제"라고 한다.
• LSTM은 이러한 장기 의존성 문제를 해결하기 위해 고안되었다.
LSTM은 RNN과는 다르게 신경망 내에 메모리를 두어 먼 과거의 데이터도 저장할 수 있도록 하였다.
기본 RNN이 단기 메모리만 가진다면, LSTM은 장기 메모리(Cell State)를 추가로 보유하여 중요한 정보를 오래 보관할 수 있다. 이 장기 메모리는 마치 컨베이어 벨트처럼 네트워크를 관통해서 흐르며, 필요한 정보만 게이트를 통해 더하거나 덜어낸다.
위 예시처럼 빈칸에 들어갈 대명사(He/She)를 맞히려면, 훨씬 앞에서 등장했던 주어(예: John 또는 Jane)를 계속 기억하고 있어야 한다. RNN은 이런 상황에서 자주 실패하지만, LSTM은 아래처럼 메모리 셀을 이용해 중요한 정보를 계속 들고 간다.
입출력을 제어하기 위한 소자(논리적인 장치; device; 素子)인 게이트(Gate)를 두었다.
게이트는 일종의 정보 필터 역할을 한다. 마치 수문(水門)이 물의 흐름을 조절하듯, 게이트는 정보의 흐름을 조절한다.
LSTM에서 각 게이트의 역할은 다음과 같다.
• 망각 게이트(Forget Gate)
과거의 정보를 어느 정도까지 기억할지 결정하는 소자이다.
과거와 현재 데이터가 sigmoid 함수를 거쳐 나온 값을 과거의 정보와 곱한다.
따라서 sigmoid 함수의 출력이 0일 경우 과거의 정보는 완전히 잊혀지고, 1일 경우에는 과거의 정보가 온전히 보존된다.
→ "이 정보는 버려도 될까, 아니면 계속 기억해야 할까?"를 결정
망각 게이트: 과거 정보를 얼마나 잊을지 결정
Jane이 새로이 입력되면서,
메모리 셀에서 기존 John에 관한 기억이 100% → 20%로 80%가 망각된다.
출처: https://youtu.be/bX6GLbpw-A4?si=6b-e8oGkGpx3OFPu
여기서 sigmoid 함수는 어떤 값이든 입력받아 0과 1 사이의 값으로 눌러주는 함수라고 이해하면 된다. 0에 가까우면 "완전히 잊는다", 1에 가까우면 "그대로 간직한다"는 뜻의 스위치라고 생각하면 쉽다.
• 입력 게이트(Input Gate)
현재의 정보를 기억하기 위한 소자이다.
과거와 현재 데이터가 sigmoid 함수와 tanh 함수를 거치면서 현재 정보에 대한 보존량을 결정한다.
→ "새로 들어온 정보 중 무엇을 저장할까?"를 결정
Jane이 새로이 메모리 셀에 더해지는 과정
입력 게이트: 현재 정보를 얼마나 반영할지 결정
셀 후보(Candidate): 실제로 메모리에 저장될 새로운 정보의 내용
출처: https://youtu.be/bX6GLbpw-A4?si=6b-e8oGkGpx3OFPu
입력 게이트는 두 단계로 나뉜다. 먼저 sigmoid가 "얼마나 반영할지(0~1)"를 정하고, tanh가 "어떤 내용을 새로 저장할지(-1~1)"를 만들어낸다. 이 둘을 곱한 값이 새로 메모리에 더해지는 정보가 된다.
• 출력 게이트(Output Gate)
출력층으로 출력할 정보의 양을 결정하는 소자이다.
셀 상태(Cell State)와 현재 입력을 바탕으로 다음 단계로 전달할 정보를 필터링한다.
→ "저장된 정보 중 무엇을 밖으로 내보낼까?"를 결정
출력 게이트: 최종적으로 외부로 내보낼 값을 결정
현재의 정보 Jane과 메모리 셀의 정보 중에서 최종 출력할 값을 결정
출처: https://youtu.be/bX6GLbpw-A4?si=6b-e8oGkGpx3OFPu
정리하면, 한 타임스텝에서 LSTM은 ① 망각 게이트로 낡은 기억을 지우고 → ② 입력 게이트로 새 기억을 더하고 → ③ 출력 게이트로 지금 필요한 만큼만 꺼내 쓰는 세 단계를 거친다.
망각 게이트, 입력 게이트, 출력 게이트, 그리고 후보 셀 상태(Candidate Cell State)는 모두 이전 은닉 상태 \( h_{t-1} \)와 현재 입력 \( x_t \)를 받아 완전연결(Fully Connected) 방식으로 값을 계산한다는 점에서 구조가 같다. 그래서 게이트 하나에 필요한 파라미터 수는 다음과 같이 구할 수 있다.
\[ \text{게이트 1개당 파라미터 수} = \underbrace{(\text{입력 차원} \times \text{은닉 차원})}_{W} + \underbrace{(\text{은닉 차원} \times \text{은닉 차원})}_{U} + \underbrace{\text{은닉 차원}}_{b} \]
여기서 W는 입력 \( x_t \)와 은닉 상태를 연결하는 입력 연결 가중치, U는 이전 은닉 상태 \( h_{t-1} \)과 현재 은닉 상태를 연결하는 은닉 상태 연결 가중치, b는 편향(bias)이다. 그리고 LSTM 셀 하나에는 이와 같은 구조를 가진 망각·입력·출력 게이트와 후보 셀 상태 계산까지 총 4개의 유사한 변환이 있으므로, LSTM 셀 전체의 파라미터 수는 다음과 같다.
\[ \text{LSTM 셀 전체 파라미터 수} = 4 \times \text{(게이트 1개당 파라미터 수)} \]
예를 들어 입력 차원이 10, 은닉 상태 차원이 20인 LSTM 셀이라면, 게이트 1개당 파라미터 수는
\[ (10 \times 20) + (20 \times 20) + 20 = 200 + 400 + 20 = 620 \]
이 되고, LSTM 셀 전체의 파라미터 수는
\[ 620 \times 4 = 2{,}480 \]
이 된다. 참고로, 이러한 파라미터 수는 시퀀스의 길이(타임스텝 수)와는 무관하다. 같은 가중치 \( W, U, b \)를 모든 타임스텝에서 공유(share)하기 때문이다.
Q. 입력 차원이 10, 은닉 상태 차원이 20인 LSTM 셀에서, 각 게이트(입력·망각·출력 게이트 및 후보 셀 상태 계산)마다 입력 연결 가중치 \( W \), 은닉 상태 연결 가중치 \( U \), 편향 \( b \)가 각각 하나씩 존재한다고 할 때, 게이트 하나에 필요한 파라미터 수와 LSTM 셀 전체(4개)에 필요한 총 파라미터 수는?
정답 ①
해설
게이트 하나당 \( W \)는 입력 차원 10과 은닉 차원 20이 완전 연결되므로 \( 10 \times 20 = 200 \)개, \( U \)는 은닉 차원끼리 완전 연결되므로 \( 20 \times 20 = 400 \)개, 편향은 20개이다. 따라서 게이트 하나당 파라미터 수는 \( 200 + 400 + 20 = 620 \)개이다. LSTM 셀은 입력·망각·출력 게이트와 후보 셀 상태 계산까지 총 4개의 유사한 변환을 가지므로, 전체 파라미터 수는 \( 620 \times 4 = 2{,}480 \)개이다.
현재까지 제안된 RNN 기반의 응용 서비스들은 대부분 LSTM을 이용하여 구현되었다.
LSTM은 다음과 같은 분야에서 활용된다:
LSTM의 메커니즘은 인간의 기억 시스템과 유사한 점이 많다. 우리도 중요한 정보는 장기 기억으로 저장하고, 불필요한 정보는 잊어버린다. LSTM은 이러한 인간의 선택적 기억 능력을 모방한 것이다.