본문 바로가기
기계 학습

CCE: Categorial Cross-Entropy 범주형 교차 엔트로피

by 지제로사 2024. 4. 9.
반응형

https://medium.com/@anishnama20/understanding-cost-functions-in-machine-learning-types-and-applications-cd7d8cc4b47d

 

Understanding Cost Functions in Machine Learning: Types and Applications

What is cost function?

medium.com

CCE 사용 시기

  • 다중 클래스 분류: 인스턴스가 여러 가능한 범주 중 하나에만 속하는 문제에 이상적.
  • 확률적 출력: 모델 출력이 각 클래스에 대한 확률일 때 유용.
  • 출력층의 소프트맥스 활성화: 신경망의 마지막 계층에서 소프트맥스 활성화 함수와 함께 자주 사용됨.

CCE를 사용하지 않는 경우

  • 이진 분류: 두 클래스 문제의 경우, 이진 교차 엔트로피가 더 적합함.
  • 비확률적 출력: 모델 출력이 확률이 아닌 경우에는 적합하지 않음.
  • 회귀 문제: 출력이 연속적인 값이라면 범주형이 아닌 회귀 작업에는 부적절.

장점

  • 다중 클래스 문제에서의 성능: 다중 클래스를 효율적으로 처리하며 복잡한 분류 작업에서 좋은 결과를 제공.
  • 소프트맥스와의 안정성: 확률을 정규화하기 때문에 소프트맥스 함수와 잘 작동하여 안정적인 훈련을 제공.
  • 해석 가능한 손실 값: 모델이 예측한 확률 분포가 실제 분포와 얼마나 잘 일치하는지를 측정하는 해석 가능한 손실 값.

단점

  • 불균형 데이터에 민감함: 훈련 데이터가 특정 클래스로 크게 치우친 경우 성능이 저하될 수 있음.
  • 수치적 안정성 문제: CCE의 로그 함수는 특히 0에 가까운 확률에서 수치적 불안정을 일으킬 수 있음.
  • 비범주형 출력에 부적합: 출력이 이산 범주가 아닌 작업, 예를 들어 회귀에는 부적합.


요약하자면, 범주형 교차 엔트로피는 다중 클래스 분류 작업에 강력하고 널리 사용되는 손실 함수.
특히 소프트맥스 출력 계층과 결합할 때 효과적.
그러나 데이터 불균형, 이진 분류 작업, 비확률적 모델 출력의 경우에는 효과가 감소.

BCE = LogLoss = 1/n sum(-(y_actual * log(y_pred) + (1-y_actual)*log(1-y_pred)))
CCE = -1/n * sum(sum(y_actual*log(y_pred)))

y_actual : truth value
y_pred : predicted probability

 

BCE

import numpy as np
y_pred = np.array([0.2, 0.8, 0.6, 0.3])
y_actual = np.array([0, 1, 1, 0])
n = len(y_pred)
bce = -1/n * np.sum(y_actual * np.log(y_pred) + (1 - y_actual) * np.log(1 - y_pred))
print('Binary Cross-Entropy:', bce)

 

CCE

import numpy as np
y_pred = np.array([[0.1, 0.3, 0.6], [0.2, 0.7, 0.1], [0.9, 0.05, 0.05]])
y_actual = np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])
n = len(y_pred)

cce = -1/n * np.sum(np.sum(y_actual * np.log(y_pred)))
print('Categorical Cross-Entropy:', cce)

 

반응형