76
правок
Изменения
→Неявный подход
== Вычисление плотности распределения ==
С математической точки зрения основная цель порождающей модели обычно состоит в максимизации функции '''правдоподобия''': для набора данных <tex>X = \{x_i\}</tex> максимизировать <tex>\displaystyle \prod_i p_{model}(x_i;\theta)</tex> по параметрам модели <tex>\theta</tex>, т.е. найти <math>\theta^* = \underset{\theta}{\operatorname{argmax}} \displaystyle \prod_i p_{model}(x_i;\theta)</math>
Чтобы избежать арифметического переполнения снизу<ref>[https://ru.wikipedia.org/wiki/Исчезновение_порядка Исчезновение порядка]</ref> зачастую пользуются свойством логарифма произведения <tex>\log ab = \log a+\log b</tex>. Благодаря моннотоности логарифма, его применение к обоим частям выражения не изменит параметры, при которых достигается максимум. При этом, логарифм от числа близкого к нулю будет числом отрицательным, но в абсолютном значении существенно большим чем исходное число, что делает логарифмические значения вероятностей более удобными для анализа. Что в нашем случае с вероятности очень уместно. Поэтому, мы переписываем нашу формулу с использованием логарифма.
и минимизация этого выражения эквивалентна максимизации того, что выше.
Как правило, модели, где плотность известна явно, делают какие-то дополнительные предположения на структуру этих распределений.
Например, [[Байесовские сети|байесовские сети]] строят распределение из условных распределений <math>\mathrm P(X_1, \ldots, X_n) = \prod_{i=1}^n \mathrm P(X_i \mid \operatorname{parents}(X_i)).</math>
Можно даже и вовсе никаких предположений не делать: любое распределение всегда раскладывается как <tex>p(x) = \displaystyle \prod_{i} p(x_i \mid x_1, {{...}}, x_{i-1})</tex>(Простая факторизующаяся плотность). Так представляется модель в FVBN(fully visible belief networks)<ref>[https://mitpress.mit.edu/books/graphical-models-machine-learning-and-digital-communication Frey B. Graphical Models for Machine Learning and Digital Communication, Cambridge, MA: MIT Press, 1998.]</ref>, идея которых состоит в том, что с одномерными распределениями мы уж как-нибудь разберемся - в ранних работах их представляли классическими моделями. А сейчас мы можем их промоделировать последовательно [[Глубокое обучение|глубокими сетями]], получится модель, которая сможет последовательно породить <tex>х</tex> компонент за компонентом, каждый раз для порождения <tex>x_i</tex> опираясь на уже порожденные <tex>x_1, {{...}}, x_{i-1})</tex>. Если хочется явно выразить совсем сложные распределения в порождающих моделях, их приходится приближать более простыми, которые уже, в свою очередь, могут быть выражены явно. Для этого обычно используются [[Вариационный автокодировщик|вариационные методы]]. ===Неявный подход===Основная альтернатива всему этому состоит в том, чтобы использовать ''неявные'' порождающие модели, в которых мы не пытаемся получить функцию, подсчитывающую плотность нужного распределения в каждой точке, а просто моделируем то, что нам от этой модели нужно. Например, если мы хотим просто научиться порождать фотографии милых котиков, нам не так важно иметь явную функцию плотности <tex>p(x)</tex>, которая могла бы сказать, насколько вероятно, что перед нами котик, - вполне достаточно просто уметь генерировать новые <tex>x \sim p(x)</tex>. Сэмплирование из сложных многомерных распределений делается с помощью МСМС<ref>[https://en.wikipedia.org/wiki/Markov_chain_Monte_Carlo Markov chain Monte Carlo(МСМС)]</ref>-методов: попробуем построить марковскую цепь, которая описывает случайное блуждание под графиком плотности распределения. Если достаточно долго блуждать под графиком плотности <tex>p(x)</tex>, можно будет считать, что полученная точка представляет собой случайную точку, взятую по распределению <tex>p(x)</tex>. Примером такого моделирования глубокой сетью являются ''порождающие стохастические сети''(англ. ''Generative Stochastic Networks'')
== Глубокие порождающие модели на основе нейронных сетей ==
*[https://developers.google.com/machine-learning/gan/generative Google courses с примерами на понимание]
*[https://arxiv.org/abs/1701.00160 NIPS 2016 Tutorial: Generative Adversarial Networks(Ian Goodfellow, 2016)]
* Николенко С., Кадурин А., Архангельская Е. Глубокое обучение. СПб.: Питер, 2018.
[[Категория: Машинное обучение]]
[[Категория: Порождающие модели]]