Mixture Density Neural Network - нарушение предположений, реализация, анализ и приложения, использующие Tensorflow.

Введение

Прогнозирование и измерение неопределенности вокруг него для оценки модели очень важно как по статистическим, так и по коммерческим причинам. По сути, для контролируемой модели у нас есть предикторы (x) и цель (y), и мы пытаемся предсказать цель, используя предиктор, и количественно оценить, насколько хорошо мы предсказали. Обычно это делается путем минимизации суммы квадратов или функции кросс-энтропийных ошибок, которая выводит приблизительные средние по каждому предиктору в случае непрерывного предиктора или апостериорных вероятностей для категориальных переменных.

Пример бизнес-модели

Давайте рассмотрим компанию электронной коммерции (ABC), которая продает наручные часы и имеет типичную бизнес-модель Amazon, когда продавцы перечисляют товары для продажи, а покупатели посещают их в магазин. ABC хочет смоделировать листинговые цены продуктов, чтобы делать рекомендательные цены, когда другой продавец пытается указать аналогичные продукты. Ниже представлено распределение листинговых цен на часы цифрового типа.

Если посмотреть на распространение, цифровые часы можно продать от 20 до 2500 долларов. Есть продавцы, которые продают часы в 3-х разных ценовых диапазонах. 20–500 долларов, 700–1500 долларов, 1600–2500 долларов. Этот тип данных нарушает одно из предположений унимодальной нормальности линейной регрессии. Однако в практическом сценарии мы не знаем основного распределения, поскольку эмпирическое распределение по-прежнему является нормальным распределением.

Подбор модели и нарушение предположений

Если мы подгоним модель линейной регрессии с типом часов в качестве только предиктора, она будет предсказывать 1133 $ для часов цифрового типа путем завышения прогноза для часов 1-го типа и занижения. для 3-го типа часов. Стандартное отклонение - это ошибка в прогнозе, которая составила бы 709 $, что сделало бы эту модель полной неудачей. Если бы мы сгенерировали случайные выборки с этим прогнозируемым средним (mu) и стандартным отклонением (сигма), это также сгенерировало бы цены между пустыми регионами. Отрицательная цена тоже! [Примечание. Мы преобразуем цену в журнал перед подгонкой модели, поскольку цена обычно не распределяется, но для простоты предположим, что это так]. Даже подгонка нейронной сети к этому типу данных является полной моделью отказа, поскольку она по-прежнему пытается минимизировать сумму квадратов функции ошибок. Что делать, если стандартные отклонения разные для разных типов часов? Рассмотрим нижеприведенный сценарий скрипки:

Каждый тип представляет собой бимодальную модель распределения с разными дисперсиями на разных уровнях. Разница между типами часов меняется в зависимости от категорий. Что произойдет с прогнозом и стандартным отклонением ошибки, если мы подгоним нейронную сеть или линейную регрессию к этим данным, используя только тип наблюдения в качестве предиктора? Соответствуют ли эти данные всем предположениям о регрессии?

По сути, когда мы минимизируем линейную функцию или сумму квадратов, мы минимизируем квадрат ошибки (μ (x, Θ) - y) ² выход линейной функции μ, заданной x, и параметры (Θ) функции. Это единственный μ, который зависит от x и отбрасывает остальную часть параметра (стандартное отклонение), также известного как гомоскедастичность.

Можно ли узнать параметры мультимодального распределения по типу часов? Да, с MDN

Модель гауссовой смеси и сеть плотности смеси (MDN)

Я знаю, что многие люди хорошо знакомы с GMM, но я хотел бы описать его, чтобы противопоставить его MDN, поскольку они очень похожи. GMM - это алгоритм обучения без учителя с максимизацией ожидания в качестве K-средних, за исключением параметра обучения предполагаемого распределения. K-средство не работает в случае перекрытия кластеров, в то время как GMM может выполнять сегментацию перекрывающегося кластера, изучая параметры нижележащего распределения. Для приведенного выше примера мы можем получить параметры базового трехмодального распределения, применив GMM. Теоретически GMM вычисляет n компонентов (кластеров) и связанные с ними вероятности членства в mu, sigma и кластере путем оптимизации по заданному распределению вероятностей, которое определяется следующим образом:

Где K - количество кластеров, а phi - скрытые вероятности кластера. Используя алгоритм EM, мы можем узнать phi, mu и sigma.

В нашем примере ABC мы вычисляем 3 mus и 3 сигмы с 1500 * 3 [количество образцов * количество кластеров] phi. Для понимания я обучил GMM на приведенном выше наборе данных и проверил, близки ли кластерные mus и sigmas к истинным mu и сигналам.

Это создает основу для сети плотности смеси (MDN). Мы можем узнать параметры ядра модели в зависимости от предикторов. Для этого мы ограничим наше ядро ​​гауссовым ядром. MDN оптимизирует ту же функцию правдоподобия, что и GMM, и выводит mu, sigma и phi для каждой выборки в нашем наборе данных.

Не вдаваясь в дальнейшие математические подробности, перейдем к обучению модели. Кристофер М. Бишоп объяснил лучше, чем я могу!

Создание и обучение MDN

Создание данных

Мы попытаемся сгенерировать данные с отношениями ниже x и y

x_ = sin(0.5 * x) * 3.0+ x * 0.5)
f1(x) = N(x_, square(x_)/15) + N(0,1) # Cluster 1 y
f2(x) = N(f1(x) + 12, square(x)/100) + N(0,1) # Cluster 2 y
This equation generates data with 2 distinct cluster and x dependent variance.

Установка MLP

