Мотивация, принцип и недостатки ГАН

машинное обучение

Эта статья перенесена из личного паблика: Программисты и машинное обучение

Мотивация для GAN

Чтобы понять GAN, начните с названия:Генеративно-состязательная сеть Генеративно-состязательная сеть

  • Генерация: описывает проблему, которую может решить GAN, создает изображение или абзац и т. д.
  • Adversarial: описывает, как работают сети GAN.

**Два основных компонента GAN: Генератор, Дискриминатор. ** Цель генератора — попытаться сгенерировать реальные изображения, чтобы обмануть дискриминатор, а цель дискриминатора — попытаться отличить изображения, сгенерированные генератором, от реальных изображений, что представляет собой процесс двухклассовой классификации.

Отношения между ними отражают враждебные отношения в GAN. Например, ** Это похоже на то, когда мы отправляем статью, мы Генератор, а рецензент — Дискриминатор. ** Статья похожа на модель, которую мы хотим изучить, каждый раз, когда мы отправляем рукопись, она эквивалентна выходу Generator, а рецензент действует как дискриминатор, оценивая нашу работу. У рецензентов есть свои критерии оценки, поэтому каждый раз, когда мы вносим изменения в статью как генератор, мы приближаемся к стандартам рецензента После нескольких раундов рецензирования и доработки, пока рецензент не будет удовлетворен. Обратите внимание, что во время этого процесса, когда мы редактируем статью, рецензент больше не может рецензировать нашу статью; пока рецензент рецензирует, мы не можем одновременно редактировать статью.

Теперь мы опишем основной поток GAN. Генератор(GG),Discriminator(DD)

  • инициализацияGGпараметрыθg\theta_g,DDпараметрыθd\theta_d

  • Повторить:

    • Собрать в набор данныхmmобразцы (вектор){x1,x2,xm}\{ {x^1},{x^2}, \ldots {x^m}\}

    • вкакая-то раздача(как нормальное распределение)mmсэмплы шума{z1,z2,zm}\{ {z^1},{z^2}, \ldots {z^m}\}

    • проходитьGGГенерация данных{x~1,x~2,x~m}, x~i=G(zi)\{ {{\tilde x}^1},{{\tilde x}^2}, \ldots {{\tilde x}^m}\},\ {\tilde x}^i=G(z^i)

    • проходитьмаксимизироватьСледующие обновления целевой функцииDDпараметрыθd\theta_d,В настоящее времяGGПараметры фиксированы:

    • V~=1mi=1mlogD(xi)+1mi=1mlog(1D(x~i))\tilde V = \frac{1}{m}\sum\limits_{i = 1}^m {\log D({x^i}) + } \frac{1}{m}\sum\limits_{i = 1}^m {\log (1 - D({{\tilde x}^i}))}
    • θdθd+нV~(θd){\theta _d} \leftarrow {\theta _d} + \eta \nabla \tilde V({\theta _d})
    • ​ **Первый элемент целевой функции: **ПриростDDОценка образцов в наборе данных должна установить точку отсчета в сознании рецензентов.

      ​ **Второй член целевой функции: **уменьшитьDDправильноGGОценка сгенерированного образца, то есть рецензент продолжает вносить предложения (находить недостатки) в нашей рукописи.

    • вкакая-то раздача(как нормальное распределение)mmсэмплы шума{z1,z2,zm}\{ {z^1},{z^2}, \ldots {z^m}\}, выборка здесь не обязательно должна быть такой же, как предыдущая выборка.

    • Обновление путем максимизации следующей целевой функцииGGпараметрыθd\theta_d,В настоящее времяDDПараметры фиксированы:

      V~=1mi=1mlogD(G(zi))\tilde V = \frac{1}{m}\sum\limits_{i = 1}^m {\log D(G({z^i}))}
      θgθg+нV~(θg){\theta _g} \leftarrow {\theta _g} + \eta \nabla \tilde V({\theta _g})

      Целевая функция: Увеличить оценку D на выборках, сгенерированных G, то есть мы должны усердно работать, чтобы пересмотреть нашу статью, чтобы сделать рецензентов более удовлетворенными.

