yandexdataschool / PreciseGAN

A research repo for studying different techniques towards making more precise GANs
6 stars 1 forks source link

Boosted generative models #2

Open kazeevn opened 4 years ago

kazeevn commented 4 years ago

Нулевой вариант: бустинг смеси сеток

Due @maxim-borisyak Пусть есть текущая модель и сеть, которую мы к ней хотим добавить. Будем учить новую сетку по алгоритму GAN'а следующим образом: на каждой итерации сэмплируем половину из текущей модели, поливину из новой. Перевзвеиваем, чтобы эффективная вероятность новых примеров была малой. Учим дискриминатор по смеси.

Интуиция

Примеров мало, они редко появляются в батче и имеют малый вклад в лосс. SGD и друзья фактически выдают распределение, "ширина" которого зависит от размера батча и learning rate. importance sampling уменьшает шум градиентов в хвостах.

Статьи

https://www.padl.ws/papers/Paper%2031.pdf https://arxiv.org/abs/1905.04534 https://pdfs.semanticscholar.org/3e72/22e433089e899eae608f183c1b920eeba44d.pdf

mborisyak commented 4 years ago

Take 2.

Условия: есть генератор, натренированный по классической схеме, плохо воспроизводит хвосты.

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

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

Предлагаемое решение - снижения шума градиентов на хвостах:

  1. Importance sampling for discriminator. Просто сэмплировать хвосты намного чаще, например, формировать батч как 50/50 (хвост/не хвост), при этом компенсируя повышенную частоту сэмплирования весами так, чтобы мат. ожидание лосса оставалось тем же. Такая процедура называет перевешивание.

  2. Importance sampling for generator. Это немного сложнее в реализации. Теоретически, можно перевзвесить латентные переменные генератора, но для этого нужно знать какие из них переходят в хвосты, что сложно, но возможно на практике. Например, с помощью ALI можно сделать что-то подобное.

Самое простое решение - ввести новый генератор g1(z), как добавку к первому g(z), чтобы сформировать смесь pG(x) + (1 - p) G1(x), где G, G1 - распределения соотвествующие g и g1. Легче всего натренировать первый генератор, заморозить его и добавить второй. В этом случае, importance sampling происходит по компоненте смеси, т.е. из какого генератора приходит пример - добавочный генератор сэмплируется очень часто, но с малым весом. Чтобы бедный g1 не застрял в локальном минимуме, скорее всего, его стоит претренировать на хвосты, например, через VAE или грубый moment matching. Альтернативно, на ум приходит инициализация g1, так, чтобы он был равен g, однако, не понятно, стоит ли это того.

Приятный бесплатный бонус - importance sampling позволяет легко оптимизировать p.

On Thu, 31 Oct 2019, 02:26 Nikita Kazeev, notifications@github.com wrote:

Нулевой вариант: бустинг смеси сеток

Due @maxim-borisyak https://github.com/maxim-borisyak Пусть есть текущая модель и сеть, которую мы к ней хотим добавить. Будем учить новую сетку по алгоритму GAN'а следующим образом: на каждой итерации сэмплируем половину из текущей модели, поливину из новой. Перевзвеиваем, чтобы эффективная вероятность новых примеров была малой. Учим дискриминатор по смеси.

  • importance sampling на реальных (хвот, не хвост).

Интуиция

Примеров мало, они редко появляются в батче и имеют малый вклад в лосс. SGD и друзья фактически выдают распределение, "ширина" которого зависит от размера батча и learning rate. importance sampling уменьшает шум градиентов в хвостах. Статьи

https://www.padl.ws/papers/Paper%2031.pdf https://arxiv.org/abs/1905.04534

https://pdfs.semanticscholar.org/3e72/22e433089e899eae608f183c1b920eeba44d.pdf

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/yandexdataschool/PreciseGAN/issues/2?email_source=notifications&email_token=AANTI7D5BV64O4HVLFZBMLTQRIJZFA5CNFSM4JHBRPHKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HVS33DQ, or unsubscribe https://github.com/notifications/unsubscribe-auth/AANTI7AYSRB2TH7CL263Y4TQRIJZFANCNFSM4JHBRPHA .

kazeevn commented 4 years ago

Boosted generative models