Порождающие модели — различия между версиями
PaulKh (обсуждение | вклад) (→Таксономия порождающих моделей) |
PaulKh (обсуждение | вклад) (→Таксономия порождающих моделей) |
||
Строка 40: | Строка 40: | ||
Так представляется модель в 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>. | Так представляется модель в 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>. | Основная альтернатива всему этому состоит в том, чтобы использовать ''неявные'' порождающие модели, в которых мы не пытаемся получить функцию, подсчитывающую плотность нужного распределения в каждой точке, а просто моделируем то, что нам от этой модели нужно. Например, если мы хотим просто научиться порождать фотографии милых котиков, нам не так важно иметь явную функцию плотности <tex>p(x)</tex>, которая могла бы сказать, насколько вероятно, что перед нами котик, - вполне достаточно просто уметь генерировать новые <tex>x \sim p(x)</tex>. | ||
+ | |||
+ | В классическом байесовском выводе сэмплирование из сложных многомерных распределений делается с помощью марковских цепей: попробуем построить марковскую цепь, которая описывает случайное блуждание под графиком плотности распределения; если достаточно долго блуждать под графиком плотности <tex>p(x)</tex>, можно будет считать, что полученная точка представляет собой случайную точку, взятую по распределению р(х). Такой подход называется МСМС<ref>[https://en.wikipedia.org/wiki/Markov_chain_Monte_Carlo Markov chain Monte Carlo(МСМС)]</ref>-методами. Попытки моделировать эту марковскую цепь глубокой сетью известны Порождающие стохастические сети(англ. ''Generative Stochastic Networks'') | ||
== Глубокие порождающие модели на основе нейронных сетей == | == Глубокие порождающие модели на основе нейронных сетей == |
Версия 00:24, 18 февраля 2020
Порождающие модели (англ. generative model) — это класс моделей, которые обучают совместное распределение[1] данных ; отсюда легко получить условное распределение , но совместное даёт больше информации и его можно использовать, например, для генерации новых фотографий животных, которые выглядят как настоящие животные.
С другой стороны, дискриминативная модель (англ. discriminative model)[2] обучает только условное распределение и может, например, отличить собаку от кошки.
Содержание
Классификация задачи
Можно использовать некоторые эмпирические правила для генерации новых объектов, не используя машинного обучения.
Мы хотим научиться создавать правдоподобный объект относительно некоторой скрытой структуры исходных объектов. Давайте изучим распределение по ним, а затем просто будем сэмплировать новый объект из этого распределения. Значит эта задача относится к классу задач обучения без учителя.
Порождающая модель иногда позволяет использовать обучение с частичным привлечением учителя. Если вы хотите отличить кошек от собак на фотографиях, у вас может быть не так уж много хорошо размеченных данных, на которых кошки и собаки старательно отмечены вручную. Но в любом случае львиная доля задачи состоит в том, чтобы вообще понять, чем разумные фотографии отличаются от случайного шума в миллионах пикселов. Иначе говоря, распределение , в котором - это один бит «котик ли это?», а - целая фотография, может быть проще обучить, если сначала узнать что-то о распределении в целом.
Вычисление плотности распределения
С математической точки зрения основная цель порождающей модели обычно состоит в максимизации функции правдоподобия: для набора данных максимизировать
по параметрам модели , т.е. найтиПотеря порядка
Чтобы избежать арифметического переполнения снизу[3] зачастую пользуются свойством логарифма произведения . Благодаря моннотоности логарифма, его применение к обоим частям выражения не изменит параметры, при которых достигается максимум. При этом, логарифм от числа близкого к нулю будет числом отрицательным, но в абсолютном значении существенно большим чем исходное число, что делает логарифмические значения вероятностей более удобными для анализа. Что в нашем случае с вероятности очень уместно. Поэтому, мы переписываем нашу формулу с использованием логарифма.
Важен и другой взгляд на то же самое: максимизация правдоподобия эквивалентна минимизации расстояния Кульбака-Лейблера[4] между распределением , которое получается из нашей модели, и распределением — эмпирическим распределением данных. Это эмпирическое распределение попросту полностью сосредоточено в точках из набора данных и равномерно распределено по ним, так что:
и минимизация этого выражения эквивалентна максимизации того, что выше.
Таксономия порождающих моделей
Генеративные модели различаются как раз тем, как именно они строят распределение
. Можно строить это распределение явно, делая вероятностные предположения, которые обычно сводятся к тому, что общее распределение выражается в виде произведения тех или иных распределений.Как правило, модели, где плотность известна явно, делают какие-то дополнительные предположения на структуру этих распределений.
Например, байесовские сети строят распределение из условных распределений
Можно даже и вовсе никаких предположений не делать: любое распределение всегда раскладывается как
(Простая факторизующаяся плотность)
Так представляется модель в FVBN(fully visible belief networks)[5], идея которых состоит в том, что с одномерными распределениями мы уж как-нибудь разберемся - в ранних работах их представляли классическими моделями. А сейчас мы можем их промоделировать последовательно глубокими сетями, получится модель, которая сможет последовательно породить компонент за компонентом, каждый раз для порождения опираясь на уже порожденные .
Если хочется явно выразить совсем сложные распределения в порождающих моделях, их приходится приближать более простыми, которые уже, в свою очередь, могут быть выражены явно. Для этого обычно используются вариационные методы.
Основная альтернатива всему этому состоит в том, чтобы использовать неявные порождающие модели, в которых мы не пытаемся получить функцию, подсчитывающую плотность нужного распределения в каждой точке, а просто моделируем то, что нам от этой модели нужно. Например, если мы хотим просто научиться порождать фотографии милых котиков, нам не так важно иметь явную функцию плотности
, которая могла бы сказать, насколько вероятно, что перед нами котик, - вполне достаточно просто уметь генерировать новые .В классическом байесовском выводе сэмплирование из сложных многомерных распределений делается с помощью марковских цепей: попробуем построить марковскую цепь, которая описывает случайное блуждание под графиком плотности распределения; если достаточно долго блуждать под графиком плотности [6]-методами. Попытки моделировать эту марковскую цепь глубокой сетью известны Порождающие стохастические сети(англ. Generative Stochastic Networks)
, можно будет считать, что полученная точка представляет собой случайную точку, взятую по распределению р(х). Такой подход называется МСМСГлубокие порождающие модели на основе нейронных сетей
См. также
Примечания
Источники информации
- Generative_model
- Google courses с примерами на понимание
- NIPS 2016 Tutorial: Generative Adversarial Networks(Ian Goodfellow, 2016)
- Николенко С., Кадурин А., Архангельская Е. Глубокое обучение. СПб.: Питер, 2018.