ПочемуGGВы не можете учиться самостоятельно, вместо того, чтобы полагаться на этоDDсуждение?

Мы предполагаем, что эта схема осуществима, и надеемся,GGУчимся выводить изображение числа 8 средствамиGGНеобходимо правильно вывести изображение числа 8 для любого входа. Однако перед лицом такого случайного входного вектораGGТрудно контролировать свой результат. Поэтому мы также надеемся, что все изображения числа 8 будут иметь схожие векторные представления. Для этого можно узнать через другую сеть и, наконец, надеятьсяGGПолученное изображение может быть достаточно похоже на оригинал. который:

На самом деле этоDecoderDecoderкакGANGANсерединаGeneratorGenerator.Структура на приведенном выше рисунке (взято из «Глубокого обучения сотен лиц»), то естьКлассические дифференцируемые генеративные сетиAutoEncoder,AEAutoEncoder,AE.

Следующий контент взят из «Глубокого обучения сотен лиц».

стандартныйAEAEкодеромencoderencoderи декодерdecoderdecoderОн состоит из двух частей, как показано выше. Всю модель можно рассматривать как процесс «сжатия» и «распаковки»: сначала кодировщик преобразует реальные данные (реальные образцы)xxСжатый в скрытый вектор в маломерном скрытом пространствеzz, вектор можно рассматривать как «сущность» ввода. Затем декодер преобразует этот скрытый векторzzРазархивируйте, чтобы получить сгенерированные данные (сгенерированные образцы)x~{\tilde x}. Во время обучения будут генерироваться образцыx~{\tilde x}реальный образецxxСделайте сравнение, обновите параметры кодировщика и декодера в направлении уменьшения разницы между ними, и конечная цель — ожидать реальных образцов.xxСжатый скрытый векторzzМожет максимально уловить суть входных данных, чтобы сгенерированные сэмплы реконструировались из них.x~{\tilde x}с реальными образцамиxxкак можно ближе.

Вот немного больше понимания, поэтому эта скрытая переменнаяzzтак важно.

Мы знаем, что картинка хранится в виде матрицы в компьютере. Например, в изображении числа 8 8, написанное каждым человеком, разное, то его матрица будет очень разной и найти какие-то правила сложно. скрытая переменнаяzzЧто я хочу сделать, так это использовать простейший вектор для представления всех функций изображения.Например, у нас есть 2-мерный вектор для представления цифрового изображения, тогда идеальное представление: [Это число 8, 24 градусов влево]. Наверное это имеется в виду.

назадAEAEв обсуждении,AEAEВ чем проблема? Глядя на его структуру обучения, можно обнаружить, что он может генерировать скрытую переменную только для текущего изображения.zzи сгенерированные данныеx~{\tilde x}. такAEAEЕсть хороший шанс, что он не будет распространяться на невидимые изображения. Другими словами, он будет только имитировать, но не создавать, и не может генерировать произвольные новые образцы.

в видеAEAEОбновить,VariationalAutoEncoder,VAEVariational AutoEncoder, VAEРешениеAEAEТолько имитируйте проблемы, которые не создают. На картинке нижеVAEVAEФреймворк, взятый из "Hundred Faces Deep Learning"

Следующий контент взят из «Глубокого обучения сотен лиц».

VAEVAEОсновным преимуществом является возможность генерировать новые скрытые векторыzz, а затем сгенерируйте допустимые новые образцы.VAEVAEВозможность генерировать новые образцы (сAEAEСамая большая разница) в том, что,VAEVAEВ процесс кодирования добавляются некоторые ограничения, вызывающие апостериорное распределение скрытых векторов, создаваемых кодировщиком.q(zx)q(z|x)Постарайтесь максимально приблизиться к определенному распределению (например, нормальному распределению).VAEVAEЦели оптимизации процесса обучения включают ошибку реконструкции и апостериорное распределение.q(zx)q(z|x)Ограничения этих двух частей.VAEVAEВыход кодировщика больше не является вектором в скрытом пространстве, а представляет собой среднее значение и стандартное отклонение нормального распределения, а затем скрытый вектор выбирается в соответствии со средним значением и стандартным отклонением.zz. Из-за случайности выборки каждое входное изображениеVAEVAEРезультирующее сгенерированное изображение больше не является уникальным, еслиzzвыбирается из нормального распределения в скрытом пространстве, и результирующее изображение является достоверным.

