-
LSTM(Long Short-Term Memory)AI 2026. 2. 22. 22:12
전통적인 RNN은 매 시점마다 동일한 가중치 행렬 $W$를 반복해서 곱하는 구조입니다. 역전파(Backpropagation) 과정에서 체인 룰(Chain Rule)에 의해 이 행렬이 계속 곱해지는데, 1보다 작은 값들이 연속해서 곱해지면 기울기가 0으로 수렴하는 기울기 소실(Vanishing Gradient) 현상이 발생합니다.
결과적으로 문장이나 시계열 데이터가 길어지면, 앞부분의 중요한 맥락(Context)이 뒤까지 전달되지 못하고 희미해지는 장기 의존성 문제(Long-Term Dependency)에 직면하게 됩니다. LSTM은 이 '반복적인 곱셈'이 낳는 비극을 '덧셈'이라는 수학적 장치로 해결합니다.


셀 상태(Cell State)와 '덧셈'의 마법
LSTM 구조의 핵심은 셀 상태(Cell State, $C_t$)입니다. 이는 은닉 상태(Hidden State, $h_t$)와는 별개로 네트워크 상단을 직진으로 관통하는 '정보의 고속도로(Information Highway)' 또는 '컨베이어 벨트' 역할을 합니다.

여기서 가장 중요한 수학적 직관은 정보의 갱신이 덧셈(+)으로 이루어진다는 점입니다. 가중치를 매번 곱하던 RNN과 달리, LSTM은 셀 상태에 필요한 정보를 더하고 빼는 선형 연산으로만 정보를 흐르게 합니다. 역전파 시 덧셈 연산은 기울기를 그대로 분배(Distribute)하므로, 기울기 소실 문제 없이 과거의 정보가 먼 미래까지 도달할 수 있게 됩니다.
이 컨베이어 벨트에 정보를 얼마만큼 넣고 뺄지 통제하는 밸브가 바로 게이트(Gate)이며, 이를 정밀하게 제어하기 위해 아다마르 곱을 사용합니다.
💡 아다마르 곱(Hadamard Product, $\odot$)의 직관적 의미
행렬이나 벡터의 같은 위치(Element-wise)에 있는 원소끼리 곱하는 연산입니다. 게이트 신경망을 통과한 출력값은 시그모이드 함수를 거쳐 0과 1 사이의 비율 값을 가지는데, 이 값을 기존 데이터 벡터와 아다마르 곱을 하면 "해당 정보를 몇 %나 통과시킬 것인가?"를 결정하는 완벽한 필터 역할을 수행하게 됩니다.
예를 들어 두 벡터가 있을 때 아다마르 곱은 이렇게 계산됩니다.
$$\begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} \odot \begin{bmatrix} 4 \\ 5 \\ 6 \end{bmatrix} = \begin{bmatrix} 1 \times 4 \\ 2 \times 5 \\ 3 \times 6 \end{bmatrix} = \begin{bmatrix} 4 \\ 10 \\ 18 \end{bmatrix}$$
게이트를 통과한 결과값($f_t, i_t$)은 시그모이드 함수 덕분에 0과 1 사이의 값(비율)을 가집니다. 이 비율 값을 기존 정보가 담긴 벡터와 아다마르 곱을 하게 되면, 1에 가까운 값이 곱해진 위치의 정보는 살아남고, 0에 가까운 값이 곱해진 위치의 정보는 삭제(차단)됩니다. 즉, 정보를 통제하는 완벽한 '수도꼭지 밸브' 역할을 하는 것입니다.
망각 게이트 (Forget Gate): "과거를 얼마나 잊을 것인가?"
$$f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$$- 직관: 이전 은닉 상태($h_{t-1}$)와 현재 입력($x_t$)을 받아 시그모이드($\sigma$) 함수에 넣습니다.
- 결과: 0과 1 사이의 값을 가지는 벡터 $f_t$가 나옵니다. 0에 가까울수록 이전 셀 상태의 정보를 '완전히 삭제'하고, 1에 가까울수록 '온전히 보존'하라는 뜻입니다.
- 예시: 문서를 읽다가 주어가 '철수'에서 '영희'로 바뀌는 시점이 오면, 망각 게이트는 철수에 대한 과거 성별 정보를 잊어버리도록 0에 가까운 값을 출력하여 셀 상태를 청소합니다.
[]는 두 벡터의 병합(Concatenation)을 의미, $h_{t-1} = [0.1, 0.5]$, $x_t = [0.8, 0.2, 0.4]$
- $[h_{t-1}, x_t] = [0.1, 0.5, 0.8, 0.2, 0.4]$

