Generative Adversarial Network (GAN)
Mạng đối sinh tổng quát (GAN) huấn luyện generator đối kháng với discriminator cho đến khi các mẫu của generator được xem là thật. Nội dung đề cập đến cách huấn luyện, các biến thể và ứng dụng.
Mạng đối kháng tạo sinh (GAN) là một model AI tạo sinh gồm hai mạng neural được huấn luyện đối đầu nhau: bộ sinh biến nhiễu ngẫu nhiên thành mẫu, còn bộ phân biệt cố gắng phân biệt các mẫu đó với dữ liệu huấn luyện thật. Sau khi huấn luyện, bộ sinh tạo hình ảnh, âm thanh hoặc bản ghi dạng bảng mới chỉ trong một lượt truyền xuôi. Ian Goodfellow và các cộng sự tại Université de Montréal giới thiệu GAN trong bài báo năm 2014 Mạng đối kháng tạo sinh; GAN dẫn đầu lĩnh vực tổng hợp hình ảnh cho đến khi model khuếch tán vượt qua vào năm 2021.
Cách huấn luyện GAN hoạt động#
Hai mạng tham gia một trò chơi minimax. Bộ phân biệt là bộ phân loại nhị phân, xuất ra xác suất đầu vào của nó là mẫu thật; bộ này được huấn luyện bằng hàm mất mát entropy chéo để chấm mẫu thật là 1 và mẫu được tạo là 0. Bộ sinh không bao giờ thấy dữ liệu thật và chỉ học từ gradient của bộ phân biệt. Tại điểm tối ưu lý thuyết của trò chơi, phân phối được tạo ra trùng khớp với phân phối dữ liệu và bộ phân biệt xuất ra 0.5 cho mọi đầu vào. Ở giai đoạn đầu huấn luyện, khi mẫu giả dễ bị phát hiện, mục tiêu ban đầu của bộ sinh gần như không tạo ra gradient, dẫn đến một dạng của vấn đề gradient biến mất; vì vậy, bài báo của Goodfellow đặt mục tiêu cho bộ sinh tối đa hóa xác suất bộ phân biệt gọi các mẫu của nó là thật. Đoạn code dưới đây sử dụng hàm mất mát không bão hòa này.
Một GAN một chiều trong PyTorch học phân phối Gaussian chỉ từ các mẫu:
import torch
from torch import nn
torch.manual_seed(0)
# Generator maps 8-D noise to a number; discriminator scores a number as real (high) or fake (low)
generator = nn.Sequential(nn.Linear(8, 32), nn.ReLU(), nn.Linear(32, 1))
discriminator = nn.Sequential(nn.Linear(1, 32), nn.LeakyReLU(0.2), nn.Linear(32, 1))
opt_g = torch.optim.Adam(generator.parameters(), lr=1e-3)
opt_d = torch.optim.Adam(discriminator.parameters(), lr=1e-3)
bce = nn.BCEWithLogitsLoss()
real_label, fake_label = torch.ones(64, 1), torch.zeros(64, 1)
for step in range(3000):
real = 4.0 + 1.25 * torch.randn(64, 1) # training data: samples from N(4, 1.25^2)
fake = generator(torch.randn(64, 8))
# Discriminator step: label real samples 1 and generated samples 0
loss_d = bce(discriminator(real), real_label) + bce(discriminator(fake.detach()), fake_label)
opt_d.zero_grad()
loss_d.backward()
opt_d.step()
# Generator step: push the discriminator to label generated samples 1
loss_g = bce(discriminator(fake), real_label)
opt_g.zero_grad()
loss_g.backward()
opt_g.step()
samples = generator(torch.randn(10000, 8)).detach()
print(f"Generated mean {samples.mean():.2f}, std {samples.std():.2f} (data: 4.00, 1.25)")
print(f"Discriminator's average P(real) on generated samples: {torch.sigmoid(discriminator(samples)).mean():.2f}")Sau 3.000 bước luân phiên, các mẫu được tạo có giá trị trung bình 3.95 và độ lệch chuẩn 1.20, so với 4.00 và 1.25 của dữ liệu; bộ phân biệt gán cho chúng xác suất trung bình 0.51 là thật, gần với xác suất tung đồng xu của điểm tối ưu lý thuyết.
Các biến thể GAN chính#
- DCGAN: Thiết kế năm 2015 của Alec Radford, Luke Metz và Soumith Chintala giúp bộ sinh và bộ phân biệt tích chập huấn luyện ổn định, thay các lớp pooling bằng tích chập có stride và bổ sung batch normalization.
- GAN có điều kiện và pix2pix: Cung cấp nhãn lớp hoặc hình ảnh đầu vào cho cả hai mạng giúp bộ sinh tạo ra đầu ra theo yêu cầu. pix2pix (2017) của Phillip Isola và các cộng sự học cách chuyển đổi giữa các cặp dữ liệu, chẳng hạn từ bản đồ nhãn sang ảnh đường phố và từ đường viền sang ảnh sản phẩm.
- CycleGAN: Học cách chuyển đổi giữa hai tập hợp hình ảnh không có ví dụ ghép cặp, chẳng hạn ngựa thành ngựa vằn hoặc phong cảnh mùa hè thành mùa đông, bằng cách yêu cầu hình ảnh sau chuyển đổi có thể được ánh xạ ngược về hình ảnh ban đầu.
- GAN Wasserstein (WGAN): Năm 2017, Martin Arjovsky và các cộng sự thay bộ phân loại bằng một critic ước tính khoảng cách Wasserstein giữa dữ liệu thật và dữ liệu được tạo; cách này duy trì gradient hữu ích ngay cả khi hai phân phối hầu như không chồng lấp.
- StyleGAN: StyleGAN (2018) và StyleGAN2 (2019) của NVIDIA đưa một vector style đã học vào mọi lớp của bộ sinh. StyleGAN2 đạt Fréchet Inception Distance (FID) 2.84 trên khuôn mặt kích thước 1024 x 1024 trong tập dữ liệu FFHQ.
Ứng dụng#
- Siêu phân giải: SRGAN (2017), ESRGAN (2018) và Real-ESRGAN (2021) bổ sung hàm mất mát đối kháng vào các mạng phóng to ảnh, giúp khôi phục kết cấu sắc nét ở những nơi mà chỉ dùng hàm mất mát theo pixel sẽ tạo ra hình ảnh mờ.
- Tăng cường ảnh y tế: Maayan Frid-Adar và các cộng sự huấn luyện GAN trên ảnh CT của 182 tổn thương gan rồi bổ sung các tổn thương tổng hợp vào tập huấn luyện; độ nhạy của bộ phân loại tăng từ 78.6% lên 85.7% và độ đặc hiệu tăng từ 88.4% lên 92.4%.
- Deepfake: Trong nghiên cứu năm 2022 của Sophie Nightingale và Hany Farid, người tham gia xác định khuôn mặt StyleGAN2 là thật hay tổng hợp với độ chính xác 48%, thấp hơn một chút so với đoán ngẫu nhiên, đồng thời đánh giá khuôn mặt tổng hợp đáng tin hơn.
Hình ảnh do GAN tạo ra được dùng làm dữ liệu tổng hợp khi thiếu ví dụ thật, như một lớp tăng cường dữ liệu bổ sung cho các phép biến đổi hình học như lật và xoay. Những hình ảnh này được đưa vào tập huấn luyện YOLO26 giống như mọi hình ảnh khác: phần train trong YAML tập dữ liệu phát hiện của Ultralytics chấp nhận danh sách thư mục, vì vậy hình ảnh tổng hợp có thể nằm trong thư mục riêng bên cạnh hình ảnh thật và được thêm hoặc xóa chỉ bằng cách chỉnh sửa một dòng.
GAN so với model khuếch tán và VAE#
Model khuếch tán vượt GAN về chất lượng hình ảnh sau khi Prafulla Dhariwal và Alex Nichol của OpenAI báo cáo năm 2021 rằng một model khuếch tán đạt FID tốt hơn BigGAN-deep trên ImageNet, khi đó là GAN mạnh nhất. Huấn luyện khuếch tán là một bài toán hồi quy ổn định, không có đối kháng, và bao quát đầy đủ hơn sự đa dạng của dữ liệu. Huấn luyện GAN có thể dao động mà không hội tụ hoặc rơi vào tình trạng sụp đổ mode, trong đó bộ sinh chỉ chọn một vài đầu ra đánh lừa được bộ phân biệt và ngừng tạo các đầu ra còn lại. Bộ mã hóa tự động biến phân cũng huấn luyện ổn định, nhưng tạo ra các mẫu mờ hơn. Ưu điểm lâu dài của GAN là tốc độ, vì lấy mẫu chỉ cần một lượt truyền xuôi: GigaGAN, từ Adobe Research, Carnegie Mellon University và POSTECH, tạo kết quả từ văn bản sang hình ảnh ở độ phân giải 512 pixel trong 0.13 giây vào năm 2023. Hàm mất mát đối kháng cũng được duy trì trong các hệ thống khuếch tán. Bộ mã hóa tự động của Stable Diffusion được huấn luyện bằng bộ phân biệt dựa trên patch; SDXL Turbo của Stability AI dùng chưng cất khuếch tán đối kháng, một dạng chưng cất tri thức có bộ phân biệt trong hàm mất mát, để tạo hình ảnh chỉ trong một bước.










