Что в генеративной модели?

Прежде чем мы даже подумаем о том, чтобы начать говорить о Генеративных состязательных сетях (GAN), стоит задать вопрос: что же находится в генеративной модели? Почему мы вообще хотим иметь такую ​​вещь? Какая цель? Эти вопросы могут помочь в нашем мыслительном процессе лучше взаимодействовать с GAN.

Так зачем нам генеративная модель? Что ж, дело в названии! Мы хотим что-то произвести. Но что мы хотим произвести? Обычно мы хотим сгенерировать данные (я знаю, не очень конкретные). Более того, вполне вероятно, что мы хотим сгенерировать данные, которые раньше никогда не видели, но все же вписываются в какое-то распределение данных (то есть некоторый предопределенный набор данных, который мы уже отложили).

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

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

Хорошей мерой расстояния между распределениями является Дивергенция Кульбака-Лейблера, и показано, что максимизация логарифмического правдоподобия эквивалентна минимизации этого расстояния. Взяв нашу параметризованную генеративную модель и минимизируя расстояние между ней и фактическим распределением данных, мы создаем хорошую генеративную модель. Это также подводит нас к разветвлению двух типов генеративных моделей.

Генеративные модели явного распределения

Генеративная модель явного распределения предполагает явно определенное распределение генеративной модели. Затем он уточняет эту явно определенную параметризованную оценку посредством обучения на выборках данных. Примером генеративной модели явного распределения является Вариационный автокодировщик (VAE). Для VAE требуется явно предполагаемое априорное распределение и распределение правдоподобия. Они используют эти два компонента, чтобы придумать вариационное приближение, с помощью которого можно оценить, как они работают. Из-за этих потребностей и этого компонента VAE должны быть явно распределены.

Генеративные модели неявного распределения

Как и вы, возможно, уже собрали, неявно распределенные генеративные модели не требуют явного определения их распределения моделей. Вместо этого эти модели обучаются путем косвенной выборки данных из их параметризованного распределения. И, как вы, возможно, уже догадались, именно этим занимается GAN.

Ну, как именно он это делает? Давайте немного погрузимся в GAN, а затем начнем рисовать эту картину.

Понимание GAN на высоком уровне

Генеративные состязательные сети состоят из трех компонентов. Мы коснулись генеративного аспекта, и сетевой аспект не требует пояснений. Но как насчет состязательной части?

Итак, сеть GAN состоит из двух компонентов: генератора (G) и дискриминатора (D). Эти два компонента объединяются в сеть и работают как противники, повышая производительность друг друга.

Генератор

Генератор отвечает за создание поддельных примеров данных. Он принимает на входе некоторую скрытую переменную (которую мы будем называть z) и выводит данные той же формы, что и данные в исходном наборе данных.

Скрытые переменные - это скрытые переменные. Когда мы говорим о GAN, у нас есть понятие «скрытого пространства», из которого мы можем производить выборку. Мы можем непрерывно перемещаться по этому скрытому пространству, которое, если у вас есть хорошо обученный GAN, будет иметь существенные (и часто в некоторой степени понятные эффекты) на выходе.

Если наша скрытая переменная - z, а наша целевая переменная - x, мы можем думать о генераторе сети как об обучении функции, которая отображает z (скрытое пространство) в x (надеюсь, реальное распределение данных).

Дискриминатор

Роль дискриминатора - различать. Он отвечает за сбор списка образцов и прогнозирование того, является ли данный образец реальным или поддельным. Дискриминатор выдаст более высокую вероятность, если считает, что образец реален.

Мы можем рассматривать наш дискриминатор как своего рода «детектор чуши».

Состязательная конкуренция

Эти два компонента объединяются и сражаются друг с другом. Генератор и дискриминатор противостоят друг другу, пытаясь максимизировать противоположные цели: генератор хочет подтолкнуть, чтобы создать образцы, которые выглядят все более и более реальными, а дискриминатор хочет всегда правильно классифицировать, откуда взят образец.

Тот факт, что эти цели прямо противоположны друг другу, является причиной того, что GAN получают состязательную часть своего имени.

Кто не любит хорошую метафору, чтобы научиться понимать концепцию?

Художественная подделка

Когда я впервые узнал о GAN, моей любимой метафорой была метафора фальсификатора и критика. В этой метафоре наш генератор - преступник, который пытается подделать искусство, тогда как наш дискриминатор - искусствовед, который, как предполагается, способен правильно определить, является ли произведение поддельным или подлинным.