- $f_t$ (Forget Gate Output Vector):
- 의미: 망각 게이트가 계산을 마친 '최종 결과물(출력 벡터)'입니다.
- 역할: 이 값은 0과 1 사이의 실수로 이루어져 있으며, 바로 직전의 셀 상태($C_{t-1}$)에 곱해져서 "과거의 기억을 몇 %나 남길 것인가?"를 결정합니다. (예: 0.1이면 10%만 남기고 거의 다 삭제, 0.9면 90% 보존)
- $\sigma$ (Sigmoid Activation Function):
- 의미: 시그모이드 활성화 함수입니다.
- 역할: 괄호 안의 계산 결과가 아무리 크거나 작아도, 무조건 0에서 1 사이의 값으로 압축(Squash)해 줍니다. 정보를 얼마나 열고 닫을지 결정하는 '비율(퍼센트)'이나 '스위치'를 만들기 위해 수학적으로 가장 완벽한 함수입니다.
- $W_f$ (Weight Matrix of Forget Gate):
- 의미: 망각 게이트가 가진 고유한 '가중치 행렬(Weight)'입니다.
- 역할: 딥러닝 모델이 학습(역전파)을 거치면서 지속적으로 업데이트하는 핵심 파라미터입니다. 모델은 이 가중치를 조절해 가며 "어떤 입력 패턴이 들어왔을 때 과거 정보를 리셋해야 하는가?"에 대한 규칙을 스스로 깨우치게 됩니다.
- $[h_{t-1}, x_t]$ (Concatenated Vector):
- 의미: 이전 시점의 단기 기억과 현재 시점의 새로운 입력을 하나로 이어 붙인 '병합 벡터(Concatenation)'입니다.
- $h_{t-1}$: 이전 타임스텝($t-1$)에서 넘어온 은닉 상태(Hidden State) 값입니다. 과거 데이터의 요약본입니다.
- $x_t$: 현재 타임스텝($t$)에 모델로 새로 들어온 입력(Input) 데이터입니다.
- $b_f$ (Bias Vector of Forget Gate):
- 의미: 망각 게이트의 '편향(Bias)'입니다. 가중치와 마찬가지로 학습되는 파라미터입니다.
- 역할: 수식의 영점 조절 역할을 합니다. 예를 들어, 학습 초기에 모델이 과거 정보를 너무 빨리 잊어버리지 않도록 강제하고 싶다면, 이 $b_f$ 값을 1과 같은 양수로 초기화하여 시그모이드 결과값이 1에 가깝게 나오도록(즉, 정보를 보존하도록) 팁을 주기도 합니다.
입력/기억 게이트 (Input / Remember Gate): "새로운 정보 중 무엇을 기억할 것인가?"
$$i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)$$$$\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)$$- $i_t$ (시그모이드 층): 새로운 정보 중 어떤 값을 업데이트할지 결정하는 '밸브'입니다. (0~1 사이)
- $\tilde{C}_t$ (탄젠트 층): 현재 시점에서 셀 상태에 더해질 수 있는 새로운 정보의 후보군(Candidate)입니다. $\tanh$ 함수를 사용하여 값을 -1에서 1 사이로 정규화합니다.
- 직관: 단순히 들어온 정보를 다 때려 넣는 것이 아니라, $\tilde{C}_t$라는 새로운 지식을 만들고 그것을 $i_t$라는 밸브를 통해 '얼마만큼만' 반영할지 치밀하게 조절합니다.

