Вопрос или проблема
Как обучить модель нейронной сети, которая выполняет регрессию по реальным значениям, используя гауссовский выходной слой? То есть оценивать параметры среднего и стандартного отклонения предсказания. Поскольку во время тренировки будет только одна цель с реальным значением. Надо ли будет взять выборку из гауссовского распределения на выходе, а затем вычислить потери с использованием цели? Или каким-то образом будет две цели: одна для среднего, другая для стандартного отклонения.
Модель Deep AR forecasting от Amazon делает что-то подобное для прогнозирования временных рядов, где полносвязный слой на выходе RNN предсказывает параметры среднего и стандартного отклонения гауссовского распределения. Однако метка цели будет содержать только одно реальное число. Как тогда будет вычисляться потеря? Взять выборку из гауссовского распределения и затем использовать это? Этот вид выборки используется в RL для поощрения исследования, но я не уверен, как это делается в обучении регрессионных моделей.
Вы можете оптимизировать вероятность данных относительно предсказанного гауссовского распределения. Иными словами
- У вас есть предсказанное среднее (u) и стандартное отклонение (s) для каждой точки данных (x)
- Вычислите отрицательную логарифмическую вероятность этой точки данных для данного распределения. Вот реализация в pytorch, но вы можете решить это аналитически из PDF гауссовского распределения и вычислить это с использованием любой библиотеки автоматического дифференцирования, которую хотите.
- Трактуйте это как вашу потерю и оптимизируйте.
Ответ или решение
Обучение нейронной сети для регрессии с гауссовым выходным слоем
Вопрос о том, как обучить нейронную сеть для выполнения регрессии с использованием гауссового выходного слоя, актуален в контексте современных методов обработки данных, таких как модель DeepAR от Amazon. Эта модель, применяемая для прогнозирования временных рядов, демонстрирует, как можно предсказывать параметры распределения, такие как среднее значение и стандартное отклонение.
Принцип работы
Обучение включает в себя два основных процесса:
-
Прогнозирование: Нейронная сеть на выходе генерирует два значения для каждого входного примера: ожидаемое среднее значение (μ) и стандартное отклонение (σ) статусного распределения.
-
Подсчет потерь: Поскольку целевая переменная представляет собой одно реальное значение, необходимо оптимизировать функцию потерь, которая учитывает вероятность наблюдаемого значения при условии предсказанного распределения.
Алгоритм обучения
Вот шаги, необходимые для обучения нейронной сети в данной задаче:
-
Определение модели: Создайте архитектуру нейронной сети, которая на выходе будет предоставлять два числа — μ и σ. Это можно сделать с помощью полной связной (FC) нейронной сети или рекуррентных нейронных сетей (RNN).
-
Расчет негативного логарифма правдоподобия: Для каждого обучающего примера, используя предсказанные μ и σ, необходимо вычислить негативный логарифм правдоподобия (NLL) для наблюдаемого значения (y). Формула для NLL выглядит следующим образом:
[
\text{NLL}(y | μ, σ) = \log(σ) + \frac{(y – μ)²}{2σ²} + \frac{1}{2} \log(2\pi)
]Данная формула учитывает, что мы измеряем, как хорошо наше предсказанное гауссово распределение описывает наблюдаемое значение y.
-
Оптимизация: Используйте полученное значение NLL как функцию потерь и примените алгоритм оптимизации (например, Adam), чтобы обновить веса модели. Это позволит сети "учиться" на данных, настраивая μ и σ так, чтобы минимизировать потери.
Подсчет потерь с использованием Pytorch
Pytorch предлагает удобный инструмент для работы с негативным логарифмом правдоподобия через функционал torch.nn.GaussianNLLLoss
. С помощью этого инструмента вы можете легко интегрировать вычисление потерь в вашу модель.
Пример реализации:
import torch
import torch.nn as nn
# Предположим, что model — это ваша нейронная сеть, выход которой включает mean и std
mean, std = model(input_data)
# Определение функции потерь
loss_fn = nn.GaussianNLLLoss()
# Целевое значение
target = target_data
# Расчет потерь
loss = loss_fn(mean, target, std)
loss.backward() # Обратное распространение ошибки
В заключение
Обучение нейронной сети для регрессии с гауссовым выходным слоем предоставляет мощный инструмент для моделирования неопределенности предсказаний. Этот подход позволяет учитывать вариативность и потенциал ошибок, что особенно важно в задачах прогнозирования, таких как временные ряды. Используя описанную методологию, вы сможете эффективно обучать нейронные сети, которые не только предсказывают значение, но и дают возможность оценить степень своей уверенности в этих предсказаниях.