Генеративные состязательные сети (GAN) были представлены в статье Яна Гудфеллоу и других исследователей из Монреальского университета еще в 2014 году. Когда об этом стало известно, все в сообществе ИИ и технических специалистов были полностью потрясены разработкой такой модели. .

Даже директор по исследованиям искусственного интеллекта Facebook назвал это «самой интересной идеей в области машинного обучения за последние 10 лет».

Так что же такого особенного в этих вещах?

Сети GAN позволяют машинам имитировать данные, но в некотором смысле сохраняют оригинальность за счет рандомизации генерации контента. Довольно аккуратно, правда?

Это подводит нас сюда. Я хорошо рассмотрел эту концепцию и подумал про себя:

«Давай повеселимся здесь».

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

Генеративные и дискриминационные алгоритмы

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

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

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

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

Для этого во время обратного распространения ошибки веса генератора будут обновляться с использованием градиентного подъема, чтобы максимизировать ошибку, в то время как дискриминатор будет использовать градиентный спуск для ее минимизации. Обратное распространение по существу корректирует каждый вес в правильном направлении, вычисляя влияние веса на вывод, практически так же, как вывод изменится, если вы измените вес.

Но как это работает?

Дискриминатор создан таким образом, что он в основном решает задачу контролируемой классификации изображений (в данном случае собака или не собака). Фильтры, изученные GAN, можно использовать для рисования определенных объектов на сгенерированном изображении. Генератор содержит векторизованные свойства, которые могут изучать очень сложные представления объектов.

Есть хороший трехэтапный процесс

  1. Генератор принимает случайные числа и возвращает изображение.
  2. Дискриминатор смотрит на сгенерированное изображение вместе с другими реальными изображениями.
  3. На основе анализа изображения дискриминатором, он дает число от 0 до 1, где 1 указывает на самое реальное, а 0 указывает на абсолютно фальшивую.

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

Популярное сравнение описывает эту модель как игру полицейских и грабителей или, что более реалистично, полицейских и фальшивомонетчиков. «Практика делает лучше», и это относится как к полицейскому, так и к фальшивомонетчику. Всякий раз, когда фальшивомонетчик пытается заработать фальшивые деньги, полицейский должен обнаружить фальшивые деньги, в то время как фальшивомонетчик одновременно узнает, что он сделал не так. Полицейский, очевидно, будет Дискриминатором, а фальшивомонетчик - Генератором.

Генератор

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

  1. Пример случайного шума.

Случайный шум - это то, что отличает сгенерированные изображения друг от друга, а также делает изображения оригинальными.

2. Создайте выходной сигнал генератора из дискретизированного случайного шума.

3. Получите классификацию дискриминатора «Настоящая» или «Поддельная» для выхода генератора.

4. Рассчитайте потери по классификации дискриминатора.

Функция потерь отображает значения одной или нескольких переменных в действительное число, таким образом представляя некоторую «стоимость», связанную с событием. Задача оптимизации стремится минимизировать функцию потерь, как в этом случае

5. Обратное распространение через дискриминатор и генератор для получения градиентов.

6. Используйте градиенты, чтобы изменить только веса генератора.

Учитесь на том, что не сработало, и применяйте это.

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

То же самое и с обучением дискриминатору, этот материал на самом деле тем сложнее, чем глубже вы в него вникаете. В упрощенном виде это выглядит примерно так:

  1. Классифицируйте настоящие и поддельные данные из данного набора
  2. Наказывать за неправильную классификацию реального экземпляра как поддельного или поддельного как реального
  3. Обновляет веса через обратное распространение

Как вы это сделали?

Так что я действительно получил немало вдохновения из самого оригинального документа GAN, написанного Яном Гудфеллоу, и просто увидел его потенциал. Это действительно помогло просмотреть несколько руководств в Интернете (я свяжусь с ними ниже), они прошли это довольно хорошо, и мне стало намного легче усваивать контент. В основном я использовал учебные пособия по TensorFlow, чтобы мне помочь.

Просто покажите мне основной код!

Черт возьми, вот и все.

Ожидание от обучения состоит в том, что наша сеть Генераторов должна начать производить данные, которые следует квадратичному распределению. Хотя мы начинаем с очень простого распределения данных, этот подход можно легко расширить для генерации данных из гораздо более сложного набора данных.

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

Функция Leaky Relu Функция активации здесь является сигмоидальной, и она будет получать выборки из R или G и выводит один скаляр от 0 до 1, интерпретируемый как «поддельный» против «реального».

Генератор

Генератор предназначен для отображения и размещения пространственных векторов и пространства данных.

Поскольку наши данные являются изображениями, преобразование z в пространство данных в конечном итоге означает создание изображения RGB того же размера, что и обучающие изображения (т. Е. 3x64x64). Эти слои помогают с течением градиентов во время тренировки.

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

Выводы:

  • Создать GAN намного сложнее, чем кажется обычному человеку, вам нужно много терпения, чтобы сесть и создать его.
  • Генератор используется для создания оригинальных изображений и учится на обратной связи.
  • Дискриминатор используется для выбора поддельных и реальных изображений, а также учитывает отзывы
  • У вас никогда не может быть слишком много фотографий собак

Надеюсь, это помогло :))