1. 정보의 '양'을 조절하는 밸브 (시그모이드 층)
$$i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)$$- $i_t$ (Input Gate Vector):
- 의미: 입력 게이트의 결과값입니다. 뒤에서 설명할 '새로운 후보 값($\tilde{C}_t$)'을 "몇 %나 셀 상태에 반영할 것인가?"를 결정하는 비율입니다.
- 역할: 망각 게이트와 마찬가지로 0과 1 사이의 값을 가지며, 0이면 "새로운 정보를 하나도 반영하지 않음", 1이면 "새로운 정보를 100% 반영함"을 뜻합니다.
- $\sigma$ (Sigmoid Activation Function):
- 계산 결과를 0에서 1 사이의 비율로 압축(Squash)하여 필터 역할을 하도록 만드는 활성화 함수입니다.
- $W_i$ (Weight Matrix of Input Gate):
- 입력 게이트 전용 가중치 행렬입니다. 모델은 학습을 통해 "어떤 정보가 들어올 때 업데이트 밸브를 열어야 하는가"를 이 가중치에 저장합니다.
- $[h_{t-1}, x_t]$ (Concatenated Vector):
- 이전 은닉 상태와 현재 입력을 이어 붙인 병합 벡터입니다. (망각 게이트와 동일합니다.)
- $b_i$ (Bias Vector of Input Gate):
- 입력 게이트의 영점을 조절하는 편향(Bias) 파라미터입니다.
2. 셀 상태에 더해질 '새로운 내용' 만들기 (tanh 층)
$$\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)$$- $\tilde{C}_t$ (Candidate Cell State):
- 의미: 셀 상태($C_t$)에 새롭게 더해질 수 있는 '후보(Candidate) 벡터'입니다. 기호 위에 물결무늬(Tilde, $\sim$)가 있는 것은 아직 확정된 값이 아니라 '후보'라는 의미입니다.
- 역할: 현재 시점의 입력($x_t$)과 과거의 단기 기억($h_{t-1}$)을 바탕으로 새롭게 생성된 정보 그 자체입니다.
- $\tanh$ (Hyperbolic Tangent Function):
- 의미: $\tanh$(하이퍼볼릭 탄젠트) 활성화 함수입니다.
- 역할: 시그모이드와 달리, 입력값을 -1에서 1 사이의 값으로 압축합니다. 이는 두 가지 중요한 의미가 있습니다. 첫째, 정보에 양수(+)뿐만 아니라 음수(-) 방향의 영향력도 줄 수 있게 합니다. 둘째, 값이 무한히 커지는 것을 막아 신경망을 안정적으로 유지합니다.
- $W_C$ (Weight Matrix of Candidate):
- 새로운 후보 값을 생성하기 위한 전용 가중치 행렬입니다.
- $b_C$ (Bias Vector of Candidate):
- 후보 값을 생성할 때 영점을 조절하는 편향 파라미터입니다.
요약: 두 수식의 협력 (아다마르 곱을 위한 준비)
- $\tilde{C}_t$는 "무엇을 추가할지(What)" 새로운 지식을 펜으로 적어 놓은 메모장입니다. (내용 생성)
- $i_t$는 "얼마나 강하게 적어 넣을지(How much)"를 결정하는 형광펜의 진하기입니다. (반영 비율 결정)
결국 이 두 값이 뒤에서 아다마르 곱($i_t \odot \tilde{C}_t$)으로 만나, 비로소 새로운 정보가 메모리 셀에 업데이트되는 것입니다.
셀 상태 업데이트 (Cell State Update): "과거와 현재의 융합"
$$C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$$- 직관: LSTM의 본질을 보여주는 가장 아름다운 수식입니다.
- 과정: 이전 셀 상태($C_{t-1}$)에 망각 게이트($f_t$)를 곱해 잊을 것은 잊고, 그 위에 입력 게이트($i_t$)와 새로운 후보군($\tilde{C}_t$)을 곱한 값을 더해줍니다(+).
- 이 구조 덕분에 셀 상태는 과거의 중요한 기억을 온전히 간직한 채 현재의 새로운 맥락을 스펀지처럼 흡수하며 다음 시점으로 넘어갈 수 있습니다.