VAEVAEКодер, который вычисляет среднее значение вAEAEКодировщик в и кодер, вычисляющий стандартное отклонение, эквивалентны добавлению шума в процесс реконструкции, что делает декодер более устойчивым к шуму.Когда шум равен 0,VAEVAEвыродиться вAEAE.

противVAEVAEидеи, мы продолжаем общаться.

Например, если мы хотим сгенерировать изображение лица, то фактически лицо имеет общую характеристику, отличную от других частей или других объектов, то есть есть некая характеристика распределения, относящаяся к категории лица. Определим это распределение какPdata(x)P_{data}(x). Тогда, если мы будем делать выборку в этом распределении, существует высокая вероятность выборки разумного изображения лица.Конечно, также возможно выбрать очень плохое изображение лица в области с низкой вероятностью или вообще не изображение лица. Итак, проблема, которую мы хотим решить, состоит в том, как точно описать это неизвестное распределение с помощью выборки.

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

Мы можем использовать известный нам дистрибутивPG(x;θ)P_{G}(x;\theta)приближатьPdata(x)P_{data}(x). ищаPG(x:θ)P_{G}(x:\theta)лучшие параметрыθ\thetaмаксимизировать:

Теперь обратите внимание на следующий вывод:

θ*=argmaxθi=1mPG(xi;θ)=argmaxθlogi=1mPG(xi;θ)=argmaxθi=1mlogPG(xi;θ)argmaxθExPdata[logPG(x;θ)]=argmaxθxPdata(x)logPG(x;θ)dxxPdata(x)logPdata(x)dxДобавление второго члена к приведенной выше формуле не влияет на результат, потому что нетPG=argminθKL(PdataPG)\begin{array}{l} {\theta ^*} = \arg\mathop {\max}\limits_\theta\prod\limits_{i = 1}^m {{P_G}({x^i};\ тета)} \\ = \arg \mathop {\max}\limits_\theta \log \prod\limits_{i = 1}^m {{P_G}({x^i};\theta)} \\ = \ arg \ mathop {\ max} \ limit_ \ theta \ sum \ limits_ {i = 1} ^ m {\ log } {P_G} ({x ^ i}; \ theta) \\ \ приблизительно \ arg \ mathop {\ max }\limits_\theta {E_{x\sim{P_{data}}}}[\log {P_G}(x;\theta)]\\ = \arg\mathop {\max}\limits_\theta\int_x { {P_{данные}}(x)} \log {P_G}(x;\theta)dx - \int_x {{P_{данные}}(x)} \log {P_{данные}}(x)dx\\ Добавление второго члена к приведенному выше уравнению не влияет на результат, потому что нет P_G\\ = \arg \mathop {\min }\limits_\theta KL({P_{data}}||{P_G}) \end {массив}

Найдите, что максимальная вероятность эквивалентна минимизации расхождения KL. Это означает, что мы ищемPGP_G, делая его таким же, какPdataP_{data}Расхождение KL минимально возможно.

Ограничение оценки максимального правдоподобия состоит в том, что когдаPGP_GБудет трудно рассчитать, когда очень сложно. иGANGAN** Приведенное решение состоит в том, чтобы использовать нейронную сеть для определения распределения вероятностей.PGP_G. **которыйGeneratorGenerator.

Как мы упоминали ранее,GeneratorGeneratorВходные данные представляют собой выборку распределения, обратитесь к оценке максимального правдоподобия дляPGP_Gоптимизация параметров,GANGANчерез нейросетевой модульGeneratorGenerator, который преобразует одно распределение в качестве входных данных в другое, более близкое кPdataP_{data}Распределение. Эта мотивация может быть выражена как минимизация расхождения между ними:

