반응형
1. 들어가며
앞선 강의에서 순환 신경망(RNN)의 개념을 배웠습니다. 하지만 RNN에는 장기 의존성 문제(long-term dependency) 라는 한계가 있습니다.
즉, 문장이 길어지거나 시퀀스 데이터가 길어질수록 앞쪽 정보를 뒤쪽에서 잘 기억하지 못한다는 것이죠.
이를 해결하기 위해 고안된 것이 바로 LSTM(Long Short-Term Memory) 네트워크입니다. LSTM은 정보를 오랫동안 기억할 수 있도록 특별한 구조를 가지고 있어, 텍스트, 음성, 시계열 데이터 분석 등에서 널리 활용됩니다.
2. LSTM의 핵심 아이디어
LSTM은 RNN 구조에 **게이트(gate)**라는 장치를 추가한 모델입니다.
게이트는 마치 “필터”처럼 어떤 정보를 기억할지, 잊을지를 결정합니다.
- Forget Gate (망각 게이트): 과거 정보 중 불필요한 것을 버림
- Input Gate (입력 게이트): 새로운 정보 중 기억할 내용을 선택
- Output Gate (출력 게이트): 다음 단계로 내보낼 정보를 결정
이 3가지 게이트가 조화를 이루어, LSTM은 RNN보다 훨씬 긴 문맥을 다룰 수 있습니다.
예를 들어,
“오늘은 날씨가 맑고 기분이 좋아서 친구와 함께 공원에 갔다. 그곳에서 우리는 …”
라는 긴 문장이 있을 때, 단순 RNN은 앞의 “날씨” 정보를 뒤쪽까지 유지하기 어렵지만, LSTM은 필요하다면 해당 맥락을 **기억 셀(cell state)**에 보관해 둡니다.
3. 간단한 수학적 표현
LSTM은 기본적으로 아래와 같은 연산으로 구성됩니다.
망각 게이트:
f_t = σ(W_f · [h_{t-1}, x_t] + b_f)
입력 게이트:
i_t = σ(W_i · [h_{t-1}, x_t] + b_i) C̃_t = tanh(W_c · [h_{t-1}, x_t] + b_c) C_t = f_t * C_{t-1} + i_t * C̃_t
출력 게이트:
o_t = σ(W_o · [h_{t-1}, x_t] + b_o) h_t = o_t * tanh(C_t)
여기서
σ
는 시그모이드 함수,tanh
는 하이퍼볼릭 탄젠트 함수,C_t
는 셀 상태,h_t
는 은닉 상태를 의미합니다.
수학식은 복잡해 보이지만, 결국 “게이트로 정보 흐름을 조절한다”는 것이 핵심입니다.
4. 파이썬 실습: 텍스트 감정 분류 예제
이제 실습으로 LSTM을 체험해 보겠습니다.
영화 리뷰 데이터(IMDB Dataset)를 활용하여 리뷰가 긍정/부정인지 분류하는 모델을 만들어 봅시다.
import tensorflow as tf
from tensorflow.keras.datasets import imdb
from tensorflow.keras.preprocessing import sequence
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
# 1. 데이터 불러오기
max_features = 10000 # 상위 10,000 단어만 사용
maxlen = 200 # 각 리뷰를 200 단어로 잘라냄
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
# 2. 데이터 전처리 (패딩)
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)
# 3. 모델 정의
model = Sequential()
model.add(Embedding(max_features, 128))
model.add(LSTM(128))
model.add(Dense(1, activation='sigmoid'))
# 4. 컴파일 및 학습
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(x_train, y_train, epochs=3, batch_size=64, validation_split=0.2)
# 5. 평가
loss, acc = model.evaluate(x_test, y_test)
print("테스트 정확도:", acc)
실행 결과 예시
Epoch 1/3
313/313 [==============================] - 50s 150ms/step - loss: 0.45 - acc: 0.78 - val_acc: 0.84
Epoch 2/3
313/313 [==============================] - 45s 140ms/step - loss: 0.30 - acc: 0.87 - val_acc: 0.86
Epoch 3/3
313/313 [==============================] - 46s 145ms/step - loss: 0.22 - acc: 0.91 - val_acc: 0.87
테스트 정확도: 0.87
5. 핵심 정리
- RNN은 장기 의존성 문제를 겪지만, LSTM은 게이트 구조로 이를 해결한다.
- LSTM은 텍스트, 음성, 시계열 데이터 등에서 강력한 성능을 발휘한다.
- 실습에서는 영화 리뷰 감정 분류에서 약 87% 정확도를 달성할 수 있었다.
🔗 추천 학습 링크
반응형
'개발 창고 > AI' 카테고리의 다른 글
어텐션 메커니즘 기초 – 딥러닝에서 ‘집중하기’ 배우기 (0) | 2025.08.23 |
---|---|
GRU(Gated Recurrent Unit) 네트워크 기초 (0) | 2025.08.22 |
순환 신경망(RNN, Recurrent Neural Network) 기초 (0) | 2025.08.20 |
자연어 처리(NLP) 기초 – 텍스트 데이터 다루기와 감정 분석 실습 (0) | 2025.08.19 |
신경망 기본 실습: 간단한 이미지 분류 모델 만들기 (2) | 2025.08.17 |