Всем здравствуйте,
Сегодняшняя тема — очень интересный аспект ИИ, называемый генеративным искусственным интеллектом. В двух словах, генеративный ИИ относится к алгоритмам, которые позволяют машинам использовать такие вещи, как текст, аудиофайлы и изображения, для
создать/генерировать содержание. В предыдущем посте я рассказал о вариационных автоэнкодерах и о том, как они используются для создания новых изображений. Я упомянул, что они являются частью большего набора моделей, называемых генеративными моделями, и я расскажу о них больше в следующей статье. Итак, мы здесь.
Как я кратко объяснил в этом посте, есть два типа режимов. Дискриминативный и генеративный. Первые — это наиболее распространенные модели, такие как сверточные или рекуррентные нейронные сети, которые используются для различения/дискриминации шаблонов в данных, чтобы классифицировать их по классам. Такие приложения, как распознавание изображений, диагностика рака кожи, прогнозирование Ethereum, попадают в категорию дискриминационных режимов.
Последние способны генерировать новые узоры в данных. В результате они могут создавать новые образы, новый текст, новую музыку. Чтобы выразить это в строгой математической форме, дискриминационные модели пытаются оценить апостериорную вероятность p(y|x), что является вероятностью выходного образца (например, рукописной цифры)
данный входной образец (изображение рукописной цифры). С другой стороны, генеративные модели оценивают совместную вероятность p(x,y) , которая представляет собой вероятность того, что и входная выборка, и выборка вывода будут истинными одновременно. На самом деле он пытается вычислить распределение множества классов не является границей между ними.
Вы можете себе представить возможности? Что ж, вы можете взглянуть на них, посмотрев текущий прогресс в этой области и некоторые существующие приложения. До сих пор генеративные модели использовались для производства текст с изображенийк разработать молекулы в онкологиик открывать новые наркотики и к передать стиль таких художников, как Ван Гог, к новым образам. И я почти уверен, что вы слышали о Дипфейки, где они помещают лица знаменитостей в любое видео. И если вы думаете, что можете отличить подделки от настоящих, забудьте об этом. Вы не можете.
Если вы нажали на некоторые из приведенных выше ссылок, вы, возможно, заметили нечто еще более увлекательное. Все приложения стали возможны благодаря тому, что называется GAN. GAN или Гереративные состязательные сети являются базовой архитектурой большинства генеративных приложений. Конечно, есть много других крутых моделей, таких как вариационные автоэнкодеры, машины глубокого Больцмана, цепи Маркова, но GAN — это причина, по которой за последние три года вокруг генеративного ИИ столько ажиотажа.
Что такое генеративно-состязательные сети?
Генеративно-состязательные сети были представлены в 2016 году Яном Гудфеллоу в одном из самых многообещающих направлений ИИ. бумага последнего десятилетия. Это метод обучения без учителя, основанный на простой предпосылке:
Вы хотите сгенерировать новые данные. Что вы делаете? Вы строите две модели. Вы обучаете первого генерировать поддельные данные, а второго — отличать настоящие от поддельных. И вы ставите их соревноваться друг с другом.
Бум! Вот оно. Я хотел бы, чтобы это было так просто. Это не так. Но это главный принцип GAN.
Хорошо, давайте углубимся в некоторые детали. Первая модель — это нейронная сеть, которая называется Генератор. Работа генератора состоит в том, чтобы создавать поддельные данные, используя в качестве входных данных только шум. Вторая модель, Дискриминатор, получает на вход как настоящие изображения, так и поддельные (созданные генератором) и учится определять, является ли изображение поддельным или нет. Когда вы заставляете их соревноваться друг с другом и тренируете их одновременно, начинается волшебство:
Генератор становится все лучше и лучше в генерации изображений, так как его конечная цель — обмануть дискриминатор. Дискриминатор становится все лучше и лучше в отличии поддельных изображений от реальных, так как его цель — не дать себя одурачить. В результате у нас теперь есть невероятно реалистичные поддельные данные от дискриминатора.
Изображение выше — отличная аналогия, описывающая функциональность GAN. Генератор можно рассматривать как фальсификатор, который создает мошеннические документы, а Дискриминатор — как детектив, который пытается их обнаружить. Они участвуют в игре с нулевой суммой, и с течением времени они оба становятся все лучше и лучше.
Все идет нормально. У нас есть модели, и теперь нам нужно их обучить. Здесь начинают возникать проблемы, потому что это не стандартный метод обучения нейронной сети с градиентным спуском и функцией потерь. Здесь у нас есть две модели, конкурирующие друг с другом. Итак, что мы делаем?
Ну мы не уверены. Оптимизация GAN является одной из самых активных областей исследований в настоящее время, и постоянно появляется много новых статей. Я попытаюсь объяснить основу здесь, и мне понадобится немного математики и немного теории игр (!!!), чтобы сделать это. Пожалуйста, не уходи. Останься со мной, и, в конце концов, все обретет смысл.
Как их тренировать?
Мы можем считать, что у нас есть минимакс
игра здесь. Процитируем Википедию: «Максиминальная ценность игрока — это наивысшая ценность, которую игрок может получить, не зная действий других игроков; эквивалентно, это наименьшее значение, которое другие игроки могут заставить игрока получить, когда они знают действия игрока».
Другими словами, первый игрок пытается максимизировать свою награду, минимизируя награду своего противника. Второй игрок пытается достичь той же цели.
В нашем случае Дискриминатор пытается максимизировать вероятность присвоения правильной метки как примерам реальных данных, так и сгенерированным образцам. Пока Генератор пытается минимизировать вероятность правильного ответа Дискриминатора.
Представим потери в виде минимаксной функции:
Что же мы имеем здесь?
Дискриминатор пытается максимизировать функцию; следовательно, мы можем выполнить градиентное восхождение на целевой функции. Генератор пытается минимизировать функцию; следовательно, мы можем выполнить градиентный спуск для функции. Чередуя градиентный подъем и спуск, модели можно обучать.
Обучение останавливается, когда дискриминатор не может максимизировать функцию, а генератор не может ее минимизировать. В терминах теории игр они достигают равновесие по Нэшу.
def get_gan_network(discriminator, random_dim, generator, optimizer):
gan_input = Input(shape=(random_dim,))
x = generator(gan_input)
gan_output = discriminator(x)
gan = Model(inputs=gan_input, outputs=gan_output)
gan.compile(loss='binary_crossentropy', optimizer=optimizer)
return gan
def train(epochs=1, batch_size=128):
x_train, y_train, x_test, y_test = load_minst_data()
batch_count = x_train.shape(0) / batch_size
adam = get_optimizer()
generator = get_generator(adam)
discriminator = get_discriminator(adam)
gan = get_gan_network(discriminator, random_dim, generator, adam)
for e in range(1, epochs+1):
for _ in range(batch_count):
noise = np.random.normal(0, 1, size=(batch_size, random_dim))
image_batch = x_train(np.random.randint(0, x_train.shape(0), size=batch_size))
generated_images = generator.predict(noise)
X = np.concatenate((image_batch, generated_images))
y_dis = np.zeros(2*batch_size)
y_dis(:batch_size) = 0.9
discriminator.train_on_batch(X, y_dis)
noise = np.random.normal(0, 1, size=(batch_size, random_dim))
y_gen = np.ones(batch_size)
gan.train_on_batch(noise, y_gen)
Надеюсь, ты все еще здесь. Это основная идея и называется состязательной подготовкой. Конечно, есть несколько подводных камней, которые часто встречаются, такие как:
-
Параметры модели колеблются и никогда не сходятся,
-
Дискриминатор работает слишком успешно, поэтому градиент генератора исчезает.
-
Он очень чувствителен к гиперпараметру
-
Генератор производит ограниченное количество образцов
За последние несколько лет ученые внесли большой вклад в решение этих проблем, и можно сказать, что достигнут большой прогресс. Просто выполните быстрый поиск по arxiv-здравомыслие. Хотя еще очень рано. Помнить. GAN’s существует менее трех лет.
Если вы хотите узнать больше о GAN, я настоятельно рекомендую 5-ю неделю
Введение в глубокое обучение курс Университета Колорадо в Боулдере
Я закончу некоторыми ключевыми фактами. Если вы пропустили всю статью, это нормально. Но не пропускайте их:
-
Генеративный искусственный интеллект используется для генерации новых данных из реальных
-
Наиболее известной моделью GAI является генеративно-состязательная сеть.
-
GAN — это две нейронные сети, участвующие в игре. Первый пытается создать новые поддельные данные, а второй пытается отличить их от настоящих. Тренируясь, они оба становятся лучше в том, что делают.
-
Необходимо провести работу по обучению GAN.
-
Приложения GAN в реальном времени… (как бы это описать одним словом? Хммм…) ОГРОМНО.
Финито…
* Раскрытие информации: Обратите внимание, что некоторые из приведенных выше ссылок могут быть партнерскими ссылками, и без дополнительной оплаты для вас мы будем получать комиссию, если вы решите совершить покупку после перехода по ссылке.