C.W.K.
Stream
Lesson 02 of 06 · published

SimpleRNN, LSTM, GRU

~14 min · rnn, lstm, gru

Level 0Level 0
0 XP0/78 lessons0/17 achievements
0/100 XP to next level100 XP to go0% complete

Recurrent cell 가족

RNN은 sequence를 한 step씩 처리하면서 지금까지 본 걸 요약하는 hidden state 유지. 각 step은 현재 입력 + 이전 hidden state로 새 hidden state 만들고 (선택적으로) 출력.

SimpleRNN은 가장 기본 cell. 20–30 step 넘어가면 gradient가 vanish 또는 explode 해서 막혀.

LSTM (Long Short-Term Memory)은 vanishing gradient를 두 stream architecture로 해결: cell state (장기 기억)와 hidden state (작업 기억). 세 gate — forget, input, output — 가 정보 흐름 제어. LSTM은 수백 step 의존성을 안정적으로 모델링.

GRU (Gated Recurrent Unit)는 streamline된 LSTM, gate 둘 (셋 대신), cell과 hidden state 합침. 동등한 LSTM 대비 ~25% 적은 파라미터, 대부분 task에서 비슷한 정확도, 빠른 training. reset_after=True 설정해서 CuDNN 최적화 GPU 구현 사용 — default보다 최대 5배 빠름.

Code

RNN cell 세 변종·python
import tensorflow as tf
from tensorflow.keras import layers

# SimpleRNN — for short sequences only
rnn = layers.SimpleRNN(units=64, return_sequences=False, activation='tanh')

# LSTM — long-range memory via cell state + 3 gates
lstm = layers.LSTM(
    units=128,
    return_sequences=True,    # True for stacking, False for final-only
    return_state=False,       # True returns (output, hidden_state, cell_state)
    dropout=0.2,
    recurrent_dropout=0.1,
)

# GRU — fewer parameters, similar accuracy, CuDNN-friendly
gru = layers.GRU(
    units=128,
    return_sequences=True,
    reset_after=True,         # ALWAYS True for CuDNN GPU acceleration
)

# Parameter counts for units=128, input_size=128:
# SimpleRNN: ~32K
# GRU:       ~99K
# LSTM:      ~132K
Sentiment 분류용 stacked LSTM·python
import tensorflow as tf
from tensorflow.keras import layers

model = tf.keras.Sequential([
    layers.TextVectorization(max_tokens=10000, output_sequence_length=200),
    layers.Embedding(10000 + 2, 128, mask_zero=True),
    layers.LSTM(64, return_sequences=True),    # stacking → return_sequences=True
    layers.LSTM(32),                           # final → return last state only
    layers.Dense(64, activation='relu'),
    layers.Dropout(0.5),
    layers.Dense(1, activation='sigmoid'),
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.