Conditional-DCGANs са метод за задълбочено обучение, използван за генериране на изображения от специфични типове с помощта на конволюционни слоеве в противоположна мрежа. Но преди да се впуснем, кратко обобщение на ванилните GAN.

(Кодът за тази публикация може да бъде намерен тук.)

Нека разгледаме изпитаната аналогия между експерт по изкуство и фалшификатор на изкуство. Фалшификаторът, за съжаление, се опитва да продаде фалшиви произведения на изкуството чрез аукционна къща, за да спечели малко пари. Аукционната къща, знаейки измамния характер на някои от своите покровители, наема експерт по изкуство, за да провери дали картините са истински и следователно невероятно ценни, или са фалшиви и безполезни.

Сега, ако разтегнем измислицата още малко, в красива симетрия нито фалшификаторът, нито експертът знаят нищо за изкуството. Така че в началото всяка произволна картина, създадена от фалшификатора, се приема от експерта, но като работи в аукционната къща, „експертът“ скоро се докосва до много истинско изкуство и започва да забелязва фалшификатите. Това принуждава нашия фалшификатор, който досега е бил възхитен от очевидната лекота на новата си професия, да подобри качеството на фалшификатите.

Проблемът е, че единствената обратна връзка, която получават, е дали картината е приета или отхвърлена от аукционната къща. Така чрез произволни проби и грешки в крайна сметка фалшификаторът започва да намира модели, според които картините се приемат или отхвърлят.

По този начин с течение на времето нашият фалшификатор (който по чудо не е заловен) и експертът (който по чудо не е уволнен) стават експерти в собствените си области, докато фалшификатите не са почти идентични с истинските картини.

Това е хубава, макар и опростена аналогия, но като се вгледаме по-отблизо, можем да подчертаем няколко проблема с ванилните GAN.

Първо, генераторът няма познания за стиловете или класовете на изображенията, които се опитва да фалшифицира, така че това, което научава, е мултимодално разпределение на целия набор от изображения. Това не е проблем при малки набори от данни с ограничена вариация, но в случаите, когато класовете изображения са по-различни, това се превръща в проблем.

Нашият фалшификатор може да е добре, тъй като аукционната къща е специализирана в акварели от 19-ти век, но ще се затрудни, ако продава също масла от 17-ти век и модерна скулптура. (Представете си стил, съчетаващ трите? Интересно, но е малко вероятно да заблуди експерта.)

Второ, и много по-важен проблем, що се отнася до полезността, генераторът няма начин да определи вида на изображението, което да произведе. Във ванилия GAN създаденото изображение е произволно въз основа на първоначалния вектор на шума. Това е полезно, когато може да искаме да използваме GAN за евтино генериране на „нови“ симулационни данни за експеримент, но за да има GAN случай на използване в по-сложни или специфични ситуации, е необходим начин за определяне на вида на изображението, което да се създаде .

Въведете условни GAN.

Този клас генеративна мрежа е „обусловен“, използвайки предварителна информация за генериране на различни видове изображения, докато същата информация се предава на дискриминатора, което го прави по-мощен класификатор. Обикновено това може да е класът на данните, както в многокласов набор от данни като MNIST, или може да е анализирано описание на сцена за рисуване или тип трансфер на стил.

Функцията за загуба за cGAN е много подобна на стандартната формулировка в документа от 2014 г. тук, с добавяне на етикети за истински клас на y за данните и y'произволни етикети на класове за генерираните изображения.

Оптималното решение за минимизиране на функцията за загуба е игра на мин./макс. между двете мрежи чрез промяна на техните вътрешни параметри. Първият член вдясно зависи само от D, така че за да увеличи максимално този член, дискриминаторът трябва да изведе 1 за x , y от истинското разпределение на данните. (Помислете за формата на логаритмичната крива.) Това означава, че D е стимулиран да намира правилно реални данни като реални. Вторият член е по-сложен, като включва случаен вектор на шума z и някаква случайна променлива от клас y’. Генераторът се опитва да минимизира стойността на израза, но извежда нещо, което дискриминаторът ще класифицира възможно най-близо до реалните данни от клас y', принуждавайки стойността в регистрационния файл близо до нула и силно отрицателен. Дискриминаторът се опитва да се бори с това, като класифицира изхода на G като фалшив, като дава друг log(1) и максимизира очакваната стойност.

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

Следващият въпрос е как обуславяме мрежите? За генератора това е много просто, векторът на случаен шум има информация за класа, свързана в края, а начинът за използване на тази информация е оставен на вътрешната работа на генератора. Дискриминаторът е малко по-сложен и информацията за класа е „подредена“ след първия слой на навиване. Дискусията относно най-добрия начин за включване на условната информация може да бъде намерена тук.

Кодът за тази реализация на cDCGAN архитектурата може да бъде намерен тук (коментарите са добре дошли), а по-долу са някои резултати от обучението.

Както може да се види, първоначалната загуба скача надолу за дискриминатора, тъй като той лесно класифицира истинските и фалшивите изображения, докато загубата на генератора се изкачва, докато се опитва да намери решение да заблуди дискриминатора. Можем да видим след кратък период на експериментиране генераторът започва да намира работещо решение, но след първоначален скок в производителността генераторът бавно се подобрява сравнително стабилно до около 4000 епохи.

Провеждането на обучението за по-дълго води до интересно разширяване на загубите за генератора, така че, за да се проучи това, обучението е проведено за 100 000 епохи. Това, което беше открито, беше интересно потвърждение на равновесната работна точка на противопоставящите се мрежи.

Както виждаме, крайните изображения изглеждат така, сякаш са дошли от набора от данни на MNIST.

И накрая гифче, показващо тренировъчния процес.