본문 바로가기

dev_AI_framework

Cross-Entropy (CUDA)

개요

Cross-Entropy 손실은 분류(classification) 문제에서 널리 사용되는 목적 함수다.
모델 출력 logits타깃 인덱스 벡터를 입력으로 받아, 소프트맥스 확률을 통해 손실을 계산한다.

현재 구현은 CUDA f32 row-major 텐서만 지원한다.

 

Forward API

L = ge.cross_entropy(X, targets, reduction="mean")

입력

  • X: (M, N) float32, row-major
    • M: 배치 크기
    • N: 클래스 개수
  • targets: (M,) int32, row-major
    • 각 샘플의 정답 인덱스 (0 ≤ target < N)
  • reduction (str, optional):
    • "none" → per-sample 손실 (M,) 반환
    • "mean" → 평균 손실 스칼라 (1,) 반환
    • "sum" → 합 손실 스칼라 (1,) 반환

출력

  • loss: reduction 모드에 따라 (M,) 또는 (1,) float32

 

 

Backward API

dX = ge.cross_entropy_backward(X, targets, reduction="mean")

입력

  • X: (M, N) float32 logits
  • targets: (M,) int32
  • reduction: "none" | "mean" | "sum"

출력

  • dX: (M, N) float32
    • Softmax 후 미분된 gradient
    • "mean"일 경우, 배치 크기 M으로 나눈 평균값 반환

 

구현 메모

  • dtype 제약: 현재 DType::F32 / DType::I32만 지원
  • target 인덱스: 내부에서는 int64_t*로 해석하지만, Host 쪽에서 I32를 준비하면 자동 캐스팅 처리됨
  • reduction: mean 모드는 Host 리덕션으로 처리 (MVP 버전)
  • 향후 개선: GPU 내 reduction 커널, label smoothing, ignore_index 옵션 추가 가능