G*=argminGDiv(PG,Pdata){G^*} = \arg \mathop {\min }\limits_G Div({P_G},{P_{data}})

Теперь вопрос в том, как измеритьPGP_GиPdataP_{data}Как насчет расхождения (различия) между?GANGANпредложил использовать другой сетевой модуль дляPdataP_{data}иPGP_GИдея подсчета очков заключается в том, что этот модуль оценивает своиDiscriminatorDiscriminator. На самом деле, это по существуsigmoidsigmoidПроцесс выполнения бинарной классификации.

Проверьте, прежде чем мы обновимDDЦелевая функция с параметрами в , что эквивалентно максимизации:

V=ExPdata[logD(x)]+ExPG[log(1D(x))]=x[Pdata(x)logD(x)+PG(x)log(1D(x))]dxV = {E_{x \sim {P_{data}}}}[\log D(x)] + {E_{x \sim {P_G}}}[\log (1 - D(x))]\\ = \int_x {[{P_{data}}(x)} \log D(x) + {P_G}(x)\log (1 - D(x))]dx

Предположим здесьD(x)D(x)Может быть любой функцией, может получить любуюxx. Кроме того, баллы на самом делеxxсуперпозиция в , так что мы можем положить каждыйxxПосчитать отдельно, то есть отдельно посмотреть на содержание знака интеграла. Итак, у нас есть:

f(D(x))=alogD(x)+blog(1D(x))f(D(x)) = a\log D(x) + b\log (1 - D(x))

a:Pdata(x),b:PG(x)a:P_{data}(x),b:P_G(x)

Чтобы найти экстремальное значение, даD(x)D(x)Вывод может быть полученD*=Pdata(x)Pdata(x)+PG(x){D^*} = \frac{{{P_{data}}(x)}}{{{P_{data}}(x) + {P_G}(x)}}. Подставьте его в приведенную выше целевую функцию, чтобы получить следующий вывод:

maxDV(G,D)=V(G,D*)=x[Pdata(x)logPdata(x)Pdata(x)+PG(x)+PG(x)log(Pdata(x)Pdata(x)+PG(x))]dx=2log2+x[Pdata(x)logPdata(x)(Pdata(x)+PG(x))/2+PG(x)log(Pdata(x)(Pdata(x)+PG(x))/2)]dx=2log2+KL(PdataPdata+PG2)+KL(PGPdata+PG2)=2log2+2JSD(PdataPG)\begin{array}{l} \mathop {\max }\limits_D V(G,D) = V(G,{D^*})\\ = \int_x {[{P_{data}}(x)} \log \frac{{{P_{data}}(x)}}{{{P_{data}}(x) + {P_G}(x)}} + {P_G}(x)\log (\frac{{{P_{data}}(x)}}{{{P_{data}}(x) + {P_G}(x)}})]dx\\ = - 2\log 2 + \int_x {[{P_{data}}(x)} \log \frac{{{P_{data}}(x)}}{{({P_{data}}(x) + {P_G}(x))/2}} + {P_G}(x)\log (\frac{{{P_{data}}(x)}}{{({P_{data}}(x) + {P_G}(x))/2}})]dx\\ = - 2\log 2 + KL({P_{data}}||\frac{{{P_{data}} + {P_G}}}{2}) + KL({P_G}||\frac{{{P_{data}} + {P_G}}}{2})\\ = - 2\log 2 + 2JSD({P_{data}}||{P_G}) \end{array}

Как видно из приведенного выше вывода,GANGANЦелевая функция на самом деле является дивергенцией JS.

мы упоминали вышеGANGANмотивацияG*=argminGDiv(PG,Pdata){G^*} = \arg \mathop {\min }\limits_G Div({P_G},{P_{data}}), после обновленияDDПосле параметров максимизируемоеPGP_GиPdataP_{data}После разности мотивация может быть заменена эквивалентнойG*=argminGmaxDV(D,G){G^*} = \arg \mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G). Этоminmaxminmaxигра, в процессеGGиDDЦель противоположная, означающая «противостояние». Благодаря методу конфронтационного обучения генератор и дискриминатор поочередно оптимизируются, растут вместе и, наконец, превращаются в две равномерно подобранные электростанции.GANGANБазовая структура:

