내가 적용하려는 분류 문제에 어떤 Loss를 적용해야하는지 혼란이 왔었다. 이 두 Loss에 대해 알아보고 알게된 내용을 정리해보자.
우선 위의 두 Task가 다르다는 것을 알아야 한다. (이걸 몰라서 혼란스러웠다)
Multi-Class: One-hot Encoding을 통해 여러 클래스 중 하나를 나타낸다.
Multi-Label: 여러 클래스 중 여러 개를 나타낸다. [즉, 두 개의 클래스가 동시 등장 가능]
CrossEntropyLoss: softmax + CrossEntropy
클래스가 나올 확률을 모두 더하면 1임.
즉, 입력이 여러 클래스 중 어떤 하나의 클래스인지 맞추게 하는 것
BCEWithLogitsLoss: sigmoid + CrossEntropy
클래스 각각마다 0~1 값을 가지고 클래스가 나올 확률 모두 더해도 1 아님.
즉, 입력이 각각의 클래스가 맞는지 맞추게 하는 것.
각 Loss 설명은 Pytorch 공식 문서에 잘 정리되어 있다.