과거 Cell State를 새로운 State로 업데이트 하는 과정입니다. Forget Gate를 통해서 얼마나 버릴지, Input Gate에서 얼마나 더할지를 정했으므로 이 Update과정에서 계산을 해서 Cell State로 업데이트를 해줍니다.
- $C_t$ (Current Cell State):
- 의미: 계산이 모두 끝나고 업데이트가 완료된 '현재 시점의 셀 상태(장기 기억)'입니다.
- 역할: 이 값은 다음 타임스텝($t+1$)으로 그대로 전달되어 또 다른 과거의 기억($C_{t-1}$ 역할)으로 사용됩니다.
- $f_t$ (Forget Gate Output):
- 앞서 망각 게이트에서 계산해 낸 0과 1 사이의 비율 값입니다. "과거 기억을 얼마나 남길까?"를 의미합니다.
- $\odot$ (Hadamard Product):
- 방금 설명해 드린 원소별 곱셈 기호입니다. 필터를 씌우는 연산입니다.
- $C_{t-1}$ (Previous Cell State):
- 이전 타임스텝에서 넘어온 '과거의 셀 상태(장기 기억)'입니다.
- $f_t \odot C_{t-1}$ (과거 기억 필터링):
- 직관적 의미: 과거의 기억($C_{t-1}$)에 망각 필터($f_t$)를 씌우는 과정입니다. 잊어야 할 정보는 0이 곱해져 날아가고, 기억할 정보만 살아남습니다.
- $+$ (Addition):
- 의미: 단순한 덧셈 기호지만, LSTM에서 가장 중요한 연산입니다.
- 역할: 기존 RNN이 행렬을 계속 '곱해서' 기울기가 사라졌다면, LSTM은 이 덧셈 기호를 통해 새로운 정보를 기존 컨베이어 벨트에 '얹어주기만' 합니다. 덧셈은 역전파 시 기울기를 그대로 흘려보내기 때문에 장기 의존성 문제를 해결하는 일등 공신입니다.
- $i_t$ (Input Gate Output):
- 앞서 입력 게이트에서 계산한 0과 1 사이의 비율 값입니다. "새로운 정보를 얼마나 강하게 반영할까?"를 의미합니다.
- $\tilde{C}_t$ (Candidate Cell State):
- 현재 시점의 입력과 이전 은닉 상태를 섞어서 만든 '새로운 후보 정보'입니다.
- $i_t \odot \tilde{C}_t$ (새로운 정보 필터링):
- 직관적 의미: 무작정 새 정보를 다 넣는 게 아니라, 새 정보($\tilde{C}_t$)에 반영 비율 필터($i_t$)를 곱해 정말 필요한 알맹이만 골라냅니다.
출력 게이트 (Output Gate): "다음 스텝으로 무엇을 보낼 것인가?"
이제 업데이트된 메모리 셀 상태($C_t$)를 기반으로 현재 시점의 은닉 상태($h_t$)를 결정합니다.
$$o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)$$
$$h_t = o_t \odot \tanh(C_t)$$
- $o_t$: 셀 상태의 어떤 부분을 출력으로 내보낼지 결정하는 밸브입니다.
- $h_t$: 업데이트된 셀 상태 $C_t$를 $\tanh$에 넣어 -1과 1 사이로 다시 푸시(Push)한 뒤, 출력 게이트 $o_t$와 아다마르 곱을 합니다.
- 결과: 셀 상태($C_t$) 안에는 온갖 장기적인 기억이 섞여 있습니다. 하지만 현재 시점의 출력(혹은 다음 레이어로 전달할 값)으로는 지금 당장 쓰일 핵심 정보만 필터링해서 내보내는 것입니다.

