Функции потерь Дискриминатора: стабилизация обучения | OTUS
⚡ Открываем подписку на курсы!
Проходите параллельно 3 онлайн-курса в месяц по цене одного.
Подробнее

Курсы

Программирование
Flutter Mobile Developer Подготовка к сертификации Oracle Java Programmer (OCAJP)
-8%
Супер-интенсив «СУБД в высоконагруженных системах»
-18%
Алгоритмы и структуры данных
-12%
Web-разработчик на Python
-11%
Архитектура и шаблоны проектирования
-14%
Team Lead
-15%
iOS-разработчик. Базовый курс
-23%
Разработчик на Spring Framework Python Developer. Basic
-16%
C# ASP.NET Core разработчик
-18%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Android-разработчик. Базовый курс
-10%
C++ Developer. Professional Разработчик C# AWS для разработчиков Software Architect Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Backend-разработка на Kotlin React.js Developer Разработчик Node.js Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Advanced Fullstack JavaScript developer
Инфраструктура
Супер-интенсив «СУБД в высоконагруженных системах»
-18%
PostgreSQL
-10%
IoT-разработчик
-12%
Administrator Linux. Professional
-11%
Базы данных
-19%
Administrator Linux.Basic
-18%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Сетевой инженер AWS для разработчиков Software Architect Reverse-Engineering. Professional CI/CD VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Функции потерь Дискриминатора: стабилизация обучения

ML_Deep_14.06_SITE.png

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

Предобучение Дискриминатора

Функция потерь для Генератора имеет вид: Снимок экрана 2018-06-13 в 19.55.08.png Однако на первых порах Дискриминатору достаточно просто отличить реальные данные от сгенерированных. Более того, некоторые авторы рекомендуют предобучать Дискриминатор так, чтобы он изначально имел некоторое представление о данных. Это приводит к тому, что значения функции потерь быстро становятся нулевыми, что препятствует градиентному спуску и обучению Генератора.

Поэтому уже сам Гудфеллоу в своей статье рекомендует заменять Снимок экрана 2018-06-13 в 19.56.19.png – функцию с экстремумами в тех же точках, однако «насыщающуюся», только если Дискриминатор начинает безоговорочно верить Генератору (чего на практике, конечно, не должно происходить).

Переполнение экспонент

Пожалуй, ещё более важный трюк, относящийся не только к GAN’ам, связан с переполнением экспонент. Для задач классификации типичной функцией активации выходного слоя является логистический сигмоид: Снимок экрана 2018-06-13 в 20.00.02.png При вычислении этой функции достаточно относительно небольших отрицательных значений «x» для того, чтобы вылететь за пределы float. В связи с этим логистическую функцию потерь часто переписывают следующим образом. В исходном виде она распадается на сумму двух логарифмов: Снимок экрана 2018-06-13 в 20.01.58.pngГде «x» – активации последнего слоя сети.

Рассмотрим их по отдельности:

Снимок экрана 2018-06-13 в 20.02.55.pngто есть, Снимок экрана 2018-06-13 в 20.04.13.pngЕсли для положительных значений «x» мы сможем вычислять левую часть этого равенства, а для отрицательных – правую вместо исходного логарифма от сигмоиды, то проблема с переполнением экспоненты отпадёт. Оказывается, не так сложно это записать в одну формулу: Снимок экрана 2018-06-13 в 20.05.20.pngПосле всех проделанных нами преобразований легко проверить, что эта формула и есть -log(σ(x)), а для -log(1-σ(x)) аналогичную формулу вывести вы можете сами, однако ответ я вам сразу скажу: Снимок экрана 2018-06-13 в 20.06.25.pngТеперь мы можем легко переписать функцию потерь Дискриминатора: Снимок экрана 2018-06-13 в 20.06.54.pngГде xg и xd обозначают соответственно сгенерированные примеры и примеры из обучающей выборки.

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

Остались вопросы? Напишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться