Вопрос или проблема
Проблема с байесовской нейронной сетью, похоже, заключается в том, что она в основном работает для задач классификации. Возможно ли адаптировать эту нейронную сеть или даже использовать другую модель, если таковая существует, для прогнозирования непрерывного значения и также предоставления меры неопределенности?
Если это поможет, я пытаюсь предсказать количество хлорофилла, присутствующего в растении, на основании изображения с дрона. Однако я также хочу иметь возможность визуализировать эту неопределенность, когда я создаю тепловую карту предсказанного хлорофилла для каждого пикселя. Я думал, что предсказанное значение может принять цвет из соответствующей тепловой карты, а затем сила прогноза (уверенность) этого предсказанного значения может быть преобразована в значение альфа. В итоге получится ‘размытый’ пиксель, если у него низкая уверенность в своем предсказании.
Если байесовская линейная регрессия является лучшей альтернативой, она все еще предоставляет значение уверенности с каждым связанным предсказанием, или я неправильно понимаю, как она функционирует? Если есть какие-либо известные уроки по этой теме, к которым меня можно направить, я был бы благодарен?
Оценка $\mu$ и $\sigma$ напрямую
Обычная нейронная сеть, используемая для регрессии, но с выходом, который дает вам как $\mu$, так и $\sigma$ для каждой выборки, будет работать здесь.
Вместо того чтобы обучать сеть с помощью обычных потерь регрессии (например, MSE), функция потерь будет отрицательной логарифмической вероятностью. Для каждой выборки сеть будет учиться предсказывать $\mu$, который отслеживает $y$, или, по крайней мере, $\sigma$, которая ограничивает $y$, если не может определить $\mu$. Последнее можно интерпретировать как меру неопределенности в предсказании для этой конкретной выборки.
Объяснение и пример на PyTorch здесь, и, думаю, есть и другие примеры, использующие пакет torch.distributions
.
Если это поможет, я пытаюсь предсказать количество хлорофилла, присутствующего в растении, на основании изображения с дрона.
В этом случае, поскольку вы предсказываете строго положительное количество, вы могли бы обратить внимание на распределения, доступные в torch.distributions
. Какое бы вы ни выбрали (скажем, гамма), вы можете получить доступ к его методу .log_prob(<target_values>).mean()
и использовать отрицательное значение этого метода в качестве функции потерь для обучения сети.
Квантильная регрессия
Если вы не хотите указывать распределение, вы можете вместо этого выполнить квантильную регрессию. Предположим, вы хотите, чтобы сеть выводила 10%, 50% (медиана) и 90% квантиль. Вы добавите выходной слой с 3 единицами и обучите модель, используя потери пинбола.
Я нашел эти видео познавательными: Плейлист по количественной оценке неопределенности от DeepFindr
Видеоуроки и связанные с ними блокноты Jupyter охватывают моделирование алгебраической/данных неопределенности (включая два метода, которые я описал выше), а также эпистемическую/модельную неопределенность (например, использование MC dropout).
Ответ или решение
Да, существует несколько моделей, которые могут предсказывать непрерывные данные и одновременно предоставлять уровень уверенности в этих предсказаниях.
Bayesian Neural Networks
Bayesian нейронные сети (BNN) могут быть адаптированы для решения задач регрессии. В отличие от классических нейронных сетей, где модели выдают фиксированные предсказания, BNN позволяют учитывать неопределенность в выходных данных путем вывода распределений. Вы можете реализовать BNN, используя подходы, основанные на варьировании параметров, чтобы модель предсказывала как математическое ожидание ((\mu)), так и стандартное отклонение ((\sigma)) для каждого примера. Затем вы можете использовать отрицательную логарифмическую вероятность (negative log likelihood) в качестве функции потерь для обучения модели. Это значит, что ваша сеть будет учиться минимизировать расхождение, предсказывая значения, которые лучше всего соответствуют наблюдаемым данным, поскольку (\sigma) будет служить мерой неопределенности.
Например, в PyTorch можно использовать библиотеку torch.distributions
для выбора подходящего распределения, например, гауссовского или гамма-распределения, в зависимости от ваших данных. Это позволит вам оценить вероятность вашего предсказания и соответствующим образом визуализировать его.
Квантильная регрессия
Если вы не хотите задавать распределение, можете использовать квантильную регрессию. Это позволяет вашей модели выдавать несколько предсказаний в виде квантилей (например, 10%, 50% и 90%), что обеспечит более полное представление об уверенности ваших предсказаний. Для этого вам нужно будет добавить выходной слой с несколькими нейронами и использовать функцию потерь, называемую квантильной (pinball loss), для обучения модели.
Визуализация неопределенности
В вашей задаче по предсказанию содержания хлорофилла на основе изображений с дронов вы можете использовать предсказанные (\mu) как значения для цветовой карты, а значения (\sigma) для настройки прозрачности (alpha) каждого пикселя. Таким образом, область с высокой неопределенностью будет выглядеть более "размытой", что визуально укажет на уровень уверенности в предсказаниях.
Ресурсы и обучение
Для получения дополнительной информации и практических примеров я рекомендую ознакомиться с методом работы с неопределенностью в нейронных сетях. Одним из хороших ресурсов являются видеоплейлисты и Jupyter-ноутбуки, такие как Uncertainty Quantification playlist by DeepFindr. Также можете обратиться к статье modeling uncertainty with pytorch, которая даст вам представление о том, как реализовать модель, учитывающую неопределенность.
Изучив эти методы и ресурсы, вы сможете создать модель, которая не только предсказывает значения, но и дает информацию о надежности этих предсказаний.