Обучение нейронной сети для регрессии с гауссовым выходным слоем

Вопрос или проблема

Как обучить модель нейронной сети, которая выполняет регрессию по реальным значениям, используя гауссовский выходной слой? То есть оценивать параметры среднего и стандартного отклонения предсказания. Поскольку во время тренировки будет только одна цель с реальным значением. Надо ли будет взять выборку из гауссовского распределения на выходе, а затем вычислить потери с использованием цели? Или каким-то образом будет две цели: одна для среднего, другая для стандартного отклонения.

Модель Deep AR forecasting от Amazon делает что-то подобное для прогнозирования временных рядов, где полносвязный слой на выходе RNN предсказывает параметры среднего и стандартного отклонения гауссовского распределения. Однако метка цели будет содержать только одно реальное число. Как тогда будет вычисляться потеря? Взять выборку из гауссовского распределения и затем использовать это? Этот вид выборки используется в RL для поощрения исследования, но я не уверен, как это делается в обучении регрессионных моделей.

Вы можете оптимизировать вероятность данных относительно предсказанного гауссовского распределения. Иными словами

  1. У вас есть предсказанное среднее (u) и стандартное отклонение (s) для каждой точки данных (x)
  2. Вычислите отрицательную логарифмическую вероятность этой точки данных для данного распределения. Вот реализация в pytorch, но вы можете решить это аналитически из PDF гауссовского распределения и вычислить это с использованием любой библиотеки автоматического дифференцирования, которую хотите.
  3. Трактуйте это как вашу потерю и оптимизируйте.

Ответ или решение

Обучение нейронной сети для регрессии с гауссовым выходным слоем

Вопрос о том, как обучить нейронную сеть для выполнения регрессии с использованием гауссового выходного слоя, актуален в контексте современных методов обработки данных, таких как модель DeepAR от Amazon. Эта модель, применяемая для прогнозирования временных рядов, демонстрирует, как можно предсказывать параметры распределения, такие как среднее значение и стандартное отклонение.

Принцип работы

Обучение включает в себя два основных процесса:

  1. Прогнозирование: Нейронная сеть на выходе генерирует два значения для каждого входного примера: ожидаемое среднее значение (μ) и стандартное отклонение (σ) статусного распределения.

  2. Подсчет потерь: Поскольку целевая переменная представляет собой одно реальное значение, необходимо оптимизировать функцию потерь, которая учитывает вероятность наблюдаемого значения при условии предсказанного распределения.

Алгоритм обучения

Вот шаги, необходимые для обучения нейронной сети в данной задаче:

  1. Определение модели: Создайте архитектуру нейронной сети, которая на выходе будет предоставлять два числа — μ и σ. Это можно сделать с помощью полной связной (FC) нейронной сети или рекуррентных нейронных сетей (RNN).

  2. Расчет негативного логарифма правдоподобия: Для каждого обучающего примера, используя предсказанные μ и σ, необходимо вычислить негативный логарифм правдоподобия (NLL) для наблюдаемого значения (y). Формула для NLL выглядит следующим образом:

    [
    \text{NLL}(y | μ, σ) = \log(σ) + \frac{(y – μ)²}{2σ²} + \frac{1}{2} \log(2\pi)
    ]

    Данная формула учитывает, что мы измеряем, как хорошо наше предсказанное гауссово распределение описывает наблюдаемое значение y.

  3. Оптимизация: Используйте полученное значение 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()  # Обратное распространение ошибки

В заключение

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

Оцените материал
Добавить комментарий

Капча загружается...