Эти двое движутся вперед и назад, прямо противоположно друг другу. Пытаются друг друга превзойти, потому что от этого зависит их работа.

Фальшивые деньги

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

Может быть, вначале преступник очень плохой. Они входят и пытаются передать стажеру лист бумаги с нарисованной мелками долларовой купюрой. Очевидно, это фальшивый доллар. Но, возможно, стажер тоже плохо справляется со своей работой и изо всех сил пытается понять, действительно ли это подделка. Оба они многому научатся из своего первого взаимодействия. Приходите на следующий день, когда придет преступник, их фальшивые деньги будет немного сложнее определить, фальшивые они или нет.

Изо дня в день, занимаясь этим, эти двое ходят туда-сюда и становятся действительно хорошими в своей работе. Однако в определенный момент может наступить день, когда эти двое достигнут своего рода равновесия. Оттуда фальшивые доллары преступника становятся настолько реалистичными, что даже опытный эксперт не может даже понять, фальшивые они или настоящие.

В этот день увольняют стажера банка.

Это также день, когда мы сможем использовать этого нашего преступника и разбогатеть!

Попугай

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

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

Может быть, вначале попугай действительно плохо имитирует наш голос. Но день за днем ​​практики наш попугай может развить навыки, чтобы идеально отражать наш голос. К этому моменту мы научили нашего попугая говорить точно так же, как мы, и можем прославиться в Интернете.

Счет!

Математика чудовища

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

Мы называем это уравнение нашим минимаксным уравнением, потому что мы пытаемся совместно оптимизировать две параметризованные сети, G и D, чтобы найти равновесие между ними. Мы хотим максимизировать путаницу с D и свести к минимуму отказы G. После решения наше параметризованное, неявное, генерирующее распределение данных должно достаточно хорошо соответствовать лежащему в основе исходному распределению данных.

Чтобы еще больше разбить части нашего уравнения, давайте проанализируем его и подумаем еще немного. Со стороны D он хочет максимизировать это уравнение. Он хочет, когда поступает реальный образец, максимизировать его выход, а когда приходит поддельный образец, минимизировать его. По сути, именно здесь и выпадает правая половина уравнения. С другой стороны, G пытается обманом заставить D максимизировать производительность, когда ему вручают поддельный образец. Вот почему D пытается максимизировать, а G пытается минимизировать.

И из-за минимизации / максимизации мы получаем термин минимакс.

Теперь, если предположить, что G и D хорошо параметризованы и, следовательно, обладают достаточной способностью к обучению, это минимаксное уравнение может помочь нам достичь равновесия по Нэшу между ними. Это идеальный вариант.

Как этого добиться?

Просто: мы просто повторяем туда и обратно.

Просто шучу. Это не совсем просто. Но обрисовать это можно довольно просто.

Для начала мы сначала обучим D, чтобы он был оптимальным классификатором на фиксированной версии G. Оттуда мы исправляем D и обучаем G, чтобы лучше всего обмануть фиксированный D. Выполняя итерацию назад и вперед, мы можем оптимизировать наше минимаксное уравнение до точка, где D больше не может различать настоящие и поддельные образцы, потому что наше генеративное распределение данных более или менее неотличимо от фактического распределения данных. На этом этапе D будет выводить 50% вероятность для каждого обнаруженного образца.

Заключение

Итак, у нас есть введение в GAN. Но, мальчик, это еще не все! Мы только начали поверхностно и коснулись всего на высоком уровне. Однако впереди еще много тонкостей. Не все так просто, как мы сейчас обрисовали, и обучение GAN в реальной среде на самом деле может быть очень сложным. По этой причине мы более подробно рассмотрим компоненты GAN, проблемы, открытия, варианты и многое другое в следующих публикациях. А пока просто наслаждайтесь тем, что вы находитесь на пути к пониманию волшебного мира генеративных моделей и GAN!

Если вам понравилась эта статья или вы нашли ее полезной, я буду любить вас вечно, если вы передадите мне длинный доллар или два, чтобы помочь финансировать мое образование и исследования в области машинного обучения! Каждый доллар помогает мне стать ближе, и я бесконечно благодарен за это.

И следите за новостями, чтобы увидеть больше блогов GAN в ближайшем будущем!

P.S. Большое спасибо авторам книги Как работают генеративные состязательные сети и их варианты: обзор GAN, которые вдохновили меня и помогли лучше понять, как работают GAN. Без их статьи эта серия была бы невозможна.

Первоначально опубликовано на hunterheidenreich.com.