리프레이밍이란 출력의 표현방식을 바꾸는 방법이다.
예를 들어서 depth estimation을 할 때 회귀 문제로 만들어서 출력값을 거리 값 하나로 만들 수도 있겠지만 0~10cm에 속할 확률, 10~20cm에 속할 확률... 식으로 특정 범위 안에 속할 확률로 출력값을 설정하는 분류 문제로 바꿀 수도 있다.
하나의 출력값을 사용하고 싶을 때는 기대값을 구하든 해서 사용하면 된다.
이런게 리프레이밍(reframing)이다.
예전에 회사에서 head pose estimation을 할 때 보통 regression으로 head pose를 구하는데 리프레이밍을 했더니 전반적으로 성능이 살짝 올라갔던 경험이 있다.
Improving Regression Performance with Distributional Losses (ICML 2018) - 이 논문을 적용했었다.
그 때 당시에는 이런걸 리프레이밍이라고 하는지도 모르고 그냥 적용했었다. L1 loss보다 kl-divergence가 optimization이 더 잘된다고만 이해했었는데 요즘 공부하는 책에서는 이렇게 말하고 있다.
1. 정밀도는 약간 떨어지더라도 출력이 확률 밀도 함수, PDF로 나오기 때문에 regression보다 유연성이 있다. 예를 들어서 정답이 10일 때, 모델 계산 과정에서는 5와 10으로 출력이 나올 확률이 있다고 하자. 그런데 regression으로 문제를 만들면 둘 중 하나를 선택해야하고, 10을 골랐다면 다행이지만 5를 골라버리면 오차가 5가 되버린다.
그렇지만 출력을 분포로 나오게 만들면 5일 확률과 10일 확률을 고려해 그 중간의 값을 내뱉을 수 있다. 그러면 오차가 최대 5보다는 작기 때문에 엄청나게 잘못 예측하는 경우가 줄어들 수 있다.
2. 사후확률 분포를 얻을 수 있다. 예를 들어서 출력값이 unimodal, bimodal로 나올 수 있다. 이런 경우에 둘다 기댓값을 구했을 때 같더라도 confidence는 unimodal인 경우가 높다라고 해석할 수 있다.
리프레이밍 적용 예시
1. 불확실성을 구해야할 때 : 내가 구한 이 값이 정말 믿을만한건지, 모델이 정확하게 계산한건지 필요할 때 regression -> classification으로 바꾸면 confidence를 어느정도 구할 수 있다.
2. 데이터의 표준 편차가 작을 때는 classification으로 리프레이밍하는게 안 좋을 수 있음.
3. 예측 범위를 제한할 때 : head pose 같은 경우는 +- 180으로 범위가 제한돼 있다. 이런 경우에 regression으로 값을 구하면 범위를 넘어갈 수 있기 때문에 리프레이밍하는 것도 괜찮다.
4. 리프레이밍이 된다면 굳이 둘 중 하나만 선택하지 않고 regression head, classification head 이렇게 2개의 head로 multi task learning을 해도 된다. 두 head의 출력값 차이가 클 때 confidence가 낮다고 볼 수도 있겠다.
혹은 학습할 때만 사용하면 auxilary head로 사용하고 나중에는 둘 중에 하나만 골라서 사용해도 될 것 같다.
'Development > MLOps' 카테고리의 다른 글
MLOps 채용 정리 (0) | 2024.03.23 |
---|