Полностью подключенная нейронная сеть соответствовала данным с помощью функции потерь Sum-of-Squared, и на основе прогноза были сгенерированы случайные выборки. Как указывалось ранее, прогнозы являются средними, а стандартное отклонение рассчитывается по следующей формуле

где ошибка (y-model_predictions)

Нормальные Случайные выборки были созданы на основе среднего и стандартного отклонения.

Это проблема, заключающаяся в том, что модель делает прогноз в пустой области, занижая прогноз для 50% данных и завышая прогноз для остальных 50%. Поскольку средства и сигмы зависят от данных, давайте попробуем использовать MDN.

Создание MDN

Первая часть эквивалентна тому, что кто-то создал бы нейронную сеть для любой другой проблемы. Здесь мы создали 4 скрытых слоя NN с (50, 20, 20, 20) узлов соответственно. Я использую активацию Tanh, но здесь подойдет любая другая активация, поскольку функция, которую мы пытаемся изучить, является простой функцией и не будет проблемой для любой другой функции активации.

Затем мы создаем вектор размера K для каждого mu, sigma и phi. В нашем случае K равно 2

  • Наши цели имеют значения от -ve до + ve, поэтому мы не будем использовать функцию активации для оценки среднего (мю).
  • Стандартное отклонение (сигма) не может быть отрицательным, поэтому мы можем использовать softplus, elu, relu или любой другой вариант, если он выводит значение ›0 и не ограничивает вывод, как с сигмоидом.
  • Вероятности апостериорного присвоения кластера (Pi) вычисляются по всем k. Поскольку это взаимоисключающие события, мы используем функцию активации softmax.

Определение функции Loss можно выполнить с помощью встроенной функции TensorFlow-вероятность (tfp.distributions. MixtureSameFamily). Однако, если вы действительно хотите вычислить убыток, мы все равно можем сделать это с помощью приведенной ниже формулы.

Убыток рассчитывается с использованием того же уравнения правдоподобия GMM, упомянутого выше. Сначала вычислите mu и sigma для каждого компонента и вычислите апостериорную вероятность. Затем умножьте на соответствующий компонент phi и просуммируйте все апостериорные вероятности, чтобы получить правдоподобие. Затем зарегистрируйте вероятность и просуммируйте их по всем выборкам, чтобы получить логарифмическую вероятность. Тогда средняя потеря - это среднее значение отрицательной логарифмической вероятности, которое далее передается оптимизатору. Если вы хотите сохранить шаг и позволить TensorFlow позаботиться об этом, мы можем использовать TensorFlow-possible.distributions. MixtureSameFamily. Вероятность тензорного потока широко используется специалистами по обработке данных, исследователями машинного обучения и статистиками для вероятностного моделирования.

tfp.distributionsCategorical определяет категориальный убыток. Поскольку мы ограничиваемся нормальным распределением, мы можем определить его с помощью вероятности TensorFlow. Вместо этого мы могли бы определить уравнение нормального распределения!. MixtureSameFamily преобразует векторы mus и sigma в ковариационную матрицу для распределения Mixture. Затем используйте log_prob, чтобы вернуть log_likelihood и, наконец, минимизировать отрицательную логарифмическую вероятность.

Можно использовать любой оптимизатор, но я решил вам RMSProp, так как он все же лучше, чем оптимизатор стохастического градиентного спуска.

Наконец, мы обучаем нашу сеть, генерируем случайные выборки из распределения смеси, а также смотрим на прогнозируемое среднее значение (mu), стандартное отклонение (сигма) и вероятности кластера (phi).

Изучив MDN с двумя компонентами, мы получили именно то, на что надеялись. Теперь оценки средних не находятся в пустых областях и правильно оценивают бимодальное распределение средних значений на x.

Чтобы посмотреть на дисперсию, мы можем сгенерировать случайные выборки и убедиться, что они принадлежат соответствующим кластерам.

По сравнению с предсказаниями модели MLP, мы можем видеть два отдельных кластера, перекрывающих основную истину, тем самым точно оценивая параметры бимодального распределения, зависящие от x.

Вероятности кластера (phi) очень близки к 50% (46% -54% - это дисперсия в параметрах модели, может отличаться в зависимости от обучения), поскольку я сгенерировал одинаковое количество выборок для каждого кластера для каждого x, то есть P (кластер = 1 | x) = P (кластер = 2 | x). Если бы это было не так, мы могли бы увидеть другое распределение вероятностей кластерного назначения.

Вывод

В нашем предыдущем примере ABC компания может установить MDN и получить истинное представление о распределении цен. Если мы не знаем, что наша цель - многомодальное распределение, вероятности кластера (phi) могут дать хорошее понимание этого. На практике обучение MDN может занять очень много времени и проблем, поскольку предположения о распределениях могут не соответствовать действительности. MDN можно использовать для изучения смешанного распределения разных семейств, но ваша модель так же верна, как и ваши предположения!

В этом простом сообщении в блоге я продемонстрировал недостаток функции суммы квадратов с преимуществом применения MDN для измерения неопределенности оценок параметров и того, насколько они важны для бизнес-задач. Учитывая простую архитектуру и простоту реализации (спасибо TF), хотелось бы услышать мысли читателя!

Учебная тетрадь:



Ссылки:

Документ MDN- https://github.com/dwipam/MDN/blob/master/MDN.pdf TF MixtureSame Family- https://www.tensorflow.org/probability/api_docs/python/tfp/distributions/MixtureSameFamily Блог Шакеда- https://engineering.taboola.com/predicting-probability-distributions/
GMM- https://en.wikipedia.org/wiki/GMM