Комментарии 9
Спасибо за статью, хотелось бы узнать, для решения каких практических задач можно применить такие сети?
+1
Mixture Density это один из типов выходного слоя нейронных сетей, если вкратце, с помощью него можно работать с данными в которых смешанно несколько распределений сразу, это его основная особенность. Собственно и задачи на практике могут бать разными, такие, когда природа данных подразумевает, что данные смешанные и не однородные, например речь. пример 1 или пример 2.
0
Данные выглядят слишком хорошими, мало шума, а результат выглядит как переобученная сеть.
0
Пусть даже данные хорошие. Но вот как подбираются pi(x), я из формулок не понял. Чем хуже просто застекать K регрессий или нейронок (да чего хотите) с подбором коэффициентов гридсерчем? Как мне кажется, статья именно про это.
Другое дело, что автор начал с клёвых рассжудений про правдоподобие (про которое практически на каждом углу трубят), а когда дошёл до самого интересного, т.е. MDN, ретировался и не стал ничего писать. Придётся лезть в статьи.
P.s. эффект статьи потерялся
0
Да, наверное следовало больше раскрыть теорию MDN. Правда там уже особо нечего раскрывать, оно все выводится из формулы 5, по сути это loss функция для обучения. pi(x) — не подбирается, оно имеет вид распределения поэтому и получается из softmax функции.
pi(x) — обучается, собственно как и mu(x) как и sigma_sq(x), опять же на основе формулы 5. Реализация ее приведена в коде в статье.
А вот это:
По сути выходные слои для этих трех обучаемых значений.
Ну гридсерч тут не поможет точно. pi(x) — это не параметр который находится гридсерчем, это один из слоев нейронной сети. Да и «просто застекать» не выйдет, ведь стекинг, бустинг и прочее все таки предназначены для других задач. А тут немного другая именно архитектура сетки (ее выходных слоев).
pi = F.softmax(self.pi(x), dim=1)
pi(x) — обучается, собственно как и mu(x) как и sigma_sq(x), опять же на основе формулы 5. Реализация ее приведена в коде в статье.
А вот это:
self.pi = nn.Linear(layer_size, coefs)
self.mu = nn.Linear(layer_size, out_dim*coefs) # mean
self.sigma_sq = nn.Linear(layer_size, coefs) # variance
По сути выходные слои для этих трех обучаемых значений.
Ну гридсерч тут не поможет точно. pi(x) — это не параметр который находится гридсерчем, это один из слоев нейронной сети. Да и «просто застекать» не выйдет, ведь стекинг, бустинг и прочее все таки предназначены для других задач. А тут немного другая именно архитектура сетки (ее выходных слоев).
0
они и есть слишком хорошие, они же сгенерированы из периодической функции синуса + плюс некий разброс или шум. И в данном случае проблема переобучения не важна. Тут речь идет о том как моделировать mixture distributions.
0
В данном случае в задаче регрессий мы положили нормальное распределение на y, а как бы выглядела плотность y если бы мы хотели сделать смесь классификаторов?
0
Дело в том, что плотность y не зависит от классификатора, это задано самой «природой» данных. А классификатор учится эту «природу» моделировать.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Mixture Density Networks