C.W.K.
Stream
Lesson 03 of 07 · published

Pooling 과 Recurrent layer

~9 min · layers

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

Pooling — 일부러 해상도 버리기

conv layer 가 feature 잡고 나면 보통 full 해상도로 안 들고 있어도 돼. Pooling 은 feature map 을 줄이면서 가장 센 신호만 남겨 — 연산 줄고, 뒤쪽 뉴런의 receptive field 커지고, translation 내성도 살짝 붙어.

  • MaxPooling2D(2) — 각 2×2 윈도우의 최댓값. 기본 선택, 가장 센 activation 보존.
  • AveragePooling2D(2) — 대신 평균. 더 부드럽고 덜 쓰임.
  • GlobalAveragePooling2D()모든 spatial 위치를 평균해서 (H, W, C) 를 C-vector 하나로. conv backbone 과 Dense head 사이의 표준 다리Flatten 자리를 대체하고 param 더미를 날려.

Recurrent — sequence 를 걷는 state

Recurrent layer (LSTM, GRU) 는 sequence 를 timestep 하나씩 처리하면서 hidden state 를 앞으로 들고 가 — 그래서 각 step 출력이 이전 전부에 의존해. 핵심 손잡이는 return_sequences: False 면 sequence 전체를 요약한 vector 하나 (classifier head 용), True 면 매 timestep 출력 — 이게 바로 다음 recurrent layer 가 필요로 하는 거라 stack 에서 마지막만 빼고 전부 켜야 해. Bidirectional 로 감싸면 정방향 / 역방향 둘 다 돌려서 concat. 2024+ 엔 거의 다 Transformer 로 갈아탔지만, 작은 sequence (짧은 시계열 / 텍스트) 나 스트리밍은 LSTM 이 여전히 간결.

Code

LSTM, GRU, 그리고 Bidirectional wrapper·python
# LSTM: Long Short-Term Memory
layers.LSTM(64, return_sequences=True)  # Output at every timestep
layers.LSTM(64)                             # Output at last timestep only

# GRU: Gated Recurrent Unit (simpler, often comparable)
layers.GRU(64)

# Bidirectional wrapper: processes sequence forward AND backward
layers.Bidirectional(layers.LSTM(64))

External links

Exercise

같은 sequence classifier 두 방식으로 — (a) Embedding → LSTM(64) → Dense, (b) Embedding → MultiHeadAttention → GlobalAveragePooling1D → Dense. 작은 텍스트 데이터셋 (e.g. IMDB) 에서 둘 다 학습하고 epoch 당 실측 시간이랑 최종 validation accuracy 기록. 실제로 어느 쪽을 ship 할지랑 그 이유 메모.
Hint
attention 쪽이 보통 GPU 에서 epoch 당 더 빨라 — sequence 를 병렬로 처리하거든. LSTM 은 timestep 을 직렬로 밟아야 해서 느려.

Progress

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

댓글 0

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

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