Skip to main content

Функция потерь перекрестной энтропии: Обзор

Учебное пособие, в котором рассматривается функция потерь перекрестной энтропии, дополненное кодами PyTorch и Tensorflow, а также интерактивными визуализациями
Created on January 11|Last edited on February 11
Этот отчет является переводом «Cross Entropy Loss: An Overview » Saurav Maheshkar

РАЗДЕЛЫ





👋 Знакомство с функцией потерь перекрестной энтропии

Одной из наиболее распространенных функций потерь, используемой для обучения нейронных сетей, является функция потерь перекрестной энтропии. Рассмотрим деривацию и реализацию этой функции с помощью различных фреймворков, научимся способам входа и визуализации с помощью wandb.



🧑🏻‍🏫 Что такое кросс энтропийная потеря

Функция потерь перекрестной энтропии – это метрика, позволяющая оценить, насколько хорошо функционирует модель классификации в машинном обучении. Потеря (или ошибка) оценивается как число, находящееся между 0 и 1, где 0 – идеальная модель. Цель, как правило, заключается в том, чтобы максимально приблизить вашу модель к 0.
Функцию потерь перекрестной энтропии часто считают взаимозаменяемой с логистической ошибкой (или логистической функцией потерь и иногда рассматриваемой как функция потерь бинарной перекрестной энтропии), но это не всегда корректно.
С другой стороны, функция потерь бинарной перекрестной энтропии сохраняет только одно значение. Это значит, что она будет сохранять только 0,5, а другое значение вероятности будет подразумеваться. Если первая вероятность была 0,7, то подразумевается, что вторая вероятность будет 0,3. При вычислениях используется логарифм (отсюда и название – «логистическая функция потерь»).
В силу вышеуказанной причины функция потерь бинарной перекрестной энтропии (или логистическая функция потерь) используется в сценариях, предусматривающих два возможных результата, при этом нетрудно увидеть, где будет мгновенный сбой в случае двух или трех результатов. Функция потерь перекрестной энтропии часто применяется в моделях, в которых имеются три или более возможностей классификации.

Теория

Давайте начнем с азов. В процессе глубокого обучения обычно используется градиентная стратегия оптимизации для обучения модели (скажем f(x)f(x)) с использованием некоторой функции потерь l(f(xi),yi)l \, (f(x_i), \, y_i), где (xi,yi)(x_i, y_i) – определенная пара ввода-вывода. Функция потерь позволяет модели определить, насколько она «неправильная» и на основании этой «неправильности» – улучшить себя. Это мера ошибки. Наша роль в процессе обучения заключается в минимизации этой ошибки/потери.
Роль функции потерь является весьма важной. Если некорректный вывод не «наказывается» должным образом, это может привести к задержке сходимости и повлиять на обучение.
Существует парадигма обучения, называемая оценкой по методу наибольшей вероятности, которая обучает модель оценивать ее параметры, чтобы изучить базовое распределение данных. Таким образом, мы используем функцию потерь, чтобы оценить, насколько хорошо модель соответствует распределению данных.
Используя перекрестную энтропию, можно оценить ошибку (или разницу) между двумя вероятностными распределениями.
Например, в случае бинарной классификации перекрестная энтропия определяется как:
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, а также вход в 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


Заключение

На этом мы завершаем краткое знакомство с функцией потерь перекрестной энтропии. Для получения информации о полном наборе характеристик wandb, пожалуйста, ознакомьтесь с кратким 5-минутным руководством.

📚 Some Resources

  • Если вам интересно, почему мы должны использовать отрицательные логарифмические вероятности, посмотрите следующее видео. 🎥
  • Если вы хотите получить более строгое математическое объяснение, ознакомьтесь с заметкой в блоге (1) и заметкой в блоге (2) 🧾
Также обратите внимание на следующее видео:


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