Изменения

Перейти к: навигация, поиск

Порождающие модели

5590 байт добавлено, 23:41, 17 февраля 2020
Таксономия порождающих моделей
[[Файл:Generative_v_discriminative.png|420px|thumb|right|Порождающая модель пытается генерировать рукописные 0 и 1, для этого моделирует распределение по всему пространству данных. Напротив, дискриминативная модель старается разделить данные, без необходимости точно моделировать, как объекты размещаются по обе стороны от линии.]]
'''Порождающие модели''' (англ. ''generative model'') {{---}} это класс моделей, которые обучают ''совместное'' распределение<ref> [https://en.wikipedia.org/wiki/Joint_probability_distribution Joint probability distribution]</ref> данных <tex>p(x, y)</tex>; отсюда легко получить ''условное'' распределение <tex>p(y | \mid x)={p(x, y)\over p(x)}</tex>, но совместное даёт больше информации и его можно использовать, например, для ''генерации'' новых фотографий животных, которые выглядят как настоящие животные.
С другой стороны, дискриминативная модель (англ. ''discriminative model'')<ref> [https://en.wikipedia.org/wiki/Discriminative_model Discriminative model]</ref> обучает только ''условное'' распределение и может, например, отличить собаку от кошки.
Можно использовать некоторые эмпирические правила для генерации новых объектов, не используя машинного обучения.
Требуется чтобы новые объекты были правдоподобными в своей областиМы хотим научиться создавать правдоподобный объект относительно некоторой скрытой структуры исходных объектов. Новое изображение человека должно быть правдоподобнымДавайте изучим распределение по ним, как изображение, но также человек на нём должен быть правдоподобным как человека затем просто будем сэмплировать новый объект из этого распределения. Значит эта задача относится к классу задач [[Общие понятия#Обучение без учителя (англ. Unsupervised learning)|обучения без учителя]].
Мы хотим научиться создавать правдоподобный объект относительно некоторой скрытой структуры исходных объектов. Давайте изучим распределение по ним, а затем просто будем сэмплировать новый объект из этого распределения. Значит эта задача относится к классу задач Порождающая модель иногда позволяет использовать обучение [[Общие понятия#Обучение без с частичным привлечением учителя (англ. Unsupervised Semi-supervised learning)|обучения без с частичным привлечением учителя]]. Если вы хотите отличить кошек от собак на фотографиях, у вас может быть не так уж много хорошо размеченных данных, на которых кошки и со­баки старательно отмечены вручную. Но в любом случае львиная доля задачи со­стоит в том, чтобы вообще понять, чем разумные фотографии отличаются от слу­чайного шума в миллионах пикселов. Иначе говоря, распределение <tex>p(y \mid x)</tex>, в кото­ром <tex>y</tex> - это один бит «котик ли это?», а <tex>x</tex> - целая фотография, может быть проще обучить, если сначала узнать что-то о распределении <tex>p(x)</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>\theta^* = \underset{\theta}{\operatorname{argmax}} \log \displaystyle \prod_i p_{model}(x_i;\theta) = \underset{\theta}{\operatorname{argmax}} \displaystyle \sum_i \log p_{model}(x_i;\theta) </math>
 
Важен и другой взгляд на то же самое: максимизация правдоподобия эквивалентна минимизации расстояния Кульбака-Лейблера<ref>[https://ru.wikipedia.org/wiki/Расстояние_Кульбака_—_Лейблера Расстояние Кульбака-Лейблера]</ref> между распределением <tex>р</tex>, которое получается из нашей модели, и распределением <tex>\hat{p}_{data}</tex> — эмпирическим распределе­нием данных. Это эмпирическое распределение попросту полностью сосредоточе­но в точках из набора данных и равномерно распределено по ним, так что:
 
<tex>KL(\hat{p}_{data}(x), p(x; \theta)) = \int \hat{p}_{data}(x) \log p(x; \theta) = \displaystyle \sum_i \hat{p}_{data}(x_i) \log p(x_i; \theta)</tex>
 
и минимизация этого выражения эквивалентна максимизации того, что выше.
 
===Таксономия порождающих моделей===
[[Файл:Tax2.jpg|500px|thumb|right]]
С математической точки зрения основная цель порождающей Генеративные модели различаются как раз тем, как именно они строят рас­пределение <tex>p(x; \theta)</tex>. Можно строить это распределение ''явно'', делая вероятностные предположения, которые обычно состоит сводятся к тому, что общее распределение <tex>p(x; \theta)</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_p(x) = \displaystyle \prod_{modeli}</tex>p(x_i \mid x_1, описывающее объекты и генерировать данные из него* Неявный: получить некоторое распределение{{...}}, оценить его близость с <tex>p_x_{modeli-1})</tex> через дивергенцию Кульбака-Лейблера(Простая факторизующаяся плотность). Так представляется модель в FVBN(fully visible belief net­works)<ref>[https://rumitpress.wikipediamit.orgedu/wikibooks/Расстояние_Кульбака_—_Лейблера Расстояние Кульбака—Лейблера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>.
== Глубокие порождающие модели на основе нейронных сетей ==
76
правок

Навигация