❝
Введение: Интерпретация GAN с другой точки зрения более интуитивно понятна с точки зрения распределения вероятностей.
❞
Автор: Алиреза Кочали
Компиляция: McGL
Генеративно-состязательные сети (GAN/Generative Adversarial Networks) — сегодня одна из горячих тем в области ИИ. В этом посте мы посмотрим на GAN с другой точки зрения, не как на генератор красивых изображений, а как на функцию преобразования распределения вероятностей. Мы рассмотрим основные идеи GAN, не запутываясь в реализации и сложной математике. Начнем с анализа типа проблемы. Затем мы будем наблюдать, как требования решения формируют идею GAN.
Добро пожаловать в парк развлечений
Предположим, у нас есть парк развлечений. Внутри у нас есть машина, в которую мы вложили 10 долларов, и она случайным образом вернет игрушку стоимостью от 1 до 100 долларов. Этот автомат очень популярен у туристов, потому что они то и дело выигрывают очень крутые и дорогие игрушки. Кроме того, эта машина очень выгодна для нас. Таким образом, логика выбора игрушек в машине находится в нужном месте и гарантирует удовлетворение нас и наших клиентов.Поэтому мы хотим добавить больше машин, чтобы получить больше прибыли. Однако есть проблема. Эта машина супер дорогая. Поэтому мы заинтересованы в разработке и производстве (подражании) этой машины собственными силами. Для этого нам нужно разобраться с логикой выбора игрушек автоматом. Очевидно, что ключевым параметром при выборе игрушки является ее стоимость. Если игрушка дорогая, вероятность того, что она будет выбрана, должна быть меньше, чтобы гарантировать нашу прибыль. Однако, если мы резко снизим вероятность брать в руки дорогие игрушки, это приведет к недовольным посетителям. Поэтому наша цель — как можно точнее понять распределение вероятностей игрушечных значений. Во-первых, у нас есть список игрушек, выпущенных предыдущими машинами, и их соответствующие цены. Мы пытаемся изучить распределение игрушек. Если распределение напоминает известное распределение вероятностей, проблема решена. Мы используем распределения вероятностей в качестве ядра логики выбора игрушек нашей новой машины. Мы делаем выборку из этого распределения, чтобы определить, какую игрушку вернуть.
сложные машины, сложные проблемы
Однако, если мы сталкиваемся со сложным распределением плевающихся игрушек, нам нужно придумать способ понять распределение вероятностей генеративного процесса, учитывая только выборки из этого распределения.Другими словами, нам нужна модель для просмотра наших данных и отработки машинной логики. Ключевой момент: «Изучение вероятностного распределения данных является основной задачей генерации данных».
генерируется путем преобразования
Нарисуем нашу цель абстрактно. Во-первых, у нас есть набор данных, которые мы с этого момента будем называть реальными данными. Наша цель — подделать искусственные данные, похожие на настоящие. Искусственные данные часто называют поддельными данными. Поэтому нам нужна модель, которая берет реальные данные и генерирует реалистичные поддельные данные. Цель ясна. Теперь нам нужно перейти от абстрактной цели к более подробному описанию нашей задачи, и желательно связать ее с чем-то более привычным для нас. Для этого нам нужно изменить свой взгляд на проблему. Во-первых, нам нужно познакомиться с функциями преобразования. Предположим, у нас есть набор выборок из распределения вероятностей. Применяя функцию преобразования, мы можем преобразовать эти выборки из их исходного распределения в желаемое целевое распределение. Теоретически мы можем преобразовать любой исходный дистрибутив в любой целевой дистрибутив. Однако вычисление этих функций преобразования не всегда возможно аналитически.
Теперь вернемся к нашему вопросу. Мы можем переопределить нашу генеративную проблему как задачу трансформации. Начнем с известного распределения. Обычно мы выбираем нормальное распределение со средним значением 0 и стандартным отклонением 1. Мы называем это распределение «скрытым пространством». Теперь нам нужно определить функцию преобразования для преобразования выборок из скрытого пространства в пространство данных. Другими словами, наша функция преобразования берет выборки из скрытого пространства и выводит выборки в пространстве данных, то есть в точках данных. Вуаля! Мы генерируем данные! Есть только одна проблема, эту функцию невозможно определить аналитически. Однако, не должны ли мы использовать нейронные сети для аппроксимации сложных функций, которые не могут быть определены аналитически? Да, мы знаем, это именно то, что мы собираемся сделать. Мы используем нейронную сеть для аппроксимации нашей функции преобразования. Мы называем эту нейронную сеть «Генератор», потому что в конечном итоге она будет производить данные. Очень разумно.Поскольку мы собираемся использовать нейронную сеть, нам нужно определить функцию потерь для обучения нашей нейронной сети. Функции потерь являются ключом к правильному обучению и созданию реалистичных данных. Поэтому нам нужно определить его именно в соответствии с нашими целями.
Дискриминатор: очень полезно
В общем, функция потерь оценивает, насколько хорошо наша нейронная сеть работает в соответствии с нашей целью, и предоставляет обратную связь (в виде градиентов) модели для ее улучшения. Здесь нам нужна функция потерь, чтобы измерить, насколько хорошо наши сгенерированные данные соответствуют истинному распределению данных. Другими словами, нам нужна функция потерь, которая говорит нам, насколько реальны поддельные данные. Тем не менее, у нас нет никакой информации об истинном распределении данных. Это было нашей главной проблемой с самого начала. Однако мы можем добиться того же, различая настоящие данные и поддельные данные.
Предположим, наша функция потерь может различать настоящие данные и поддельные данные.Затем мы можем предоставить поддельные данные этой функции. Для тех поддельных образцов, которые неотличимы от реальных данных, нам ничего делать не нужно. Для других поддельных образцов функция потерь предоставит обратную связь для обновления и улучшения нашего генератора.В частности, мы можем использовать классификатор в качестве функции потерь, чтобы различать реальные и поддельные данные. Если сгенерированная точка данных классифицируется как реальные данные, что означает, что она похожа на реальные данные, нам не нужно предпринимать никаких дальнейших действий. Для тех фальшивых образцов, которые идентифицируются как сгенерированные данные, мы спрашиваем функцию потерь, как мы должны обновить наш генератор, чтобы эти образцы выглядели более реалистично. Функция потерь предоставляет ответ в виде градиентов для обновления весов в нашей нейронной сети.
Похоже, мы нашли последнюю часть решения! Однако нам предстоит решить еще одну проблему. Хотя предложенная нами функция потерь соответствует нашим требованиям, ее непросто реализовать на практике. Следовательно, наша функция потерь является сложной функцией, и мы можем определить ее особенности, но не можем реализовать ее напрямую. Похоже на тупик. Но что мешает нам аппроксимировать эту функцию потерь с помощью нейронной сети? ничего такого! Итак, приступим. Мы можем использовать нейронную сеть классификатора в качестве нашей функции потерь. Мы называем эту сеть «Дискриминатором», потому что она различает настоящие и поддельные данные. Очень разумное название.Самое главное, мы очень хорошо знакомы с использованием нейронных сетей для классификации. Мы знаем, как их обучать, их функции потерь и то, как должны выглядеть их входы и выходы. Однако обучение двух нейронных сетей одновременно не является традиционным подходом. Теперь последний вопрос: как мы должны одновременно обучать все эти сети?
Пусть поезд (Train, английский каламбур) идет!
Если у нас есть идеальный классификатор до того, как мы начнем обучать наш генератор, обучение становится очень простым. К сожалению, в начале процесса обучения наш дискриминатор так же невежественен, как и наш генератор. Хуже того, мы не можем обучить дискриминатор до того, как начнем обучать генератор, потому что для обучения дискриминатора нам нужны поддельные данные. Как видите, обучение этих двух сетей взаимозависимо. Для улучшения генератору требуется обратная связь от дискриминатора, а дискриминатор необходимо постоянно обновлять по мере улучшения генератора. Поэтому тренируем их поочередно. Для партии мы обучаем дискриминатор классифицировать настоящие и поддельные образцы. Затем для другой партии мы обучаем генератор генерировать выборки, распознаваемые дискриминатором как настоящие. Такой подход называется «состязательной тренировкой». Когда мы используем состязательное обучение для задач генерации данных, мы получаем генеративно-состязательные сети или сокращенно GAN.
Однако, когда мы смотрим на тренировочный процесс, мы не видим самого «противника». Чтобы выяснить, откуда взялся термин «состязательная подготовка», следует более подробно рассмотреть цели обеих сетей. Цель дискриминатора — как можно точнее классифицировать настоящие и поддельные данные. Следовательно, на этапе обучения дискриминатора он пытается правильно идентифицировать поддельные образцы. С другой стороны, мы обучаем генератор генерировать реалистичные поддельные данные. Чтобы пройти тест на подлинность, генератор должен убедить дискриминатор в том, что генерируемые им данные реальны. Другими словами, генератор пытается обмануть дискриминатор, а дискриминатор старается не дать себя обмануть генератору. Эти противоречивые цели привели в движение тренировочный процесс.
Во время обучения цели обеих сетей улучшаются. Наконец, в какой-то момент генератор становится настолько хорош, что дискриминатор не может отличить поддельные данные от реальных, и на этом наше обучение завершается.
ловушка. Много есть!
GAN — отличное и сложное решение очень сложной проблемы. С GAN у нас есть быстрый, эффективный и точный ответ на эту давнюю проблему, который прокладывает путь для многих интересных приложений. Однако, прежде чем говорить о приложениях, мы должны понять общие проблемы с GAN. Во-первых, генератор — это нейронная сеть, которая по определению является черным ящиком. Когда обученный генератор встраивает информацию об истинном распределении данных в свои веса, мы не можем получить к ней явный доступ. Когда мы имеем дело с низкоразмерными данными, мы можем получить эту информацию путем выборки, но с высокоразмерными данными мы ничего не можем сделать. Кроме того, в отличие от других нейронных сетей, функция потерь GAN дает мало информации о ходе обучения. Во время обучения нам нужно вручную проверять образцы генератора, чтобы проверить ход обучения. Наконец, как упоминалось ранее, обучение происходит через борьбу между генератором и дискриминатором. Если они перестанут драться друг с другом, остановится и тренировочный процесс, к сожалению, они часто перестают драться через какое-то время. У этой проблемы много причин. Например, если одна из сетей совершенствуется намного быстрее, чем другая, она может перегрузить другую, и обучение остановится. Поэтому сетевая архитектура должна быть сбалансированной. Но что означает этот баланс? На этот вопрос нет четкого ответа. В общем, надо искать их методом проб и ошибок. Поэтому тренировочный процесс ГАН достаточно нестабилен. Есть много способов решить проблему стабильности, но большинство из них решает одну проблему, но создает другую или требует выполнения некоторых определенных условий. Короче говоря, улучшение процесса обучения GAN по-прежнему остается открытой проблемой, и исследования в этой области ведутся очень активно.
Вывод: верхушка айсберга
Вернемся к дорогим машинам, о которых мы говорили в начале. С точки зрения времени и ресурсов эта машина является символом всех дорогостоящих процессов генерации данных. Предположим, у нас есть набор данных лиц среднего размера, для приложения нам нужен набор данных большего размера. Мы можем взять нашу камеру, сфотографировать людей и добавить их в набор данных. Однако это длительный процесс. Теперь, если мы обучим GAN с доступными изображениями, мы сможем генерировать сотни изображений за секунды. Таким образом, методы увеличения данных являются одним из наиболее важных приложений GAN.
Дефицит данных — не единственная мотивация. Вернемся к набору данных лиц. Если мы захотим использовать эти фотографии, у нас, скорее всего, возникнут вопросы о конфиденциальности. Но что, если мы используем сгенерированные поддельные символы, которых на самом деле не существует? очень хороший! Никто не будет волноваться. Таким образом, GAN обеспечивают изящное решение проблемы конфиденциальности данных.
Исследовательское сообщество GAN в настоящее время очень активно, каждый день предлагаются новые приложения или улучшения. Тем не менее, многое еще предстоит открыть. Это только вершина айсберга.
"источник:" к data science.com/feel-ah-diff…