Huấn luyện GAN: ổn định, lỗi thường gặp và đánh giá
Một lưới ảnh vừa sinh trông như một khuôn lặp lại: cùng một chữ số, hoặc cùng một khuôn mặt. Chúng không vỡ thành nhiễu. Chúng hết đa dạng. Đó là mode collapse: mạng sinh kẹt ở vài mẫu đánh lừa được mạng phân biệt, thay vì phủ các kiểu của dữ liệu thật. Mạng phân biệt cũng có thể thắng tuyệt đối, chấm thật gần 1 và giả gần 0, nên mạng sinh hết hướng để sửa.
Bài hỏi cách đọc các tín hiệu ấy, và cách đánh giá mẫu khi độ chính xác của mạng phân biệt không đủ làm thước. Bài không dựng lại phép sinh từ nhiễu, cũng không chọn họ kiến trúc. Trò chơi là: mạng sinh, gọi là Generator, ký hiệu , tạo mẫu từ nhiễu; mạng phân biệt, gọi là Discriminator, ký hiệu , tách thật khỏi giả; hai bên cùng đổi, nên điểm bên này phụ thuộc bên kia.
Đường đọc nhanh. Đọc mục 1 đến mục 4, rồi mục 6. Mục Đào sâu về khoảng cách Wasserstein nằm ngoài đường đó. Bảng chẩn đoán và phần mang đi vẫn thuộc đường đọc nhanh.
1. Vì sao mặt mất mát không đứng yên
Với bộ phân loại thông thường, hàm mục tiêu đứng yên. Tham số bước theo gradient của loss , với tốc độ học . Gradient là hướng đổi tham số làm loss thay đổi nhanh nhất:
Trong GAN, khi Generator cập nhật, hàm đang chấm nó chính là Discriminator, và Discriminator cũng vừa đổi. Có thể hình dung ta đi xuống một sườn đồi trong lúc mặt đồi liên tục biến dạng. Sơ đồ một vòng của sự phụ thuộc ấy:
Quỹ đạo có thể tới gần cân bằng, quay vòng, hoặc để một mạng bỏ xa mạng kia. Loss giảm chưa chứng minh mẫu đang khá hơn.
2. Bốn cách tín hiệu học bị hỏng
Mode collapse
Generator tạo ảnh trông ổn nhưng các ảnh rất giống nhau. Với chữ số viết tay, một lưới trăm ảnh có thể gần như chỉ còn số 1 và số 7. Generator lặp vài mẹo qua mặt Discriminator, thay vì phủ phân phối dữ liệu, tức quy luật mật độ của tập thật.
Dấu hiệu đi cùng: nhiều nhiễu cho ra gần như một khuôn; nội suy trong không gian tiềm ẩn, không gian các véctơ nhiễu, đổi rất ít hoặc nhảy giữa vài mẫu; recall thấp. Recall, định nghĩa ở mục 6, đo mức phủ dữ liệu thật. FID, cũng ở mục đó, có thể chưa phản ánh hết mức collapse.
Discriminator quá mạnh
Ngay từ đầu, điểm trên mẫu thật đã gần 1 và điểm trên mẫu giả đã gần 0:
Discriminator phân loại quá dễ. Với mục tiêu minimax gốc, số hạng rất phẳng, nên gradient cho Generator yếu. Đó là một lý do loss không bão hòa, dạng âm logarit điểm , được dùng rộng [1]. Ta cần mạng đủ mạnh để tín hiệu có nghĩa, nhưng không thắng tuyệt đối suốt quá trình và không học vẹt tập huấn luyện.
Generator lấn át Discriminator
Chiều kia cũng hỏng. Discriminator chưa học đặc trưng thật sự tách được thật khỏi giả, trong khi Generator đã khai thác đúng điểm mù của nó. Gradient gửi về Generator khi đó không còn đi cùng chất lượng ta nhìn thấy.
Dấu hiệu thường gặp: chấm cao cả ảnh thật lẫn ảnh giả; chất lượng mẫu dao động mạnh; loss của trông đẹp trong khi ảnh không khá hơn.
Discriminator học vẹt khi dữ liệu ít
Tập nhỏ khiến Discriminator có thể nhớ ảnh train thay vì học đặc điểm chung. Tín hiệu gửi cho Generator trở nên kém. StyleGAN2-ADA xử lý ca này bằng adaptive discriminator augmentation: tự chỉnh cường độ biến đổi ảnh, như cắt xén hay đổi màu nhẹ, để Discriminator ở lại vùng còn học được [8].
3. Đọc loss đối kháng khác loss phân loại
Giả sử ta dùng BCE không bão hòa. BCE, binary cross-entropy, phạt điểm khi nó lệch nhãn 0 hoặc 1. Loss của Discriminator kéo điểm mẫu thật lên và điểm mẫu giả xuống. Loss của Generator kéo điểm mẫu giả lên. Hai hàm đó là:
Kỳ vọng là trung bình trên các mẫu đang lấy. Không có quy tắc loss càng gần 0 càng tốt cho cả hai. rất thấp có thể nghĩa Discriminator đang thắng quá dễ. tăng có thể xảy ra đúng lúc Discriminator vừa mạnh lên, trong khi mẫu sinh đang khá dần. Dao động ở mức vừa là việc bình thường của một trò chơi hai người.
Độ chính xác của Discriminator, tỉ lệ chấm đúng thật hoặc đúng giả, rơi vào cùng bẫy. Quanh 50% có thể là cân bằng đáng muốn, cũng có thể là cả hai mạng chưa học gì. Gần 100% kéo dài thường nghĩa người giám định thắng tuyệt đối và người làm giả hết gradient hữu ích. Accuracy vì vậy không đủ để kết luận phân phối đã được học. Mẫu và các thước ở mục 6 mới trả lời câu đó.
Trước khi tới các thước phân phối, hãy log cùng lúc các số còn đọc được bằng mắt:
- điểm trên ảnh thật;
- điểm trước và sau bước cập nhật Generator;
- và ;
- ảnh sinh từ một tập nhiễu cố định;
- sau đó mới tới FID, KID, và precision/recall nếu pipeline có.
4. Nhiễu cố định: nhìn cùng một điểm trong không gian tiềm ẩn
Trước khi train, tạo một tập nhiễu không đổi:
fixed_z = torch.randn(64, latent_dim, device=device)
Cứ sau một số epoch, sinh ảnh từ đúng tập này. Epoch là một lượt đi qua tập huấn luyện. Cùng một tọa độ tiềm ẩn cho thấy vị trí đó tiến hóa ra sao. Nếu mỗi lần lại rút nhiễu mới, ta không tách được hai chuyện: model khá hơn, hay chỉ là mẫu mới tình cờ dễ nhìn hơn.
Khi mode collapse xảy ra, lưới fixed noise đứng yên hoặc chỉ nhảy giữa vài khuôn. Đó là kiểm tra rẻ, làm trước mọi chỉ số đặc trưng.
5. DCGAN: vài ràng buộc kiến trúc cho tín hiệu đỡ gãy
DCGAN đưa tích chập vào GAN và kèm vài ràng buộc giúp huấn luyện đỡ vỡ [2]. Tích chập, convolution, là phép trượt bộ lọc trên lưới ảnh. Gợi ý thường được nhắc: convolution có stride để đổi kích thước thay cho pooling, transposed convolution trong Generator, và Batch Normalization ở vị trí phù hợp. Pooling gộp một vùng ảnh bằng quy tắc cố định. Batch Normalization chuẩn hóa kích hoạt trong từng batch, nhóm mẫu của một bước.
Hình trích dưới đây, từ tài liệu tham khảo, vẽ Generator nở một véctơ nhiễu thành các khối không gian lớn dần tới ảnh đầu ra:

