“해당 연구가 해결 및 보완해주는 기존 HAR 모델들의 문제 및 한계점은?”
→ 이에 제안 모델은 프로토타입으로 데이터를 Clustering 시켜 센서 데이터 특유의 uncertainty나 노이즈에 훨씬 robust해진다.
→ 제안 모델은 정규화된 프로토타입 기반 학습을 도입하여 센서 신호의 진폭보다는 Human Activity 동작의 고유한 패턴에만 집중하여 다양한 환경속에서도 HAR 성능이 유지될 수 있도록 했다.
DL은 종종 데이터만 보고 튀는 값을 예측한다. 이에 기존 HAR 모델들은 물리적으로 불가능한 움직임을 예측하더라도 이를 억제 및 제한할 수단이 없었다. 하지만 제안 모델은 Dynamic Loss를 도입하여 데이터가 물리법칙을 따르도록 강제하여 노이즈를 억제하도록 했다.
기존엔 모델이 시간의 흐름 즉, 맥락을 무시한채 움직임을 예측했다. Human Activity는 시간축에서 연속된 동작이기 때문에 현재 시점과 다음 시점 사이의 변화량을 명시적으로 학습시켜 동작의 진행 과정을 이해하게 만들 수 있는 Flow Loss를 도입하였다.
Contrastive Loss를 통해 Label이 없거나 노이즈가 심한 데이터라도 데이터 자체의 특징을 잘 뽑을 수 있도록 해준다. 이는 분류기의 Embedding 공간 품질 자체를 높여주는 효과가 있다. 또한 동작의 본질 및 패턴을 명확히 구분해낼 수 있고 같은 동작에 대한 데이터끼리 군집화가 가능하다.
def set_seed(seed):
random.seed(seed) # 1. Python 기본 무작위성 고정
np.random.seed(seed) # 2. NumPy 연산 고정
torch.manual_seed(seed) # 3. CPU Torch 연산 고정
torch.cuda.manual_seed(seed) # 4. GPU Torch 연산 고정 (단일 GPU)
torch.cuda.manual_seed_all(seed) # 5. 멀티 GPU 연산 고정
torch.backends.cudnn.deterministic = True # 6. 연산 속도가 느려져도 결정론적 알고리즘 사용 강제
torch.backends.cudnn.benchmark = False # 7. 최적 커널 찾기 기능 Off (매번 같은 알고리즘 사용)
os.environ['PYTHONHASHSEED'] = str(seed) # 8. 해시 기반 연산(Dict 등) 순서 고정
def seed_worker(worker_id):
worker_seed = torch.initial_seed() % 2**32
np.random.seed(worker_seed)
random.seed(worker_seed)