Выбрано из среды,автор: Фук Ле,сердце машины собрано,принимать участие:Чжан Си.
«По сути, ГАН — это еще одинфункция потерь. "
Учитель Джереми Ховард был вГенеративно-состязательные сетиВ курсе (GAN) говорится: «... по сути, GAN — это просто еще одна функция потерь».
В этой статье мы обсудим вышеуказанные моменты в соответствующем контексте и проиллюстрируем простоту и красоту «обученной» функции потерь GAN.
Во-первых, давайте представим соответствующие фоновые знания:
Нейронные сети с точки зрения приближения функций
В математике мы можем думать о функции как о машине, ввести одно или несколько чисел в машину, и она соответственно сгенерирует одно или несколько чисел.
Было бы неплохо, если бы мы могли математически выражать функции. Но что, если вы не можете или не поняли, как записать нужную функцию в виде последовательности сложения, вычитания, умножения и деления (например, функцию, определяющую, является ли вход изображением кошки или изображением собаки)?
Если мы не можем ее сформулировать, можем ли мы хотя бы аппроксимировать функцию?
Нейронные сетиприди, чтобы спасти нас. Теорема универсального приближения утверждает, что достаточно большая нейронная сеть с достаточным количеством скрытых единиц может вычислить «любую функцию».
Явные функции потерь для нейронных сетей
Как только мы разберемся в нейронных сетях, мы сможем построить нейронную сеть, чтобы постепенно аппроксимировать функцию классификации кошек и собак, описанную выше, без необходимости явно выражать функцию классификации.
Чтобы получить лучшую аппроксимацию функции, нейронная сеть сначала должна знать, насколько плоха ее текущая производительность. Способ расчета ошибки нейронной сети называется функцией потерь.
Функций потерь уже много, и выбор функции потерь зависит от конкретной задачи. Однако все функции потерь имеют одно общее свойство — она должна уметь представлять функцию потерь в точном математическом выражении.
Потеря L1 (абсолютная ошибка): для задач регрессии
Потери L2 (квадрат ошибки): аналогично L1, но более чувствительны к выбросам
Кросс-энтропийная ошибка: обычно используется для задач классификации.
Потеря кубиков (IoU): для задач сегментации
Дивергенция KL: используется для измерения разницы между двумя распределениями.
...
Что касается качества аппроксимации характеристик нейронной сети, то очень важную роль играет функция потерь. Понимание и выбор подходящей функции потерь для конкретной задачи — самый важный навык для разработчика нейронной сети.
В настоящее время разработка лучших функций потерь также является очень активной областью исследований. Например, в документе «Фокусные потери для обнаружения плотных объектов» представлена новая функция потерь под названием «Фокусные потери» для устранения дисбаланса одноэтапных моделей обнаружения объектов.
Ограничения явных функций потерь
Описанные выше функции потерь довольно хорошо работают в таких задачах, как классификация, регрессия и сегментация изображений, но менее эффективны, когда выходные данные имеют мультимодальное распределение.
Возьмем, к примеру, задачу раскрашивания черно-белых картинок.
На входе черно-белая птица, реальное изображение — та же синяя птица.
Функция потерь L2 используется для вычисления разницы на уровне пикселей между выходным цветом модели и реальным изображением.
Далее на вход подается черно-белая птица, похожая на эксперимент только что, реальное изображение — та же самая красная птица.
Функция потерь L2 пытается минимизировать разницу между выходным цветом модели и красным.
Основываясь на обратной связи от функции потерь L2, модель изучила похожую птицу, но модель должна выводить цвет, близкий как к красному, так и к синему. Что будет делать модель?
Модель выводит желтую птицу, что является самым безопасным выбором для минимизации расстояния между красным и синим, даже несмотря на то, что модель никогда не наблюдала желтую птицу во время обучения.
Поскольку на самом деле желтых птиц нет, вы знаете, что модель недостаточно реалистична.
Этот эффект выравнивания во многих случаях может привести к очень плохим результатам. Возьмем в качестве примера задачу прогнозирования следующего кадра видео. Есть много возможностей для следующего кадра. Вам нужна модель, которая может выводить «один из этих кадров». Однако, если вы обучаете модель с L2 или L1, модель будет усреднять все возможные результаты, создавая очень размытое, гомогенизированное изображение.
GAN как новая функция потерь
Во-первых, вы не знаете точного математического выражения сложной функции (например, функции, входом которой является набор чисел, а выходом — реалистичное изображение собаки), поэтому вы аппроксимируете эту функцию с помощью нейронной сети.
Нейронной сети нужна функция потерь, чтобы сообщить ей, насколько хорошо она работает, но никакая явная функция потерь не справляется со своей задачей.
Что ж, было бы здорово, если бы был способ напрямую аппроксимировать функцию потерь нейронной сети, не требуя явных математических выражений. Как нейронная сеть?
Итак, что, если мы заменим явную функцию потерь моделью нейронной сети? Поздравляем, вы открыли для себя GAN.
Со следующей архитектурой GAN и архитектурой Alpha-GAN вы можете наблюдать более четко. Как показано на рисунке, белое поле представляет входные данные, розовое и зеленое поле представляют собой сеть, которую вы хотите построить, а синее поле представляет собой функцию потерь.
В оригинальной GAN есть только одна функция потерь — дискриминаторная сеть D, которая сама по себе является другой нейронной сетью.
Однако в Alpha-GAN модель имеет 3 функции потерь: дискриминатор D для входных данных, дискриминатор скрытого кода C для закодированных скрытых переменных и традиционная функция потерь L1 на уровне пикселей. Среди них D и C — это не явные функции потерь, а лишь их аппроксимации — нейронные сети.
градиент
Если сеть генератора (и кодировщик Alpha-GAN) обучается с помощью дискриминатора (который также является нейронной сетью) в качестве функции потерь, какая функция потерь используется для обучения дискриминатора?
Задача дискриминатора состоит в том, чтобы отличить реальное распределение данных от сгенерированного распределения данных. При обучении дискриминатора с учителем метки можно использовать бесплатно, поэтому обучение дискриминатора с явной функцией потерь, такой как бинарная кросс-энтропия, не вызывает затруднений.
Но поскольку дискриминатор является функцией потерь генератора, это означает, что кумулятивный градиент бинарной кросс-энтропийной функции потерь дискриминатора также будет использоваться для обновления сети генератора.
Глядя на изменения градиента в GAN, очень легко обнаружить новые идеи для изменения его траектории. Если градиент явной функции потерь не может проходить между двумя нейронными сетями (дискриминатор и генератор), но может проходить между тремя нейронными сетями, где его можно использовать? Что, если градиенты нельзя передавать обратно через традиционные функции потерь, но можно напрямую передавать туда и обратно между этими нейронными сетями? Из основ легко обнаружить неизведанные пути и вопросы без ответов.
в заключении
Благодаря интеграции традиционных функций потерь и нейронных сетей GAN позволяют обучать другую нейронную сеть, используя нейронную сеть в качестве функции потерь. Умное взаимодействие между двумя нейронными сетями позволяет глубоким нейронным сетям решать задачи, которые ранее были невозможны (например, создание реалистичных изображений).
Думая о GAN как об изученной функции потерь, я надеюсь, что эта статья поможет вам понять простоту и мощь GAN.