sol’s blog

Bi-LSTM + Attention 모델로 변경 고민

sol-commits
sol-commits May 15, 2025

영상에서 추출한 프레임들의 종횡비를 고려하지 않은 채 224 x 224 로 리사이즈하여 생겼던 왜곡을 다시 원상태로 돌리고, 모델을 다시 돌려봐야하는 단계에서 Bi-LSTM + Attention 모델로 변경하는 것이 어떨지에 대한 얘기가 회의 중에 나와서 관련 논문을 읽고 비교를 해본다.

 
  • 관련 논문과 정리 내용

Detecting Driver Behavior Using Stacked LSTM Network With Attention Layer

 
목적, 마감, 결과, subtasks
목적
  • 기존 LSTM 모델보다 Bi-LSTM + Attention Layer 모델이 시계열 정보의 전후 맥락중요 프레임 강조 측면에서 더 나은 분류 성능을 낼 것으로 기대됨
  • 원래는 이미지 input이라 컴퓨팅 자원이 많이 들어서 생략했지만, 지금은 mar, ear, yaw, pitch, phone_detected 같은 수치형 시계열 데이터만 사용하기 때문에 구현 부담이 줄어들었음

→ 따라서, Bi-LSTM + Attention 구조를 새로 시도하기로 결정함

마감

  • May 15, 2025

결과

  • 기존 LSTM 모델과의 비교(성능 / 학습 속도 / 일반화)
  • Bi-LSTM + Attention Layer 구조 설명
  • 해당 구조가 자주 쓰이는 사례(어떤 종류의 데이터와 문제에 잘 맞는지)

subtasks

논문 전체 구조 간단히 요약 (배경, 모델 구조, 실험 방법, 결과, 결론)

모델 구조 도식 정리

Bi-LSTM 사용 이유: 시간의 앞뒤 맥락을 모두 반영하는 이유와 효과

기존 LSTM만 쓴 모델과의 성능 차이 요약 (정량 지표, 에폭 수, 오버피팅 여부 등)

Attention 유무, Stacked 여부에 따라 어떻게 성능이 변했는지

Attention Layer가 어떤 방식으로 적용되었는지 수식/구조 파악

  • LSTM 위에 Attention을 어떻게 얹었는지, 단순 self-attention인지 additive인지

우리 데이터 input(5개 feature)와 논문 데이터 비교 - 구조 차이 파악

Bi-LSTM + Attention을 도입했을 때 예상되는 장점 정리

실험 계획 구상(기존 LSTM 모델과의 비교 실험: 동일 input, 동일 학습 조건)

기존에 썼던 LSTM 그대로 사용 가능한지

code

만약 이 모델로 확정된다면 해야할 일,

  • 논문 속 attention 구조 구현 가능한 형태로 정리(TF/Keras or PyTorch 기준)
  • 오버피팅을 방지하기 위해 어떤 regularization 기법을 실험할지
    • dropout
    • weight decay(L2 정규화)
    • early stopping
    • layer normalization
    • data augmentation
      • 시계열에서는 jittering, time warping
 

Bi-LSTM 원리

Callout icon'

핵심 아이디어

Bi-LSTM은 입력 시퀀스를 두 방향(정방향, 역방향)으로 동시에 처리함으로써, 각 시점의 출력을 계산할 때 이전 정보(과거) 뿐만 아니라 이후 정보(미래)도 함께 고려함

구조

입력 시퀀스가 위와 같을 때,

Bi-LSTM은 두 개의 LSTM을 사용

  1. Forward LSTM (→)
  • 입력 시퀀스를 정방향으로 처리
  • 각 시점의 출력(hidden state)
  1. Backward LSTM (←)
  • 입력 시퀀스를 역방향으로 처리
  • 입력은 뒤에서부터 처리되지만, 출력은 시간 순서대로 매핑
 

시간 t에서의 bi-LSTM의 은닉 상태는 다음처럼 구성됨

ht=[htht]h_t = [h_t || h_t]

|| 는 벡터 결합(concatenation) 연산

 
항목
단일 LSTM
Bi-LSTM
입력 시퀀스
T
T
출력 벡터 차원
hidden_size
2 x hidden_size
출력 텐서 shape
(T, hidden_size)
(T, 2 x hidden_size)

forward, backward 결과를 벡터 결합하기 때문에 출력의 수(T)는 동일하지만, 동일한 LSTM 성능을 유지하고 싶다면 hidden_size는 두 배 해야함

시각적 다이어그램

 
 

Bi-LSTM + Attention 도입 시 기대되는 장점

