Skip to main content

크로스 엔트로피 손실: 개요

파이토치 및 텐서플로의 코드와 대화형 시각화를 포함한 크로스 엔트로피 손실을 다루는 튜토리얼
Created on January 11|Last edited on January 24
이는 여기에서 볼 수 있는 영어 기사를 번역한 것이다.

섹션



👋 크로스 엔트로피 손실 소개

신경망을 훈련하는 데 사용되는 가장 일반적인 손실 함수 중 하나는 cross-entropy(교차 엔트로피)입니다. 이 블로그 포스트에서는 다양한 프레임워크를 사용하여 해당 솔루션의 파생과 구현에 대해서
살펴보고wandb를 사용하여 기록하고 시각화하는 방법에 대해 알아보도록 하겠습니다.



🧑🏻‍🏫 크로스 엔트로피 손실이란 무엇입니까?

크로스 엔트로피 손실(Cross Entropy Loss)은 머신 러닝의 분류 모델이 얼마나 잘 수행되는지 측정하기 위해 사용되는 지표입니다. Loss(또는 Error)는0은 완벽한 모델로0과 1 사이의 숫자로 측정됩니다. 일반적인 목표는 모델을 가능한 0에 가깝게 만드는 것입니다.
Cross Entropy Loss은 종종Logistic loss (또는Log loss, 또는Binary Cross Entropy Loss라고도 함)과 교체 사용이 가능한 것으로 간주되지만 항상 올바른 것은 아닙니다.
Cross Entropy Loss은 머신 러닝 분류 모델의 발견된 확률 분포와 예측 분포 사이의 차이를 측정합니다. 예측에 대해 가능한 모든 값이 저장되므로, 예를 들어, 동전 던지기에서 특정 값(odd)을 찾는 경우 해당 정보가 0.5와 0.5(앞면과 뒷면)에 저장됩니다.
반면Binary Cross Entropy Loss는 하나의 값만 저장합니다. 즉, 0.5만 저장하고 다른 0.5는 다른 문제에서 가정하며, 첫 번째 확률이 0.7이면 다른 0.5는 0.3)이라고 가정합니다. 또한 알고리듬(Log loss)을 사용합니다.
이러한 이유로Binary Cross Entropy Loss (또는Log loss)은 결과값이 두 개뿐인 시나리오에서 사용되며, 세 개 이상일 경우 즉시 실패하는 위치를 쉽게 알 수 있습니다. 세 가지 이상의 분류 가능성이 있는 모델에서 Cross Entropy Loss가 자주 사용됩니다.

이론

기초부터 시작해보도록 하겠습니다. 딥 러닝에서, 우리는 일반적으로 특정 손실 함수(Loss Function) l(f(xi),yi)l \, (f(x_i), \, y_i)를 사용하여 모델 (예: f(x)f(x) )을 훈련시키기 위해 증감 기반된 최적화 전략(Gradient Based Optimization Strategy)을 사용합니다. 여기서 (xi,yi)(x_i, y_i) 는 일부 입출력 쌍입니다. 손실 함수는 모형은 이 함수가 "wrong(틀린)"지를 확인하고 "wrongness(틀림)"을 기반으로 스스로를 향상시키는 데 사용됩니다. 이는 오차의 척도입니다. 트레이닝에 대한 우리의 목표는 이러한Error/Loss를 최소화하는 것입니다.
손실 함수의 역할은 중요합니다. 만약 그 규모에 맞게 잘못된 출력 값에 불이익을 주지 않는다면 수렴(Magnitude)을 지연시키고 학습에 영향을 미칠 수 있습니다.
기본 데이터 분포를 학습하기 위해 모델을 훈련시켜 매개 변수를 추정하는Maximum Likelihood Estimation (최대 가능도 추정, MLE)이라는 학습 패러다임이 있습니다. 따라서 손실 함수를 사용하여 모형이 데이터 분포를 얼마나 잘 적합시키는지 평가합니다.
Cross Entropy를 사용하여 두 확률 분포 사이의 오차(또는 차이)를 측정할 수 있습니다.
예를 들어, 이진 분류(Binary Classification)의 경우Cross Entropy는 다음과 같이 주어집니다.
l=(ylog(p)+(1y)log(1p))l = - (\,y \, log(p)\,\,+ \,\, (1-y) \, log(1-p)\,)

여기에서:
  • pp 는 예측 확률입니다.
  • yy 는 지표입니다(이진 분류의 경우 0 또는 1).
특정 데이터 포인트에 대해 무엇이 발생하는지 살펴보겠습니다. 올바른 지시자가 (예로) y =1이라고 가정합니다. 이 경우,
l=(1×log(p)+(11)log(1p))l = - ( \, \,1 \times log(p) + (1 - 1) \, \, log (1- p) \, \,)

l=(1×log(p))l = - ( \, \, 1 \times log(p) \, \,)

손실 ll 값은 개연성 pp에 따라 달라집니다. 따라서, 우리의 손실 함수는 낮은 손실로 정확한 예측(pp의 높은 값)을 제공하는 모델을 보상할 것입니다. 그러나 확률이 낮으면 오류 값이 ���져서(음수 값이 커짐) 잘못된 결과에 대해 모델에 불이익을 줍니다.
다중 분류(예: N 클래스) 문제에 대한 간단한 확장은 다음과 같습니다.:
c=1Nyclog(pc)- \sum_{c=1}^{N} y_c log(p_c)


🧑🏼‍💻 코드

이번 절에서는 Tensorflow와 PyTorch에서 Cross Entropy Loss를 사용하는 방법과 wandb에 로그하는 방법을 살펴보겠습니다.

🥕 Tensorflow 구현

import tensorflow as tf
from wandb.keras import WandbCallback

def build_model():
...

# Define the Model Architecture
model = tf.keras.Model(inputs = ..., outputs = ...)

# Define the Loss Function -> BinaryCrossentropy or CategoricalCrossentropy
fn_loss = tf.keras.losses.BinaryCrossentropy()

model.compile(optimizer = ..., loss = [fn_loss], metrics= ... )

return model

model = build_model()

# Create a W&B Run
run = wandb.init(...)

# Train the model, allowing the Callback to automatically sync loss
model.fit(... ,callbacks = [WandbCallback()])

# Finish the run and sync metrics
run.finish()

🔥 PyTorch 구현

import wandb
import torch.nn as nn

# Define the Loss Function
criterion = nn.CrossEntropyLoss()

# Create a W&B Run
run = wandb.init(...)

def train_step(...):
...
loss = criterion(output, target)

# Back-propagation
loss.backward()

# Log to Weights and Biases
wandb.log({"Training Loss": loss.item()})

# Finish the run and sync metrics
run.finish()

Run set
2


결론

이상으로Cross Entropy Loss에 대한 짧은 튜토리얼을 마칩니다. 전체wandb 기능을 보시려면 짧은 5분 가이드를 확인하십시오.

📚 리소스

여러번 클릭할 필요 없도록 비디오를 바로 보여드리겠습니다:


Iterate on AI agents and models faster. Try Weights & Biases today.