A baseline for detecting missclassified and out-of-distribution examples in NN
분류기를 만들다보면 오분류되는 건 당연히 문제가 듣도 보도 못한 새로운 데이터가 와서 엉뚱한 클래스에 꽂혀버린다.
우리가 분류기를 만들 때 세상에 모든 클래스를 커버할 수 없기에 당연히 발생하는 문제다
문제는 뉴럴넷이 너무 over confidence하여 이를 걷어내기 어렵다.
즉 틀렸음에도 점수가 너무 높다. (낮으면 쓰레스홀딩으로 걷어내면 될텐데 말이다.)
이를 야기하는 원인은 몇가지가 있는데
- sigmoid, softmax의 슬로프의 급격함
- depth 중가
- filter 수 증가
- batch norm 의 존재
- weight decay 감소
이다
Accuracy는 불필요한 것을 잘 걷어내는 것(rejection) 확인하기에 적합하지 않고
-AUROC:
TPR = TP/(TP+FN) : 실제 in 중에 얼마나 제대로 in으로 분류하는지
FPR = FP/(FP+TN) : 실제 out 중에 얼마나 잘못 분류하는지
를 이용하여 그린 그래프의 면적
-AUPR
Precision = TP/(TP+FP) : in으로 분류한 것 중에 얼마나 제대로 분류
Recall = TPR = TP/(TP+FN) : 실제 in 중에 얼마나 제대로 in으로 분류하는지
Mnist 기준 top1의 확률이
in: 평균 0.91, out: 0.86 정도로 out의 확률이 지나치게 높긴하지만,
AUROC, AUPR 기준으로 보면 in, out이 안 나뉘는 것은 아니다
그래서 sigmoid layer보다 abnormality module을 이용하여 학습을 시키면 좀더 향상을 시킨다.
abnomality 모듈의 입력은
- 확률값,
- 아웃풋 레이어 이전 레이어 값
- AE처럼 재생한 것과 원본과의 차이
로 이루어져 있고 이를 받아서 1~0값을 통해 in과 out을 검출한다.
그러면 전체적인 성능 향상이 있다.
그 외에도
- 확률이 유니폼하게 나오는 out 데이터를 gan으로 생성하여 학습하는 방법(training confidence-calibrated classifier for detecting out-of-distribution)
- 마할라노비스 거리를 통해서 out을 찾는 방법(A simple unified framework for tetecting out-of-distribution samples and adversarial attacks)
- 아웃데이터의 확률이 유니폼되도록 학습하는 방법(deep anomaly detection with outlier exposure)
'머신러닝 읽어주는 남자' 카테고리의 다른 글
음악 생성 테크트리 (0) | 2020.03.01 |
---|---|
docker에 대한 모든 것 (0) | 2020.01.10 |
model knowledge distillation (0) | 2019.10.15 |
Adversarial examples (0) | 2019.01.15 |
NLP 관련 용어 총정리-1 (1) | 2018.11.08 |