- Dropout
정의: 학습 중 일부 뉴런을 무작위로 꺼내 네트워크가 특정 뉴런에 과도하게 의존하지 않도록 함
적용위치:
- LSTM 층의 dropout 파라미터(입력 - 은닉 사이)
- recurrent_dropout (은닉 - 은닉 사이)
- nn.Dropout()을 LSTM 출력 이후에 수동으로 적용
- Weight Decay(L2 정규화)
정의: 모델의 가중치 값이 너무 커지는 것을 막아 일반화 성능 향상
적용방식:
optimizer = torch.optim.Adam(model.parameters(), weight_decay=1e-5)
kernel_regularizer=regularizers.l2(1e-5)
- Early Stopping
정의: 검증 성능이 일정 에폭 동안 개선되지 않으면 학습을 조기 종료
적용 이유:
- 에폭 수가 많을수록 오버피팅 발생 가능성 증가
- 자동으로 적절한 학습 종료 시점을 탐색
- Layer Normalization
정의: 시점별로 hidden state를 정규화해 안정적 학습 유도
장점:
- LSTM 등 순환 모델에 적합(BatchNorm 보다 효과적)
self.norm = nn.LayerNorm(normalized_shape)
out = self.norm(lstm_output)
- Data Augmentation
- jittering
정의: 입력 시계열에 약간의 랜덤한 noise 추가
- jittering
b. time warping
정의: 시계열에 일부 구간을 늘이거나 줄이는 변형
목적: 동일한 행동이라도 속도 변화에 대해 더 일반화된 표현을 학습하도록 유도
from tsaug import TimeWarp
# 보수적인 설정
aug = TimeWarp(n_speed_change=1, max_speed_ratio=1.3)
X_aug = aug.augment(X)
# 한 번만 속도 변화
→ 우리 데이터에서 하품 데이터가 증강이 필요한데, 하품 시퀀스에 하품 한주기가 다 담겨있지 않으므로 timewarp는 적합하지 않다고 판단됨