Давайте разберем это на примереminmaxminmaxигра. Предположим, мы можем настроить три разаGG, соответственноG1,G2,G3G_1,G_2,G_3. для каждогоGiG_i, у нас есть абсцисса какDD, ординатаV(G,D)V(G,D)систему координат, как показано на рисунке ниже.

Первый шаг, который нам нужно исправитьGGпараметры для выбора лучшегоDDпараметры, наблюдайте за тремя картинками, очевидно, что каждая картинка имеет свой оптимальныйVVзначения, как показано точками на рисунке. Этоmaxmax.

На втором шаге нам нужно исправитьDDпараметры для выбора лучшегоGG, даже если вы решите использоватьVVсамый маленькийG2G_2. Этоminmin.

После двух вышеуказанных шаговGGиDDВсе параметры обучены, и этот пример относительно интуитивно понятен и прост для понимания.

Проблемы с GAN

(Узнайте здесь или выдержка из «Глубокого обучения сотен лиц»)

Как упоминалось ранее, дискриминатор подобен бинарному классификатору, выдающему 1 для реальных выборок и 0 для сгенерированных выборок. мы видимDDцель оптимизацииV~=1mi=1mlogD(xi)+1mi=1mlog(1D(x~i))\tilde V = \frac{1}{m}\sum\limits_{i = 1}^m {\log D({x^i}) + } \frac{1}{m}\sum\limits_{i = 1}^m {\log (1 - D({{\tilde x}^i}))}, который можно рассматривать как процесс минимизации перекрестной энтропийной потери (максимизация логарифмической функции правдоподобия задачи классификации). Эта целевая функция теоретически проблематична. В начале обучения на вход генератора подается случайный шум, который принципиально отличается от реальных данных.В это время для двухклассового дискриминатора эта двухклассовая задача просто слишком проста (Представьте, что главный редактор отказывается от острой курицы, и даже не хочет отправлять ее на рассмотрение.), дискриминатор может различить их с высокой уверенностью, в это времяlog(1D(x~i))log(1-D(\tilde x^i))Насыщение достигается, градиент исчезает, и генератор не может быть обеспечен достаточно большим градиентом.

Как было сказано выше, когда генераторGGКогда параметры фиксированы, функция потерь генератора при оптимальном дискриминаторе имеет вид:2log2+2JSD(PdataPG)- 2\log 2 + 2JSD({P_{data}}||{P_G}). **когдаPdataP_{data}иPGP_GКогда два распределения (почти) не перекрываются,JSJSДивергенция постоянная. **Затем вGANGANНасколько велико перекрытие между ними? Генератор обычно выбирает вектор из пространства низкого порядка (например, 128 измерений) и отображает его в пространство высокого размера (например,32×3232 \times 32Изображение 1024-мерное), поэтому сгенерированные данные представляют собой просто многообразие низкого порядка в пространстве высокого порядка (например, все возможности генерации отсчетов в приведенном выше 1024-мерном космическом изображении фактически ограничены 128-мерным пространством). размерный входной вектор). Точно так же реальное распределение также является маломерным многообразием в многомерном пространстве Вероятность встречи двух маломерных многообразий в многомерном пространстве в таком «малонаселенном» пространстве близка к 0, поэтому сгенерированное распределение: истинное распределение почти не перекрывается. Следовательно, будет проблема исчезновения градиента, упомянутая в предыдущем абзаце.

Чтобы решить эту проблему, вы можетеlog(1D(x~i))log(1-D(\tilde x^i))заменитьlog(D(x~i))-log(D(\tilde x^i)). Это обеспечивает больший градиент для генератора в начале обучения. Однако это также проблематично в теории.Давайте посмотрим на следующий вывод:

