반응형
GRU(Gated Recurrent Unit) 네트워크 기초
이번 강의에서는 GRU(Gated Recurrent Unit)를 학습합니다. GRU는 LSTM과 마찬가지로 RNN의 장기 의존성(Long-Term Dependency) 문제를 해결하기 위해 고안된 구조지만, 조금 더 단순하고 계산 효율적인 모델입니다. 따라서 텍스트 분석, 시계열 데이터 예측 등 다양한 분야에서 많이 사용됩니다.
1) 왜 GRU인가?
기존의 RNN은 입력이 길어질수록 앞부분의 정보를 잊어버리는 문제(기울기 소실, vanishing gradient)가 발생합니다.
이를 해결하기 위해 LSTM이 등장했지만, 구조가 복잡하고 계산 비용이 크다는 단점이 있습니다.
GRU는 LSTM에서 셀 상태(Cell State)를 없애고, 은닉 상태(Hidden State)만을 사용하여 더 단순화된 구조를 가졌습니다.
- 학습 속도: LSTM보다 빠름
- 성능: 많은 경우 LSTM과 비슷한 정확도
- 구조: 게이트 수가 적음 (2개)
2) GRU의 핵심 구조
GRU에는 두 가지 게이트만 존재합니다.
- 리셋 게이트(Reset Gate)
→ 과거 정보를 얼마나 초기화할지 결정 - 업데이트 게이트(Update Gate)
→ 과거 정보와 새로운 정보를 어떻게 조합할지 결정
수식 (간단히)
업데이트 게이트:
z_t = σ(W_z · [h_{t-1}, x_t])
리셋 게이트:
r_t = σ(W_r · [h_{t-1}, x_t])
새로운 후보 상태:
h̃_t = tanh(W · [r_t * h_{t-1}, x_t])
최종 은닉 상태:
h_t = (1 - z_t) * h_{t-1} + z_t * h̃_t
여기서 σ
는 시그모이드 함수, tanh
는 하이퍼볼릭 탄젠트 함수입니다.
3) 예시: 영화 리뷰 감정 분석 (IMDB 데이터셋)
이번에는 GRU를 활용해 영화 리뷰가 긍정(positive)인지 부정(negative)인지 분류해보겠습니다.
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, GRU, 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. GRU 모델 구성
model = Sequential()
model.add(Embedding(max_features, 128))
model.add(GRU(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 [==============================] - 40s - loss: 0.46 - acc: 0.78 - val_acc: 0.83
Epoch 2/3
313/313 [==============================] - 35s - loss: 0.30 - acc: 0.87 - val_acc: 0.86
Epoch 3/3
313/313 [==============================] - 34s - loss: 0.22 - acc: 0.90 - val_acc: 0.87
테스트 정확도: 0.87
4) GRU와 LSTM 비교
구분 | LSTM | GRU |
---|---|---|
게이트 수 | 3개 (Forget, Input, Output) | 2개 (Reset, Update) |
메모리 구조 | 셀 상태 + 은닉 상태 | 은닉 상태만 |
계산 속도 | 느림 | 더 빠름 |
성능 | 일반적으로 우수 | 비슷하거나 약간 낮음 |
5) 핵심 정리
- GRU는 RNN의 한 종류로, 단순하면서도 LSTM과 비슷한 성능을 보임
- 리셋 게이트와 업데이트 게이트를 통해 중요한 정보는 유지하고 불필요한 정보는 버림
- 실제 실습(IMDB 데이터셋)에서는 약 87% 정확도 달성
추천 학습 자료
반응형
'개발 창고 > AI' 카테고리의 다른 글
트랜스포머(Transformer) 구조 이해하기 (0) | 2025.08.24 |
---|---|
어텐션 메커니즘 기초 – 딥러닝에서 ‘집중하기’ 배우기 (0) | 2025.08.23 |
LSTM(Long Short-Term Memory) 네트워크 기초 (0) | 2025.08.21 |
순환 신경망(RNN, Recurrent Neural Network) 기초 (0) | 2025.08.20 |
자연어 처리(NLP) 기초 – 텍스트 데이터 다루기와 감정 분석 실습 (0) | 2025.08.19 |