높은 예측 정확도
Bi-LSTM은 과거 + 미래 맥락을 모두 활용하고 Attention은 유용한 정보에 집중함으로써, 두 기법의 상호 보완적 효과로 모델 정확도가 향상
논문에서 제안된 모델은 기존 단뱡항 LSTM 대비 오류율을 크게 감소시켰으며, 이는 미래 정보를 반영한 은닉표현중요 입력의 강조 덕분
일반화 성능 향상 및 오버피팅 완화
Attention 메커니즘은 불필요한 정보에 대한 가중치를 낮추고 핵심적인 입력에만 높은 가중치를 할당하기 때문에, 모델이 훈련 데이터의 잡음까지 암기하는 것을 막아줌
그 결과, 논문에서도 학습 오차와 테스트 오차의 차이가 크게 줄어들어(오버피팅 감소) 모델의 일반화 성능이 개선됨
학습 속도 향상 및 효율성
Attention을 통해 모델이 중요한 부분에 집중하여 학습함으로써 훈련 과정이 빨라지고 수렴이 빠르게 이루어지는 장점이 있음
논문에서도, attention을 추가한 모델은 더 적은 에폭으로 동일 성능에 도달하여 연산 비용을 절감했다고 보고함
Attention 레이어가 메모리 역할을 수행하여 LSTM이 모든 정보를 일렬로 압축해야하는 부담을 줄여주기 때문
모델 해석력 향상
Attention 가중치는 각 입력 시퀀스 요소의 중요도를 나타내므로, 어떤 요인이 운전자 행동에 영향을 주었는지를 해석할 수 있는 단서를 제공
 

LSTM 셀 구조

LSTM의 셀 개수는 시퀀스 길이와 같음

  • LSTM 셀 = LSTM이 하나의 시점 t를 처리하는 작은 모듈
 

→ bi-LSTM은 시퀀스 길이 T만큼의 forward 셀, backward 셀 각각 있으므로 시퀀스 길이의 2배만큼 셀이 있음

hidden state 크기

각 시점 t에서 LSTM이 출력하는 은닉 상태 hi\text{h}_\text{i}의 벡터 차원

  • 예를 들어, hidden size=64이면, htR64h_t \in \mathbb{R}^{64} 이고, 전체 시퀀스 출력은 shape이 (T, 64)가 됨 (T: 시퀀스 길이)
 

hidden state 는 각 시점에서 LSTM이 얼마나 풍부하게 정보를 표현하느냐 결정

  • 즉, 하나의 셀이 얼마나 복잡한 특징을 기억할 수 있는지, 메모리 용량 같은 개념
 

결정하는 법

  1. 경험 기반
    1. 모델 규모
      추천 hidden size
      작거나 빠르게 학습하고 싶을 때
      16, 32
      보통 수준의 데이터
      64, 128
      복잡한 문제, 더 깊은 특징 표현 필요
      256, 512 이상
  1. 문제의 복잡도 기준
      • 예측해야 하는 출력이 단순하거나 데이터 양이 적다면 → 작은 크기
      • 시계열 길이가 길고, 복잡한 패턴이 많다면 → 큰 크기
  1. 오버피팅 여부 확인
      • hidden size가 너무 크면
        • 훈련 데이터에 지나치게 적합(overfit)
        • 학습 시간이 길어지고 성능이 불안정
      • 너무 작으면
        • 충분한 표현을 못 해서 underfit

      검증 성능 기준으로 Grid Search 나 Validation loss를 통해 최적화

 

Time Distribution layer

 
TimeDistributed(Dense)
Dense
차이점
시퀀스의 각 시점마다 동일한 Dense를 반복 적용
전체 시퀀스를 1개의 벡터처럼 보고 Dense 한 번만 적용
시계열 시점 유지
O
X
입력 shape
(batch, time, features)
(batch, features) or flatten
출력 shape
(batch, time, new_features)
(batch, new_features)

꼭 attention 전에 hidden size를 줄여야할까?

상황
추천 전략
LSTM hidden size가 크고 연산이 부담됨
TimeDistributed(Dense(small_dim))로 줄이고 Attention
Attention layer가 dot-product 방식일 때
줄이는 게 매우 유리
self-attention에서 사용되는 대표적인 방식
성능이 중요하고 연산량 문제 없음
hidden size 그대로 유지
실험 중이라면?
둘 다 해보고 validation loss로 비교해보기
 

논문 구조 코드화

TensorFlow / Keras 버전

 

Pytorch

 

추천 글

BlogPro logo
Made with BlogPro

태그