Введение
Хотя мир функций потерь в глубоком обучении иногда может быть немного запутанным, есть одна функция потерь, которая служит точкой доступа начального уровня для большинства современных моделей классификации. Это функция кросс-энтропийных потерь.
Перекрестная потеря энтропии является фундаментальной концепцией машинного обучения, особенно в области глубокого обучения. В любой задаче классификации, где даны данные, и модель должна правильно пометить эти данные из ранее помеченных примеров, можно применить кросс-энтропийную потерю. Это тип функции потерь, используемый для измерения разницы между прогнозируемым распределением вероятностей и истинным распределением вероятностей целевой переменной. В этом посте мы рассмотрим теорию кросс-энтропийной потери, ее различные формы (бинарную кросс-энтропию и мультиклассовую кросс-энтропию) и способы ее применения в популярных средах глубокого обучения, таких как PyTorch и TensorFlow.
Читайте также: Что такое сиамские сети? Введение
Функции потерь
Изображение с https://optimal.uva.nl/project-plan/project-plan.html?cb. Визуализация траектории градиентного спуска для невыпуклой функции.
В машинном обучении функция потерь — это мера разницы между фактическими значениями и прогнозируемыми значениями модели. Функция потерь используется для оптимизации параметров модели, чтобы прогнозируемые значения были как можно ближе к фактическим значениям. Иногда функцию потерь называют функцией стоимости в глубоком обучении, поскольку она показывает, насколько неверны текущие параметры модели, то есть насколько дорого обходится их обновление, чтобы они были менее ошибочными.
Что такое перекрестная энтропийная потеря?
Перекрёстная энтропийная потеря — это мера разницы между двумя вероятность распределения, в частности истинное распределение и прогнозируемое распределение. Это скалярное значение, представляющее степень различия между двумя распределениями и используемое в качестве функции стоимости в моделях машинного обучения.
Теория перекрестной потери энтропии
Основной концепцией кросс-энтропийной потери является энтропия, которая является мерой неопределенности в случайной величине. Энтропия рассчитывается с использованием отрицательного логарифма вероятностей, приписываемых каждому возможному событию. По сути, вы пытаетесь измерить, насколько неопределенна модель в том, что предсказанная метка является истинной меткой. В машинном обучении потеря перекрестной энтропии используется для измерения разницы между истинным распределением и прогнозируемым распределением целевой переменной.
Функция Софтмакс
Функция softmax — это функция активации, используемая в нейронных сетях для преобразования входных значений в распределение вероятностей по нескольким классам. Функция softmax выводит вектор значений, сумма которых равна 1, что представляет вероятность каждого класса.
Функция softmax используется для создания прогнозируемого распределения вероятностей по классам, а кросс-энтропийная потеря используется для измерения разницы между прогнозируемым распределением и истинным распределением. Потеря кросс-энтропии наказывает модель за неправильные прогнозы, и ее значение минимизируется во время обучения, чтобы гарантировать, что модель предсказывает правильный класс с высокой вероятностью.
Когда функция softmax используется в сочетании с потерей перекрестной энтропии, модель способна делать хорошо откалиброванные прогнозы для задач классификации нескольких классов. Модель предсказывает класс с наибольшей вероятностью в качестве окончательного предсказания, а потеря перекрестной энтропии помогает гарантировать, что предсказанные вероятности близки к истинным вероятностям.
Читайте также: Как использовать перекрестную проверку для уменьшения переобучения
кросс-энтропия
Перекрестная энтропия — это мера разницы между двумя распределениями вероятностей, в частности, между истинным распределением и прогнозируемым распределением. Он рассчитывается как отрицательный логарифм предсказанного распределения, оцениваемого по истинным значениям. В целом существует два типа функций кросс-энтропийных потерь, каждая с небольшими модификациями, в зависимости от структуры меток: бинарная или мультиклассовая.
Двоичная кросс-энтропия
Бинарная кросс-энтропия — это особая форма кросс-энтропии, используемая в задачах бинарной классификации, где целевая переменная может принимать только два значения (например, истина/ложь). В этом случае бинарная перекрестная энтропия используется для измерения несходства между предсказанными вероятностями и истинными бинарными метками. Убыток — это ошибка в сделке в диапазоне от 0 до 1.
Формула бинарной кросс-энтропии (BCE)
Формула бинарной кросс-энтропии (BCE) определяется как:
BCE = -(y * log(y’) + (1 – y) * log(1 – y’))
где y — истинная метка, а y’ — прогнозируемая вероятность.
Мультиклассовая кросс-энтропия/категориальная кросс-энтропия
Мультиклассовая кросс-энтропия, также известная как категориальная кросс-энтропия, представляет собой форму кросс-энтропии, используемую в задачах мультиклассовой классификации, где целевая переменная может принимать несколько значений. Другими словами, этот тип перекрестной энтропии используется, когда целевые метки являются категориальными (т. е. принадлежат набору классов) и модель пытается предсказать метку класса. В этом случае перекрестная энтропия используется для измерения несходства между предсказанными вероятностями классов и истинным распределением классов. Здесь проигрыш представляет собой ошибку обработки в диапазоне k классов.
Мультиклассовая формула кросс-энтропии
Формула кросс-энтропии для нескольких классов определяется как:
C = -(1/N) * Σ_i (y_i * log (y’_i))
где N — количество выборок, y_i — истинная метка для i-й выборки, а y’_i — прогнозируемая вероятность для i-й выборки.
Как применять кросс-энтропию?
Кросс-энтропийную потерю можно применять в модели машинного обучения, используя ее в качестве функции стоимости между прогнозируемой меткой и меткой истинности во время обучения модели. Целью модели является минимизация кросс-энтропийных потерь, а это означает, что прогнозируемые вероятности должны быть как можно ближе к истинным вероятностям.
ПиТорч
В PyTorch кросс-энтропийные потери можно рассчитать с помощью torch.nn.CrossEntropyLoss
функция.
Вот пример того, как использовать эту функцию в задаче бинарной классификации:
import torch
import torch.nn as nn
# Define your model
model = nn.Sequential(nn.Linear(10, 20), nn.ReLU(), nn.Linear(20, 1), nn.Sigmoid())
# Define your loss function
criterion = nn.BCELoss()
# Define your inputs and labels
inputs = torch.randn(100, 10)
labels = torch.randint(0, 2, (100, 1), dtype=torch.float32)
# Forward pass to get the output from the model
outputs = model(inputs)
# Calculate the loss
loss = criterion(outputs, labels)
# Backward pass to calculate the gradients
loss.backward()
В этом примере мы используем BCELoss
функция, которая вычисляет бинарную кросс-энтропийную потерю. Для задачи классификации нескольких классов вы должны использовать CrossEntropyLoss
функция вместо этого. Входные данные для функции потерь являются выходными данными модели (outputs
) и истинные метки (labels
).
Обратите внимание, что в этом примере мы используем сигмовидную функцию активации на последнем слое модели для получения бинарных прогнозов. Если вы работаете с проблемой нескольких классов, вы должны заменить сигмовидную активацию на активацию softmax.
ТензорФлоу
В TensorFlow кросс-энтропийные потери можно рассчитать с помощью tf.keras.losses.SparseCategoricalCrossentropy
или tf.keras.losses.BinaryCrossentropy
функции, в зависимости от того, работаете ли вы с проблемой мультиклассовой или бинарной классификации соответственно.
Вот пример того, как использовать BinaryCrossentropy
функция в задаче бинарной классификации:
import tensorflow as tf
# Define your model
model = tf.keras.Sequential((
tf.keras.layers.Dense(20, activation='relu', input_shape=(10,)),
tf.keras.layers.Dense(1, activation='sigmoid')
))
# Define your loss function
loss_fn = tf.keras.losses.BinaryCrossentropy()
# Define your inputs and labels
inputs = tf.random.normal((100, 10))
labels = tf.random.uniform((100, 1), 0, 2, dtype=tf.int32)
# Forward pass to get the output from the model
outputs = model(inputs)
# Calculate the loss
loss = loss_fn(labels, outputs)
# Use an optimizer to minimize the loss
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
optimizer.minimize(loss, model.trainable_variables)
В этом примере мы используем BinaryCrossentropy
функция, которая вычисляет бинарную кросс-энтропийную потерю. Для задачи классификации нескольких классов вы должны использовать SparseCategoricalCrossentropy
функция вместо этого. Входными данными для функции потерь являются истинные метки (labels
) и выход из модели (outputs
).
Обратите внимание, что в этом примере мы используем сигмовидную функцию активации на последнем слое модели для получения бинарных прогнозов. Если вы работаете с проблемой нескольких классов, вы должны заменить сигмовидную активацию на активацию softmax.
Заключение
Cross Entropy Loss — это широко используемая функция потерь в машинном обучении, особенно в моделях классификации. Его способность измерять разницу между предсказанными вероятностями и истинными вероятностями делает его подходящим выбором для задач бинарной и многоклассовой классификации. При обучении модели глубокого обучения важно выбрать соответствующую функцию потерь, и Cross Entropy Loss может быть хорошим вариантом, если вашей целью является прогнозирование вероятностей классов. В PyTorch и TensorFlow реализовать функцию Cross Entropy Loss просто, и для ее использования требуется базовое понимание ее основных концепций, таких как энтропия, активация softmax, а также бинарная и мультиклассовая кросс-энтропия.
Значение перекрестной энтропийной потери служит ориентиром для настройки параметров модели и улучшения ее производительности. Благодаря своей универсальности и способности фиксировать ошибку в прогнозировании, Cross Entropy Loss является полезным инструментом для специалистов по машинному обучению, и его следует учитывать при разработке любой стандартной модели классификации.
Рекомендации
Аггарвал, Чару С. Нейронные сети и глубокое обучение: учебник. Спрингер, 2018.
«CrossEntropyLoss — документация по PyTorch 1.13». Питорч2022, https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html. По состоянию на 13 февраля 2023 г.
Жерон, Орельен. Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow: концепции, инструменты и методы создания интеллектуальных систем. «О’Рейли Медиа, Инк.», 2019 г.
Гудфеллоу, Ян и др. Глубокое обучение. Массачусетский технологический институт, 2016.
Максим. «Как выбрать кросс-энтропийную потерю в TensorFlow?» Переполнение стека, https://stackoverflow.com/questions/47034888/how-to-choose-cross-entropy-loss-in-tensorflow. По состоянию на 13 февраля 2023 г.
«Модуль: Tf.Keras.Losses». ТензорФлоу18 ноября 2022 г., https://www.tensorflow.org/api_docs/python/tf/keras/losses. По состоянию на 13 февраля 2023 г.
ван Амстердам, Университет. “План проэкта.” Оптимизация для машинного обучения и с его помощью (оптимальная) — Амстердамский университет21 декабря 2020 г., https://optimal.uva.nl/project-plan/project-plan.html?cb. По состоянию на 13 февраля 2023 г.