어떤 출력값을 출력할지 결정하는 과정으로 최종적으로 얻어진 Cell State 값을 얼마나 빼낼지 결정하는 역할을 해줍니다.
1. 출력할 '비율' 결정하기 (시그모이드 층)
$$o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)$$- $o_t$ (Output Gate Vector):
- 의미: 출력 게이트의 결과값입니다.
- 역할: 다음 수식에서 완성된 셀 상태($C_t$)의 "어느 부분을 얼만큼만 밖으로 보여줄 것인가?"를 결정하는 필터(비율) 역할을 합니다.
- $\sigma$ (Sigmoid Activation Function):
- 결과를 0에서 1 사이의 실수로 압축하여, 정보의 통과 비율을 정하는 활성화 함수입니다.
- $W_o$ (Weight Matrix of Output Gate):
- 출력 게이트가 가지고 있는 고유한 가중치 행렬입니다. 모델은 데이터 사이언스 학습을 진행하며 현재 상황에서 어떤 정보를 내보내야 할지 이 가중치에 패턴을 저장합니다.
- $[h_{t-1}, x_t]$ (Concatenated Vector):
- 이전 시점의 단기 기억($h_{t-1}$)과 현재 시점의 새로운 입력($x_t$)을 하나로 이어 붙인 벡터입니다.
- $b_o$ (Bias Vector of Output Gate):
- 출력 게이트의 영점을 조절하는 편향입니다.
2. 최종 출력(단기 기억) 내보내기
$$h_t = o_t \odot \tanh(C_t)$$- $h_t$ (Current Hidden State):
- 의미: 현재 타임스텝의 '최종 은닉 상태'입니다.
- 역할: 이 값은 두 가지 경로로 사용됩니다. 첫째, 다음 타임스텝($t+1$)으로 넘어가서 다음 계산의 기초 자료($h_{t-1}$의 역할)가 됩니다. 둘째, 만약 이 LSTM 층 위에 다른 신경망 층이나 최종 예측을 위한 출력층이 있다면 그곳으로 전달되는 실질적인 출력값(Output)이 됩니다.
- $o_t$ (Output Gate Vector):
- 바로 위에서 계산한 0~1 사이의 필터 값입니다.
- $\odot$ (Hadamard Product):
- 같은 위치의 원소끼리 곱하여 필터를 씌우는 아다마르 곱 기호입니다.
- $\tanh$ (Hyperbolic Tangent Function):
- 의미: -1에서 1 사이의 값으로 정규화하는 함수입니다.
- 역할: 방금 전 업데이트를 마친 장기 기억인 셀 상태($C_t$)는 덧셈(+) 연산을 거쳐왔기 때문에 값의 범위가 제각각일 수 있습니다. 이를 $\tanh$에 넣어 -1과 1 사이로 예쁘게 포장하고 압축해 주는 역할을 합니다.
- $C_t$ (Current Cell State):
- 앞선 단계에서 계산을 모두 마치고 완성된 현재 시점의 '셀 상태(장기 기억)'입니다.
📝 직관적 이해 요약:
"업데이트된 방대한 장기 기억($C_t$)을 모두 다 밖으로 내보내는 것이 아니라, $\tanh$로 한번 다듬은 뒤, 지금 이 순간 딱 필요한 정보만 필터링($o_t$)해서 단기 기억이자 최종 출력($h_t$)으로 내보낸다."
왜 모든 게이트가 똑같은 $[h_{t-1}, x_t]$를 볼까?
결론부터 말씀드리면, $h_{t-1}$(과거의 요약본)과 $x_t$(현재의 새로운 정보)는 현재 시점($t$)에서 모델이 세상을 판단할 수 있는 '유일한 단서(Context)'이기 때문입니다.
각 부서는 서로 완전히 다른 역할(삭제, 내용 생성, 반영 비율 결정, 출력)을 맡고 있지만, 그 결정을 내리기 위해서는 "지금 상황이 어떤지"를 동일한 자료를 통해 정확히 파악해야 합니다.
🏢 이해를 돕는 '회사 회의실' 비유
LSTM 내부를 4명의 담당자가 모여 있는 회의실이라고 상상해 보세요.
- 김망각 (Forget Gate, $W_f$): 불필요한 과거 서류를 파쇄하는 담당자 (삭제 비율 결정)
- 최기획 (Candidate, $W_C$): 새로운 아이디어를 짜서 기획안을 들이미는 실무자 (새로운 알맹이/정보 생성)
- 이입력 (Input Gate, $W_i$): 최기획의 기획안 중 얼마나 장부에 적을지 평가하는 검토자 (반영 비율 결정)
- 박출력 (Output Gate, $W_o$): 사장님께 올릴 최종 보고서를 쓰는 담당자 (출력 비율 결정)
이 4명이 각자의 업무를 제대로 하려면 무엇이 필요할까요? 바로 '어제까지의 업무 진행 상황($h_{t-1}$)'과 '오늘 아침에 새로 들어온 뉴스($x_t$)'입니다.
- 김망각은 두 자료를 쓱 보고, "오늘 뉴스($x_t$)를 보니까 어제 진행하던 프로젝트($h_{t-1}$)는 엎어졌네. 관련 자료 싹 다 파쇄해!" 라고 결정합니다.
- 최기획은 두 자료를 쓱 보고, "어제 상황($h_{t-1}$)에 오늘 뉴스($x_t$)를 스까보니까 이런 기막힌 새 기획안($\tilde{C}_t$)이 나오네요!" 라며 실질적인 내용물을 만들어냅니다.
- 이입력은 두 자료를 쓱 보고, "음, 오늘 뉴스($x_t$)의 맥락상 최기획이 가져온 이 기획안은 당장 80%만 장부에 반영합시다." 라고 결정합니다.
- 박출력은 두 자료를 쓱 보고, "어제 상황($h_{t-1}$)과 오늘 뉴스($x_t$)를 종합해보니, 지금 당장 사장님께는 장부 내용 중 요것만 요약해서 보고($h_t$)해야겠다." 라고 결정합니다.
즉, 모든 부서는 똑같은 정보(단서)를 보지만, 각자의 목적에 맞게 전혀 다른 판단을 내리는 것입니다.
정보는 같아도, '가중치(Weight)'가 다르다!
입력값은 $[h_{t-1}, x_t]$로 똑같지만, 수식을 자세히 보시면 각 게이트마다 곱해지는 가중치 행렬이 다릅니다.
- 망각 게이트: $W_f$ (비율 결정, $\sigma$)
- 새로운 정보 후보: $W_C$ (알맹이 생성, $\tanh$)
- 입력 게이트: $W_i$ (비율 결정, $\sigma$)
- 출력 게이트: $W_o$ (비율 결정, $\sigma$)
이 가중치 행렬($W$)이 바로 각 담당자가 가진 '판단 기준'이자 '뇌'입니다. 딥러닝 모델이 학습을 한다는 것은, 똑같은 $[h_{t-1}, x_t]$를 보고도 망각 게이트는 삭제할 타이밍을 잘 잡도록 $W_f$를 깎고, 최기획은 쓸모있는 알맹이를 만들도록 $W_C$를 깎고, 입력 게이트는 반영할 타이밍을 잘 잡도록 $W_i$를 깎아나가는 과정입니다.
모든 단계가 동일한 입력 $[h_{t-1}, x_t]$를 받는 이유는, 현재 상황(과거의 문맥 + 현재의 입력)이라는 동일한 상황판을 보고 각자의 가중치($W_f, W_C, W_i, W_o$)를 통해 '무엇을 지울지, 어떤 알맹이를 만들지, 얼마나 반영할지, 무엇을 출력할지' 각기 다른 결정을 내리기 위함이다.
결국 LSTM 신경망이 학습 과정에서 오차를 줄여나가며 업데이트하는 것은 $W_f, W_i, W_C, W_o$라는 네 개의 가중치 행렬입니다. 데이터를 반복해서 학습하며, 모델은 스스로 "어떤 타이밍에 밸브를 열어 과거를 잊고(Forget), 어떤 새로운 맥락을 생성하며(Candidate), 그 중 얼마를 취하고(Input), 지금 당장 필요한 정보가 무엇인지(Output)"를 미세하게 조절하는 지능을 갖추게 됩니다
'AI' 카테고리의 다른 글
Transformer (0) 2026.02.24 Seq2Seq의 한계를 넘어서: Attention 메커니즘 (0) 2026.02.23 순환 신경망(RNN)의 개념 (0) 2026.02.22 통계적 언어 모델(SLM)과 N-gram (0) 2026.02.22 FastText (0) 2026.02.22