ОДНАК (Generative Adversarial Network) представляє передовий підхід до генеративного моделювання в рамках глибокого навчання, часто використовуючи такі архітектури, як згорткові нейронні мережі . Мета генеративного моделювання полягає в тому, щоб автономно ідентифікувати шаблони у вхідних даних, дозволяючи моделі виробляти нові приклади, які реально нагадують вихідний набір даних.
Ця стаття охоплює все, що вам потрібно знати GAN, архітектура GAN, робота GAN, типи моделей GAN тощо.
Зміст
- Що таке генеративна змагальна мережа?
- Типи ГАН
- Архітектура GAN
- Як працює GAN?
- Впровадження GAN
- Застосування генеративних змагальних мереж (GAN)
- Переваги GAN
- Недоліки GAN
- GAN (генеративна змагальна мережа) – поширені запитання
Що таке генеративна змагальна мережа?
Генеративні змагальні мережі (GAN) — це потужний клас нейронних мереж, які використовуються для навчання без контролю . GAN складаються з двох нейронні мережі , дискримінатор і генератор. Вони використовують змагальність для створення штучних даних, ідентичних фактичним даним.
- Генератор намагається ввести в оману Дискримінатор, якому поставлено завдання точно розрізнити створені та справжні дані, виробляючи випадкові зразки шуму.
- У результаті цієї конкурентної взаємодії створюються реалістичні високоякісні зразки, які рухають обидві мережі до прогресу.
- GAN виявилися надзвичайно універсальними інструментами штучного інтелекту, про що свідчить їх широке використання в синтезі зображень, передачі стилів і синтезі тексту в зображення.
- Вони також зробили революцію в генеративному моделюванні.
Завдяки змагальному навчанню ці моделі беруть участь у конкурентній взаємодії, доки генератор не навчиться створювати реалістичні зразки, обманюючи дискримінатора приблизно в половині випадків.
Генеративні змагальні мережі (GAN) можна розбити на три частини:
- Твірні: Вивчити генеративну модель, яка описує, як генеруються дані в термінах імовірнісної моделі.
- Змагальний: Слово змагальність означає протиставлення одного предмета іншому. Це означає, що в контексті GAN генеративний результат порівнюється з фактичними зображеннями в наборі даних. Механізм, відомий як дискримінатор, використовується для застосування моделі, яка намагається відрізнити справжні зображення від підроблених.
- мережі: Використовуйте глибокі нейронні мережі як алгоритми штучного інтелекту (AI) для навчальних цілей.
Типи ГАН
- Ванільний GAN: Це найпростіший тип GAN. Тут Генератор і Дискримінатор є простими базовими багатошарові перцептрони . У vanilla GAN алгоритм дуже простий, він намагається оптимізувати математичне рівняння за допомогою стохастичний градієнтний спуск.
- Умовний GAN (CGAN): CGAN можна описати як a глибоке навчання метод, в якому встановлюються деякі умовні параметри .
- У CGAN до Генератора додається додатковий параметр «y» для генерації відповідних даних.
- Мітки також додаються до входу дискримінатора, щоб дискримінатор міг відрізнити справжні дані від фальшивих.
- Глибока згортка GAN (DCGAN): DCGAN є одним із найпопулярніших, а також найуспішніших реалізацій GAN. Він складається з ConvNets замість багатошарові перцептрони .
- ConvNets реалізовано без максимального об’єднання, яке фактично замінено згортковим кроком.
- Крім того, шари з’єднані не повністю.
- Піраміда Лапласа GAN (LAPGAN): The Піраміда Лапласа це лінійне оборотне представлення зображення, що складається з набору смугових зображень, віддалених один від одного на октаву, плюс низькочастотний залишок.
- Цей підхід використовує декілька мереж генератора та дискримінатора і різні рівні піраміди Лапласа.
- Цей підхід використовується в основному, тому що він створює дуже якісні зображення. Зображення спочатку зменшується на кожному шарі піраміди, а потім воно знову масштабується на кожному шарі у зворотному проході, де зображення отримує деякий шум від умовного GAN на цих шарах, доки воно не досягне свого початкового розміру.
- Супер роздільна здатність GAN (SRGAN): СРГАН як випливає з назви, це спосіб розробки GAN, у якому a глибока нейронна мережа використовується разом із суперницькою мережею для отримання зображень із вищою роздільною здатністю. Цей тип GAN особливо корисний для оптимального масштабування оригінальних зображень із низькою роздільною здатністю, щоб покращити їх деталі, мінімізуючи при цьому помилки.
Архітектура GAN
Генеративна змагальна мережа (GAN) складається з двох основних частин, якими є Генератор і Дискримінатор.
Модель генератора
Ключовим елементом, відповідальним за створення свіжих, точних даних у Generative Adversarial Network (GAN), є модель генератора. Генератор приймає випадковий шум як вхідний сигнал і перетворює його на складні зразки даних, наприклад текст або зображення. Його зазвичай зображують як глибоку нейронну мережу.
Розповсюдження навчальних даних, що лежить в основі, охоплюється шарами параметрів, які можна вивчати, у своєму проекті за допомогою навчання. Генератор налаштовує вихідні дані для отримання зразків, які точно імітують реальні дані, під час навчання за допомогою зворотного поширення для точного налаштування параметрів.
Здатність генератора генерувати високоякісні, різноманітні зразки, які можуть обдурити дискримінатора, ось що робить його успішним.
Втрата генератора
Метою генератора в GAN є створення синтетичних зразків, які є достатньо реалістичними, щоб обдурити дискримінатора. Генератор досягає цього шляхом мінімізації своєї функції втрат
Де,
J_G виміряти, наскільки добре генератор обманює дискримінатор.- журнал
D(G(z_i) ) представляє логарифмічну ймовірність правильності дискримінатора для згенерованих вибірок. - Генератор прагне мінімізувати ці втрати, заохочуючи виробництво зразків, які дискримінатор класифікує як справжні
(log D(G(z_i)) , близько до 1.
Модель дискримінатора
Штучна нейронна мережа, яка називається дискримінаторною моделлю, використовується в генеративних змагальних мережах (GAN) для розрізнення генерованого та фактичного вхідних даних. Оцінюючи вхідні зразки та розподіляючи ймовірність автентичності, дискримінатор функціонує як двійковий класифікатор.
З часом дискримінатор навчиться відрізняти справжні дані з набору даних від штучних зразків, створених генератором. Це дозволяє йому поступово відточувати свої параметри та підвищувати рівень майстерності.
Згорткові шари або відповідні структури для інших модальностей зазвичай використовуються в його архітектурі при роботі з даними зображення. Метою змагальної процедури навчання є максимізація здатності дискримінатора точно ідентифікувати створені зразки як шахрайські, а справжні — як автентичні. Дискримінатор стає все більш дискримінаційним у результаті взаємодії генератора та дискримінатора, що допомагає GAN створювати надзвичайно реалістичні синтетичні дані в цілому.
Втрата дискримінатора
Дискримінатор зменшує ймовірність негативного логарифму правильної класифікації як виготовлених, так і реальних зразків. Ця втрата стимулює дискримінатор точно класифікувати згенеровані зразки як підроблені та справжні зразки за допомогою наступного рівняння:
J_D оцінює здатність дискримінатора розрізняти виготовлені та фактичні зразки.- Журнал вірогідності того, що дискримінатор точно класифікує реальні дані, представлений
logD(x_i) . - Імовірність журналу, що дискримінатор правильно класифікує згенеровані зразки як підроблені, представлено
log(1-D(G(z_i))) . - Дискримінатор прагне зменшити цю втрату шляхом точної ідентифікації штучних і справжніх зразків.
MinMax Loss
У Generative Adversarial Network (GAN) формула мінімаксних втрат надається:
Де,
- G — генераторна мережа, а D — дискримінаторна мережа
- Фактичні вибірки даних, отримані з істинного розподілу даних
p_{data}(x) представлені x. - Випадковий шум, взятий із попереднього розподілу
p_z(z) (зазвичай нормальний або рівномірний розподіл) позначається z. - D(x) представляє ймовірність того, що дискримінатор правильно ідентифікує фактичні дані як реальні.
- D(G(z)) — це ймовірність того, що дискримінатор ідентифікує згенеровані дані, що надходять від генератора, як автентичні.

Як працює GAN?
Етапи роботи GAN:
- Ініціалізація: Створюються дві нейронні мережі: генератор (G) і дискримінатор (D).
- G має завдання створювати нові дані, як-от зображення чи текст, які дуже схожі на реальні дані.
- D діє як критик, намагаючись відрізнити реальні дані (з навчального набору даних) і дані, створені G.
- Перший хід генератора: G приймає як вхідний вектор випадкового шуму. Цей вектор шуму містить випадкові значення та діє як відправна точка для процесу створення G. Використовуючи свої внутрішні шари та вивчені шаблони, G перетворює вектор шуму в новий зразок даних, як згенероване зображення.
- Хід дискримінатора: D отримує два типи вхідних даних:
- Реальні зразки даних із навчального набору даних.
- Вибірки даних, згенеровані G на попередньому кроці. Робота D полягає в тому, щоб проаналізувати кожен вхід і визначити, чи це реальні дані, чи щось придумане G. Він видає оцінку ймовірності від 0 до 1. Оцінка 1 означає, що дані, ймовірно, справжні, а 0 означає, що вони підроблені.
- Процес навчання: Тепер настає змагальна частина:
- Якщо D правильно визначає реальні дані як справжні (оцінка, близька до 1), а згенеровані дані — як підроблені (оцінка, близька до 0), і G, і D отримують невелику винагороду. Це тому, що вони обидва добре виконують свою роботу.
- Однак головне — постійно вдосконалюватися. Якщо D постійно все правильно визначає, він мало чого навчиться. Отже, мета полягає в тому, щоб G зрештою обдурила D.
- Покращення генератора:
- Коли D помилково позначає творіння G як реальне (оцінка близька до 1), це означає, що G на правильному шляху. У цьому випадку G отримує значне позитивне оновлення, тоді як D отримує штраф за те, що його обдурили.
- Цей відгук допомагає G покращити процес генерації для створення більш реалістичних даних.
- Адаптація дискримінатора:
- І навпаки, якщо D правильно ідентифікує підроблені дані G (оцінка близька до 0), але G не отримує винагороди, D ще більше посилює свої здібності до розрізнення.
- Ця безперервна дуель між G і D з часом покращує обидві мережі.
У міру навчання G стає кращим у створенні реалістичних даних, тому D стає важче відрізнити їх. В ідеалі G стає настільки вправним, що D не може достовірно відрізнити справжні дані від підроблених. На даний момент G вважається добре навченим і може використовуватися для створення нових реалістичних зразків даних.
java end for цикл
Впровадження Generative Adversarial Network (GAN)
Ми виконаємо та зрозуміємо кроки, щоб зрозуміти, як реалізовано GAN:
Крок 1: імпорт необхідних бібліотек
Python3
import> torch> import> torch.nn as nn> import> torch.optim as optim> import> torchvision> from> torchvision>import> datasets, transforms> import> matplotlib.pyplot as plt> import> numpy as np> # Set device> device>=> torch.device(>'cuda'> if> torch.cuda.is_available()>else> 'cpu'>)> |
For training on the CIFAR-10 image dataset, this PyTorch module creates a Generative Adversarial Network (GAN), switching between generator and discriminator training. Visualization of the generated images occurs every tenth epoch, and the development of the GAN is tracked. Step 2: Defining a TransformThe code uses PyTorch’s transforms to define a simple picture transforms.Compose. It normalizes and transforms photos into tensors. Python3 # Define a basic transform transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) Step 3: Loading the Dataset A CIFAR-10 dataset is created for training with below code, which also specifies a root directory, turns on train mode, downloads if needed, and applies the specified transform. Subsequently, it generates a 32-batch DataLoader and shuffles the training set of data. Python3 train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform) dataloader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) Step 4: Defining parameters to be used in later processes A Generative Adversarial Network (GAN) is used with specified hyperparameters. The latent space’s dimensionality is represented by latent_dim. lr is the optimizer’s learning rate. The coefficients for the Adam optimizer are beta1 and beta2. To find the total number of training epochs, use num_epochs. Python3 # Hyperparameters latent_dim = 100 lr = 0.0002 beta1 = 0.5 beta2 = 0.999 num_epochs = 10 Step 5: Defining a Utility Class to Build the Generator The generator architecture for a GAN in PyTorch is defined with below code. From nn.Module , the Generator class inherits. It is comprised of a sequential model with Tanh, linear, convolutional, batch normalization, reshaping, and upsampling layers. The neural network synthesizes an image (img) from a latent vector (z), which is the generator’s output. The architecture uses a series of learned transformations to turn the initial random noise in the latent space into a meaningful image. Python3 # Define the generator class Generator(nn.Module): def __init__(self, latent_dim): super(Generator, self).__init__() self.model = nn.Sequential( nn.Linear(latent_dim, 128 * 8 * 8), nn.ReLU(), nn.Unflatten(1, (128, 8, 8)), nn.Upsample(scale_factor=2), nn.Conv2d(128, 128, kernel_size=3, padding=1), nn.BatchNorm2d(128, momentum=0.78), nn.ReLU(), nn.Upsample(scale_factor=2), nn.Conv2d(128, 64, kernel_size=3, padding=1), nn.BatchNorm2d(64, momentum=0.78), nn.ReLU(), nn.Conv2d(64, 3, kernel_size=3, padding=1), nn.Tanh() ) def forward(self, z): img = self.model(z) return img Step 6: Defining a Utility Class to Build the Discriminator The PyTorch code describes the discriminator architecture for a GAN. The class Discriminator is descended from nn.Module. It is composed of linear layers, batch normalization, dropout , convolutional, LeakyReLU , and sequential layers. An image (img) is the discriminator’s input, and its validity—the probability that the input image is real as opposed to artificial—is its output. Python3 # Define the discriminator class Discriminator(nn.Module): def __init__(self): super(Discriminator, self).__init__() self.model = nn.Sequential( nn.Conv2d(3, 32, kernel_size=3, stride=2, padding=1), nn.LeakyReLU(0.2), nn.Dropout(0.25), nn.Conv2d(32, 64, kernel_size=3, stride=2, padding=1), nn.ZeroPad2d((0, 1, 0, 1)), nn.BatchNorm2d(64, momentum=0.82), nn.LeakyReLU(0.25), nn.Dropout(0.25), nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1), nn.BatchNorm2d(128, momentum=0.82), nn.LeakyReLU(0.2), nn.Dropout(0.25), nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1), nn.BatchNorm2d(256, momentum=0.8), nn.LeakyReLU(0.25), nn.Dropout(0.25), nn.Flatten(), nn.Linear(256 * 5 * 5, 1), nn.Sigmoid() ) def forward(self, img): validity = self.model(img) return validity Step 7: Building the Generative Adversarial Network The code snippet defines and initializes a discriminator (Discriminator) and a generator (Generator). The designated device (GPU if available) receives both models. Binary Cross Entropy Loss, which is frequently used for GANs, is selected as the loss function (adversarial_loss). For the generator (optimizer_G) and discriminator (optimizer_D), distinct Adam optimizers with predetermined learning rates and betas are also defined. Python3 # Define the generator and discriminator # Initialize generator and discriminator generator = Generator(latent_dim).to(device) discriminator = Discriminator().to(device) # Loss function adversarial_loss = nn.BCELoss() # Optimizers optimizer_G = optim.Adam(generator.parameters() , lr=lr, betas=(beta1, beta2)) optimizer_D = optim.Adam(discriminator.parameters() , lr=lr, betas=(beta1, beta2)) Step 8: Training the Generative Adversarial Network For a Generative Adversarial Network (GAN), the code implements the training loop. The training data batches are iterated through during each epoch. Whereas the generator (optimizer_G) is trained to generate realistic images that trick the discriminator, the discriminator (optimizer_D) is trained to distinguish between real and phony images. The generator and discriminator’s adversarial losses are computed. Model parameters are updated by means of Adam optimizers and the losses are backpropagated. Discriminator printing and generator losses are used to track progress. For a visual assessment of the training process, generated images are additionally saved and shown every 10 epochs. Python3 # Training loop for epoch in range(num_epochs): for i, batch in enumerate(dataloader): # Convert list to tensor real_images = batch[0].to(device) # Adversarial ground truths valid = torch.ones(real_images.size(0), 1, device=device) fake = torch.zeros(real_images.size(0), 1, device=device) # Configure input real_images = real_images.to(device) # --------------------- # Train Discriminator # --------------------- optimizer_D.zero_grad() # Sample noise as generator input z = torch.randn(real_images.size(0), latent_dim, device=device) # Generate a batch of images fake_images = generator(z) # Measure discriminator's ability # to classify real and fake images real_loss = adversarial_loss(discriminator (real_images), valid) fake_loss = adversarial_loss(discriminator (fake_images.detach()), fake) d_loss = (real_loss + fake_loss) / 2 # Backward pass and optimize d_loss.backward() optimizer_D.step() # ----------------- # Train Generator # ----------------- optimizer_G.zero_grad() # Generate a batch of images gen_images = generator(z) # Adversarial loss g_loss = adversarial_loss(discriminator(gen_images), valid) # Backward pass and optimize g_loss.backward() optimizer_G.step() # --------------------- # Progress Monitoring # --------------------- if (i + 1) % 100 == 0: print( f'Epoch [{epoch+1}/{num_epochs}] Batch {i+1}/{len(dataloader)} ' f'Discriminator Loss: {d_loss.item():.4f} ' f'Generator Loss: {g_loss.item():.4f}' ) # Save generated images for every epoch if (epoch + 1) % 10 == 0: with torch.no_grad(): z = torch.randn(16, latent_dim, device=device) generated = generator(z).detach().cpu() grid = torchvision.utils.make_grid(generated, nrow=4, normalize=True) plt.imshow(np.transpose(grid, (1, 2, 0))) plt.axis('off') plt.show() Output: Epoch [10/10] Batch 1300/1563 Discriminator Loss: 0.4473 Generator Loss: 0.9555 Epoch [10/10] Batch 1400/1563 Discriminator Loss: 0.6643 Generator Loss: 1.0215 Epoch [10/10] Batch 1500/1563 Discriminator Loss: 0.4720 Generator Loss: 2.5027 GAN Output Application Of Generative Adversarial Networks (GANs)GANs, or Generative Adversarial Networks, have many uses in many different fields. Here are some of the widely recognized uses of GANs: Image Synthesis and Generation : GANs are often used for picture synthesis and generation tasks, They may create fresh, lifelike pictures that mimic training data by learning the distribution that explains the dataset. The development of lifelike avatars, high-resolution photographs, and fresh artwork have all been facilitated by these types of generative networks. Image-to-Image Translation : GANs may be used for problems involving image-to-image translation, where the objective is to convert an input picture from one domain to another while maintaining its key features. GANs may be used, for instance, to change pictures from day to night, transform drawings into realistic images, or change the creative style of an image. Text-to-Image Synthesis : GANs have been used to create visuals from descriptions in text. GANs may produce pictures that translate to a description given a text input, such as a phrase or a caption. This application might have an impact on how realistic visual material is produced using text-based instructions. Data Augmentation : GANs can augment present data and increase the robustness and generalizability of machine-learning models by creating synthetic data samples. Data Generation for Training : GANs can enhance the resolution and quality of low-resolution images. By training on pairs of low-resolution and high-resolution images, GANs can generate high-resolution images from low-resolution inputs, enabling improved image quality in various applications such as medical imaging, satellite imaging, and video enhancement.Advantages of GANThe advantages of the GANs are as follows: Synthetic data generation : GANs can generate new, synthetic data that resembles some known data distribution, which can be useful for data augmentation, anomaly detection, or creative applications. High-quality results : GANs can produce high-quality, photorealistic results in image synthesis, video synthesis, music synthesis, and other tasks. Unsupervised learning : GANs can be trained without labeled data, making them suitable for unsupervised learning tasks, where labeled data is scarce or difficult to obtain. Versatility : GANs can be applied to a wide range of tasks, including image synthesis, text-to-image synthesis, image-to-image translation, anomaly detection , The disadvantages of the GANs are as follows: Training Instability : GANs can be difficult to train, with the risk of instability, mode collapse, or failure to converge. Computational Cost : GANs can require a lot of computational resources and can be slow to train, especially for high-resolution images or large datasets. Overfitting : GANs can overfit the training data, producing synthetic data that is too similar to the training data and lacking diversity. Bias and Fairness : GANs can reflect the biases and unfairness present in the training data, leading to discriminatory or biased synthetic data. Interpretability and Accountability : GANs can be opaque and difficult to interpret or explain, making it challenging to ensure accountability, transparency, or fairness in their applications.GAN(Generative Adversarial Network)- FAQs Q1. What is a Generative Adversarial Network(GAN)?An artificial intelligence model known as a GAN is made up of two neural networks—a discriminator and a generator—that were developed in tandem using adversarial training. The discriminator assesses the new data instances for authenticity, while the generator produces new ones. Q2. What are the main applications of GAN?Generating images and videos, transferring styles, enhancing data, translating images to other images, producing realistic synthetic data for machine learning model training, and super-resolution are just a few of the many uses for GANs. Q3. What challenges do GAN face?GANs encounter difficulties such training instability, mode collapse (when the generator generates a limited range of samples), and striking the correct balance between the discriminator and generator. It’s frequently necessary to carefully build the model architecture and tune the hyperparameters. Q4. How are GAN evaluated?The produced samples’ quality, diversity, and resemblance to real data are the main criteria used to assess GANs. For quantitative assessment, metrics like the Fréchet Inception Distance (FID) and Inception Score are frequently employed. Q5. Can GAN be used for tasks other than image generation ?Yes, different tasks can be assigned to GANs. Text, music, 3D models, and other things have all been generated with them. The usefulness of conditional GANs is expanded by enabling the creation of specific content under certain input conditions. Q6. What are some famous architectures of GANs ?A few well-known GAN architectures are Progressive GAN (PGAN), Wasserstein GAN (WGAN), Conditional GAN (cGAN), Deep Convolutional GAN (DCGAN), and Vanilla GAN. Each has special qualities and works best with particular kinds of data and tasks.>