Nguồn: Nguyễn Thanh Tuấn, Deep Learning Cơ Bản, v2 (2020), tr. 282.
Hình kế tiếp vẽ chiều ngược. Discriminator nhận ảnh, thu nhỏ không gian, tăng số kênh đặc trưng, rồi ra một điểm:

Nguồn: Nguyễn Thanh Tuấn, Deep Learning Cơ Bản, v2 (2020), tr. 285.
Cấu hình kinh điển đi cùng các hình đó. Generator dùng ReLU, hàm giữ phần dương, ở phần lớn tầng ẩn, và tanh ở đầu ra. tanh nén đầu ra vào đoạn từ đến , nên ảnh đầu vào cần được scale về đúng đoạn ấy. Discriminator dùng LeakyReLU, một ReLU vẫn để lọt dốc nhỏ khi đầu vào âm. Mạng tự học cách phóng và thu, thay vì dựa vào pooling. Đây là điểm khởi đầu thực dụng, không phải luật của mọi GAN sau này.
6. FID, KID, precision và recall
Accuracy của Discriminator đã không đủ, như mục 3. Mô hình sinh còn phải cân hai việc khác. Fidelity là từng mẫu gần dữ liệu thật. Diversity, hay coverage, là mức phủ các mode, tức các kiểu, của dữ liệu thật. Một khuôn mặt đẹp lặp mười nghìn lần có fidelity trên một mode và diversity gần như không còn. Đó là mode collapse nhìn từ phía thước đo.
FID
FID, Fréchet Inception Distance, so sánh đặc trưng ảnh thật và ảnh sinh trong một mạng Inception [5]. Mạng đó là bộ phân loại ảnh dùng như bộ trích đặc trưng cố định. Nếu đặc trưng gần phân phối Gaussian, hình chuông nhiều chiều, FID là khoảng cách giữa hai hình chuông: lệch trung bình cộng lệch hiệp phương sai . Vết là tổng đường chéo.
FID thấp hơn thường tốt hơn. So sánh chỉ đứng khi protocol giống nhau: cùng tiền xử lý, cùng bộ trích đặc trưng, cùng cách lấy số mẫu.
KID
KID, Kernel Inception Distance, so sánh đặc trưng Inception bằng Maximum Mean Discrepancy, khoảng cách giữa hai trung bình trong một không gian có kernel. Estimator của KID không chệch. Với tập nhỏ, KID là thước bổ sung. StyleGAN2-ADA nhấn mạnh FID có bias đáng kể khi dữ liệu ít [8]. Bài này không gán một con số cho độ bias đó.
Precision và recall của mô hình sinh
Precision và recall ở đây không phải của một bộ phân loại. Manifold dữ liệu thật là tập mẫu hợp lệ nằm trên cấu trúc thấp chiều hơn không gian pixel.
Precision cao: mẫu sinh thường nằm gần manifold thật. Recall cao: model phủ nhiều vùng của manifold ấy. Cặp này bắt ca FID tương đối ổn nhưng vẫn thiếu diversity [7]. Mode collapse thường kéo recall xuống trong khi vài mẫu vẫn đẹp.
7. Protocol tối thiểu khi so hai lần chạy
Một protocol, quy trình đo giữ cố định, đủ để khỏi tự lừa mình:
- Cố định seed, hạt giống của số ngẫu nhiên, cho lúc đánh giá.
- Sinh đủ số mẫu, ví dụ 10.000 hoặc 50.000 tùy tập dữ liệu.
- Dùng cùng tiền xử lý cho ảnh thật và ảnh giả.
- Báo FID và KID.
- Báo precision và recall nếu bộ đo hỗ trợ.
- Hiện một lưới ảnh ngẫu nhiên, không chỉ ảnh đẹp nhất.
- Hiện tiến trình fixed noise qua các epoch.
- Kiểm tra láng giềng gần nhất giữa ảnh sinh và ảnh train, để phát hiện ghi nhớ.
- Nếu có điều kiện theo lớp, kiểm từng lớp, không chỉ một số gộp.
- Chạy nhiều seed nếu muốn kết luận về một cải tiến nhỏ.
Nghiên cứu quy mô lớn cho thấy kết luận GAN này tốt hơn GAN kia có thể đổi mạnh theo tuning và random restart [6]. Protocol, seed, tiền xử lý và ngân sách tính toán cần được giữ có kiểm soát.
8. Đào sâu: đo khoảng cách trước, phạt gradient sau
Một vấn đề của GAN gốc là khi phân phối thật và phân phối sinh nằm trên các manifold gần như không giao, divergence dùng trong trò chơi gốc có thể cho gradient kém. Divergence ở đây là một số đo độ khác nhau của hai phân phối. Wasserstein GAN đổi câu hỏi từ chấm đúng sai sang đo khoảng cách [3].
Khoảng cách Wasserstein-1, còn gọi Earth Mover, đo chi phí nhỏ nhất để chuyển khối xác suất từ phân phối này sang phân phối kia. Critic là mạng chấm của WGAN: đầu ra không còn bị buộc là xác suất trong khoảng mở từ 0 đến 1. Hàm 1-Lipschitz là hàm đổi không nhanh hơn đầu vào. Nói trước công thức: trong các hàm ấy, critic tốt nhất cho đúng khoảng cách; nó cố cho ảnh thật điểm cao hơn ảnh giả.
Generator cố thu hẹp chênh lệch đó. Loss của critic có ý nghĩa liên tục hơn đối với chất lượng phân phối, nên trong nhiều ca nó dễ debug hơn accuracy [3].
WGAN cần critic thỏa 1-Lipschitz. Bản đầu cắt từng trọng số vào một đoạn nhỏ. Cách này có thể bóp khả năng biểu diễn. WGAN-GP giữ việc đo khoảng cách, rồi thêm phạt gradient thay cho cắt trọng số [4]. Phạt kéo chuẩn gradient của critic về gần 1. Điểm thường nằm trên đoạn nối mẫu thật và mẫu giả. là trọng số dương của số hạng phạt:
Một câu đủ nhớ: WGAN đổi cách đo khoảng cách giữa hai phân phối; WGAN-GP thêm một cơ chế mềm để critic đổi đủ trơn.
9. Các kỹ thuật ổn định hay đi cùng
Mỗi dòng đổi động lực của trò chơi. Đổi từng yếu tố rồi đo lại bằng protocol ở mục 7.
| Kỹ thuật | Ý tưởng | Khi nào hữu ích |
|---|---|---|
| Non-saturating loss | Cho gradient mạnh hơn lúc đầu | Baseline rất phổ biến |
| TTUR | Tốc độ học khác nhau cho và | Khi hai mạng học lệch nhịp [5] |
| Spectral normalization | Khống chế độ khuếch đại của tầng trong | Regularize discriminator |
| Gradient penalty / R1 | Phạt độ lớn gradient của | Ổn định critic hoặc discriminator |
| EMA của Generator | Trung bình trượt trọng số lúc suy diễn | Mẫu thường ổn định hơn |
| Data augmentation | Làm khó nhớ ảnh train | Tập hạn chế |
| ADA | Tự chỉnh cường độ augmentation | GAN với ít dữ liệu [8] |
| Hinge loss | Phạt khi điểm chưa vượt một lề | Phổ biến ở GAN lớn như BigGAN |
10. Họa tiết bàn cờ khi phóng ảnh
Transposed convolution có thể tạo họa tiết bàn cờ khi kernel, cửa sổ bộ lọc, và stride, bước trượt, chồng nhau không đều. Các ô sáng tối lặp theo chu kỳ trên ảnh sinh.
Hai hướng xử lý thường gặp: chọn kernel và stride cho mức chồng đều hơn, hoặc tách tăng kích thước khỏi học bộ lọc:
Nearest/Bilinear Upsample → Conv2D
Nearest và bilinear phóng lưới bằng nội suy, rồi tới một tích chập thông thường.
11. Bảng chẩn đoán nhanh
| Hiện tượng | Khả năng nguyên nhân | Kiểm tra | Hướng sửa đầu tiên |
|---|---|---|---|
| Ảnh giống nhau | Mode collapse | Lưới nhiều , recall | Giảm lệch nhịp, thử ràng buộc hoặc objective khác |
| , rất lâu | quá mạnh hoặc học vẹt | Train so với val của | Giảm tốc độ học hoặc số bước của , thêm augmentation |
| Ảnh nhiễu mãi | không nhận gradient hữu ích | Chuẩn gradient, loss, miền đầu ra | Kiểm tra detach, activation, normalization |
| Ảnh bàn cờ | Artifact lúc phóng ảnh | Phóng texture | Upsample rồi conv, hoặc sửa kernel và stride |
| Metric tốt nhưng ảnh lặp | Metric chưa phản ánh coverage | Precision/recall, láng giềng gần | Thêm thước diversity |
| Train đẹp, dữ liệu mới kém | học vẹt | Thử augmentation | ADA hoặc thêm dữ liệu |
| Lúc tốt lúc hỏng | Nhạy tốc độ học và số bước | Nhiều seed | TTUR, phạt gradient hoặc spectral norm, EMA, log dày hơn |
Trước khi kết luận GAN vốn không học được, soát thêm: ảnh đúng miền với hàm kích hoạt đầu ra; mẫu giả đã detach khi cập nhật ; gradient đi qua nhưng optimizer của không step khi cập nhật ; nhãn thật giả không đảo; BatchNorm đúng chế độ lúc chấm; nhiễu cố định lưu từ đầu; còn checkpoint, bản trọng số đã lưu, vì epoch trước có thể đẹp hơn epoch sau.
12. Những điều mang đi
- Loss của GAN là một trò chơi động. Giảm loss không chứng minh mẫu đang khá hơn.
- Mode collapse là ảnh na ná nhau vì Generator lặp vài mẹo. Discriminator thắng tuyệt đối thì Generator hết gradient hữu ích. Discriminator quá yếu thì gradient không đáng tin.
- Độ chính xác của Discriminator, kể cả mức quanh một nửa, không đủ để kết luận. Sau nhận xét đó hãy đọc FID, KID, và precision/recall cùng với lưới ảnh.
- WGAN đo khoảng cách Wasserstein bằng một critic. WGAN-GP thêm phạt gradient để giữ critic trơn, thay cho cắt trọng số.
- Tập ít làm Discriminator dễ học vẹt. ADA là một cách tự chỉnh augmentation cho ca đó.
- So hai mô hình thì giữ protocol, seed, tiền xử lý và ngân sách tính toán.
Bài sau xếp các họ mạng đối kháng theo câu hỏi chúng trả lời, từ cấu trúc ảnh và điều kiện đầu vào tới việc điều khiển style theo tầng.
Tài liệu tham khảo
[1] I. Goodfellow et al., “Generative Adversarial Nets,” NeurIPS, 2014. https://papers.nips.cc/paper_files/paper/2014/hash/f033ed80deb0234979a61f95710dbe25-Abstract.html
[2] A. Radford, L. Metz, and S. Chintala, “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks,” 2015. https://arxiv.org/abs/1511.06434
[3] M. Arjovsky, S. Chintala, and L. Bottou, “Wasserstein Generative Adversarial Networks,” ICML, 2017. https://proceedings.mlr.press/v70/arjovsky17a.html
[4] I. Gulrajani et al., “Improved Training of Wasserstein GANs,” NeurIPS, 2017. https://papers.nips.cc/paper_files/paper/2017/hash/892c3b1c6dccd52936e27cbd0ff683d6-Abstract.html
[5] M. Heusel et al., “GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium,” NeurIPS, 2017. https://papers.nips.cc/paper_files/paper/2017/hash/8a1d694707eb0fefe65871369074926d-Abstract.html
[6] M. Lucic et al., “Are GANs Created Equal? A Large-Scale Study,” NeurIPS, 2018. https://papers.nips.cc/paper_files/paper/2018/hash/e46de7e1bcaaced9a54f1e9d0d2f800d-Abstract.html
[7] T. Kynkäänniemi et al., “Improved Precision and Recall Metric for Assessing Generative Models,” NeurIPS, 2019. https://papers.nips.cc/paper_files/paper/2019/hash/0234c510bc6d908b28c70ff313743079-Abstract.html
[8] T. Karras et al., “Training Generative Adversarial Networks with Limited Data,” NeurIPS, 2020. https://papers.nips.cc/paper_files/paper/2020/hash/8d30aa96e72440759f74bd2306c1fa3d-Abstract.html