L(G)=maxDV(G,D)=V(G,D*)=ExPdata[log(D*(x))]+ExPG[log(D*(x))]=ExPdata[log(D*(x))]+ExPG[log(Pdata(x)Pdata(x)+PG(x))]=ExPdata[log(D*(x))]+ExPG[log(Pdata(x)2(Pdata(x)+PG(x))/2)]=ExPdata[log(D*(x))]+ExPG[(log(Pdata(x)(Pdata(x)+PG(x))/2)log2)]=ExPdata[log(D*(x))]ExPG[log(Pdata(x)(Pdata(x)+PG(x))/2]+log2=ExPdata[log(D*(x))]+ExPG[log(Pg(x)Pdata(x)]ExPG[log(Pg(x)(Pdata(x)+PG(x))/2]+log2=2ExPdata[log(D*(x))]+KL(Pg(x)Pdata(x))2JS(Pg(x)Pdata(x))+2log2\begin{array}{l} L(G) = \mathop {\max }\limits_D V(G,D) = V(G,{D^*})\\ = {E_{x \sim {P_{data}}}}[\log ({D^*}(x))] + {E_{x \sim {P_G}}}[ - \log ({D^*}(x))]\\ = {E_{x \sim {P_{data}}}}[\log ({D^*}(x))] + {E_{x \sim {P_G}}}[ - \log (\frac{{{P_{data}}(x)}}{{{P_{data}}(x) + {P_G}(x)}})]\\ = {E_{x \sim {P_{data}}}}[\log ({D^*}(x))] + {E_{x \sim {P_G}}}[ - \log (\frac{{\frac{{{P_{data}}(x)}}{2}}}{{({P_{data}}(x) + {P_G}(x))/2}})]\\ = {E_{x \sim {P_{data}}}}[\log ({D^*}(x))] + {E_{x \sim {P_G}}}[ - (\log (\frac{{{P_{data}}(x)}}{{({P_{data}}(x) + {P_G}(x))/2}}) - \log 2)]\\ = {E_{x \sim {P_{data}}}}[\log ({D^*}(x))] - {E_{x \sim {P_G}}}[\log (\frac{{{P_{data}}(x)}}{{({P_{data}}(x) + {P_G}(x))/2}}] + \log 2\\ = {E_{x \sim {P_{data}}}}[\log ({D^*}(x))] + {E_{x \sim {P_G}}}[\log (\frac{{{P_g}(x)}}{{{P_{data}}(x)}}] - {E_{x \sim {P_G}}}[\log (\frac{{{P_g}(x)}}{{({P_{data}}(x) + {P_G}(x))/2}}] + \log 2\\ = 2{E_{x \sim {P_{data}}}}[\log ({D^*}(x))] + KL({P_g}(x)||{P_{data}}(x)) - 2JS({P_g}(x)||{P_{data}}(x)) + 2\log 2 \end{array}

Удаление нескольких членов, не связанных с генератором, минимизация этой функции потерь эквивалентно минимизации расхождения KL истинного распределения и сгенерированного распределения при одновременном увеличении расхождения JS обоих. Такие противоречия вызовут нестабильность градиента во время обучения. Кроме того, из-за асимметрии расходимости KL будут несовместимые штрафы за ошибки генератора. Эта проблема непоследовательного штрафа означает, что распределение реальных данных часто бывает сложным и мультимодальным, распределение данных будет иметь множество закономерностей, а сходные выборки принадлежат одной закономерности. Поскольку штраф непостоянен, штраф для режима А может быть намного меньше, чем штраф для других режимов, поэтому генератор будет генерировать только выборки режима А, вызывая коллапс режима. В этот момент генератору не хватает разнообразия, что может вызватьPG(x)0,Pdata(x)1{P_G}(x) \to 0,{P_{data}}(x) \to 1, а KL-дивергенция целевой функции приближается к 0. И когда генератор генерирует нереальные сэмплыPG(x)1,Pdata(x)0{P_G}(x) \to 1,{P_{data}}(x) \to 0, штраф будет стремиться к бесконечности.

Ссылаться на

  1. воооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо по
  2. «Столикое глубокое обучение»
  3. zhuanlan.zhihu.com/p/74075915
  4. zhuanlan.zhihu.com/p/24767059