Kiến trúc mạng học sâu: từ nền tảng đến LLM·Chương 10 — GAN: học sinh dữ liệu bằng đối kháng

Chế độ xem

Các họ GAN: từ DCGAN, cGAN đến StyleGAN và hệ sinh hiện đại

Bài này trả lời câu hỏi chọn mô hình: mỗi họ GAN đang giải quyết nhu cầu nào. GAN, Generative Adversarial Network, là khung huấn luyện đối kháng, không phải một kiến trúc duy nhất. Generator là mạng tạo mẫu. Discriminator là mạng chấm mẫu có vẻ thật hay giả. Phần đổi giữa các họ là điều kiện đầu vào, hàm mục tiêu, và cách ràng buộc mạng chấm.

Bài không chứng minh lại trò chơi minimax, không lập quy trình gỡ lỗi đầy đủ, và không kể lịch sử mô hình khử nhiễu. Trò chơi chỉ một đoạn: Generator cố tạo mẫu giống dữ liệu thật, Discriminator cố tách thật khỏi giả, cả hai cùng đổi. Muốn chọn họ, hỏi bài toán đang đòi gì: cấu trúc ảnh, đúng một yêu cầu, đổi ảnh có cặp hoặc không cặp, một khoảng cách ổn định hơn, hay style theo tầng.

Đường đọc nhanh. Đọc bản đồ ở mục 1, các họ ở mục 2 đến mục 8, rồi mục khi nào còn nên chọn GAN và phần mang đi. Mục Đào sâu nằm ngoài đường đó.

1. Bản đồ theo câu hỏi, không theo năm

Sơ đồ dưới nhóm các họ theo nhu cầu. Mạng sinh ký hiệu GG, mạng phân biệt ký hiệu DD. CNN, mạng tích chập, xử lý lưới ảnh bằng bộ lọc trượt; nó xuất hiện ở nhánh DCGAN. cGAN thêm điều kiện yy, thông tin chỉ định mẫu cần sinh. pix2pix và CycleGAN là hai cách đổi ảnh. WGAN đổi hàm mục tiêu để đo khoảng cách. StyleGAN điều khiển style theo tầng. GigaGAN là hướng phóng quy mô khi điều kiện là chữ.

Sáu câu hỏi, mỗi câu một họ ở các mục sau: cấu trúc không gian của ảnh; mẫu đúng một yêu cầu; đổi ảnh khi có cặp; đổi ảnh khi không có cặp; đo khoảng cách để tín hiệu đỡ tắt; sinh một lượt khi bài toán lớn. Loss đối kháng là hàm phạt của trò chơi thật giả. Spectral normalization khống chế độ khuếch đại của tầng. ADA, adaptive discriminator augmentation, tự chỉnh biến đổi ảnh khi tập ít.

2. DCGAN: cả hai mạng có hiểu lưới ảnh không?

GAN gốc có thể là MLP, mạng kết nối đầy đủ, không biết pixel nào kề pixel nào. Với ảnh, tích chập dùng đúng quan hệ kề đó. DCGAN là một thiết kế CNN tương đối ổn cho học đối kháng [1]. Generator biến véctơ nhiễu thành một tensor nhỏ, tức mảng nhiều chiều, rồi phóng không gian dần tới ảnh màu:

z→4×4×C→8×8→16×16→⋯→H×W×3z \rightarrow 4\times4\times C \rightarrow 8\times8 \rightarrow 16\times16 \rightarrow \cdots \rightarrow H\times W\times 3

Hình dưới, trích từ tài liệu tham khảo, minh họa generator nở véctơ nhiễu thành các khối không gian lớn dần tới ảnh đầu ra:

Generator DCGAN

Minh họa trích từ Deep Learning Cơ Bản, tr. 282.

Discriminator đi ngược: từ ảnh thu về một điểm.

H×W×3→⋯→4×4×C→scoreH\times W\times 3 \rightarrow \cdots \rightarrow 4\times4\times C \rightarrow \text{score}

Hình kế tiếp minh họa chiều thu ấy, từ ảnh đầu vào về một điểm:

Discriminator DCGAN

Minh họa trích từ Deep Learning Cơ Bản, tr. 285.

Dùng khi bạn cần một GAN ảnh đủ nhỏ để đọc từng tầng, chạy trên tập vừa như chữ số, ảnh quần áo hoặc CIFAR-10, và muốn nối chương tích chập với mô hình sinh. Đầu ra tanh đi với ảnh đã scale về đoạn từ −1-1 đến 11, vì hàm đó nén đúng vào đoạn ấy.

Đừng dùng khi ảnh độ phân giải cao là mặc định của việc đang làm. DCGAN khi đó là mốc so sánh để học, không phải kiến trúc mặc định.

3. cGAN: mẫu có đúng yêu cầu không?

GAN không điều kiện học một ánh xạ từ nhiễu sang mẫu. Nói trước ký hiệu: chỉ có nhiễu, không có yêu cầu kèm theo.

G(z)→xG(z) \rightarrow x

cGAN thêm điều kiện yy vào cả hai mạng [2]. Generator phải sinh mẫu ứng với yy. Discriminator phải chấm cả hai câu: mẫu có vẻ thật không, và mẫu có khớp yy không.

G(z,y)→xG(z,y) \rightarrow x D(x,y)D(x,y)

Nếu yy là nhãn lớp, yêu cầu có thể là sinh đúng một chữ số, một kiểu giày, một loài. Nếu yy là embedding của chữ, tức một véctơ biểu diễn câu mô tả, điều kiện nằm ở ngôn ngữ. Nếu yy là một ảnh khác, bài toán trở thành đổi ảnh.

Hình dưới minh họa generator có điều kiện: nhãn được embedding rồi ghép với đặc trưng của nhiễu trước khi nở thành ảnh giả.

Generator cGAN

Nguồn: Deep Learning Cơ Bản, tr. 292.

Hình kế tiếp minh họa discriminator cũng nhận điều kiện, để chấm cả độ thật lẫn độ khớp yêu cầu.

Discriminator cGAN

Nguồn: Deep Learning Cơ Bản, tr. 293.

GAN không điều kiện sinh mẫu hợp lý theo phân phối chung. cGAN sinh mẫu hợp lý và đúng yêu cầu đã đưa vào.

Dùng khi đầu ra cần tuân một điều kiện bạn có lúc suy diễn: nhãn, chữ, hoặc một ảnh nguồn.

Đừng dùng khi bạn không có điều kiện ấy, hoặc không muốn đầu ra bị khóa theo nó. Thêm yy lúc đó chỉ là một đầu vào không mang thông tin.

4. pix2pix: đổi ảnh khi đã có từng cặp

pix2pix dùng GAN có điều kiện cho bài dịch ảnh sang ảnh [3]. Tập huấn luyện là các cặp (x,y)(x,y) tương ứng. Ví dụ trong tài liệu của họ: bản đồ cạnh sang ảnh, bản đồ vùng sang ảnh đường phố, ảnh xám sang ảnh màu, phác thảo sang ảnh hoàn thiện. Generator nhận ảnh xx và sinh G(x)G(x). Discriminator nhìn cặp và tách cặp thật khỏi cặp do Generator tạo.

Adversarial loss đẩy đầu ra trông như ảnh thật. Một mình nó không giữ đúng tấm đích của cặp. pix2pix thường cộng thêm loss tái tạo theo trị tuyệt đối, gọi là L1. Nói trước công thức: với mỗi cặp và nhiễu kèm theo, phạt độ lệch tuyệt đối giữa ảnh đích yy và ảnh Generator sinh ra.

LL1(G)=Ex,y,z[∥y−G(x,z)∥1]\mathcal{L}_{L1}(G) = \mathbb{E}_{x,y,z} \left[ \lVert y-G(x,z)\rVert_1 \right]

Mục tiêu chọn Generator là cực tiểu trò chơi đối kháng có điều kiện, cộng một trọng số λ\lambda nhân loss L1. λ\lambda là hệ số dương, quyết định tái tạo nặng bao nhiêu so với loss thật giả. Discriminator vẫn cực đại vế đối kháng.

G∗=arg⁡min⁡Gmax⁡DLcGAN(G,D)+λLL1(G)G^* = \arg\min_G\max_D \mathcal{L}_{cGAN}(G,D) + \lambda\mathcal{L}_{L1}(G)

Dùng khi bạn có cặp tương ứng đáng tin và muốn vừa giống miền ảnh đích, vừa bám tấm đích của từng cặp.

Đừng dùng khi hai miền ảnh không có cặp. Loss L1 không có yy để bám. Họ kế tiếp được đặt đúng cho ca không cặp.

5. CycleGAN: đổi ảnh khi không có cặp

Nhiều bài chỉ có hai tập. Ảnh ngựa và ảnh ngựa vằn. Mùa hè và mùa đông. Tranh và ảnh chụp. Không có cặp cùng một cảnh. CycleGAN học hai chiều [4]. GG đưa miền XX sang miền YY. FF đưa ngược lại.

G:X→Y,F:Y→XG:X\rightarrow Y, \qquad F:Y\rightarrow X

Loss đối kháng trên từng chiều chỉ ép đầu ra giống phân phối miền đích. Nó không buộc con ngựa này còn là con ngựa ấy sau khi thành ngựa vằn. Cycle consistency bù chỗ đó: đi sang miền kia rồi quay về thì ra gần mẫu ban đầu.

F(G(x))≈x,G(F(y))≈yF(G(x)) \approx x, \qquad G(F(y)) \approx y

Phạt cho yêu cầu ấy là tổng độ lệch tuyệt đối trên cả hai vòng:

Lcyc=Ex∼pX∥F(G(x))−x∥1+Ey∼pY∥G(F(y))−y∥1\mathcal{L}_{cyc} = \mathbb{E}_{x\sim p_X}\lVert F(G(x))-x\rVert_1 + \mathbb{E}_{y\sim p_Y}\lVert G(F(y))-y\rVert_1

Dùng khi bạn có hai miền và không có cặp, và bạn chấp nhận ràng buộc giữ nội dung là vòng khứ hồi chứ không phải từng pixel đã căn sẵn.

Đừng dùng khi cặp tương ứng đã có. pix2pix dùng được cặp đó trực tiếp. Cũng đừng coi cycle consistency là một bảo chứng giữ mọi chi tiết: nó chỉ phạt độ lệch sau một vòng đi khứ hồi.

6. WGAN và WGAN-GP: tín hiệu có còn là một khoảng cách không?

Họ này không thêm một kiểu điều kiện. Nó đổi cách chấm. Khi phân phối thật và phân phối sinh gần như không giao nhau, mục tiêu phân loại gốc có thể cho gradient rất yếu. WGAN hỏi khoảng cách Wasserstein, một chi phí di chuyển khối xác suất, thay vì hỏi xác suất thật giả. Critic, mạng chấm của họ này, không còn đầu ra trong khoảng mở từ 0 đến 1.

WGAN đo khoảng cách ấy bằng critic. WGAN-GP mới thêm gradient penalty, một phạt trên độ lớn gradient, để giữ critic đủ trơn thay cho việc cắt trọng số. Câu này đứng trước mọi chi tiết của số hạng phạt: đo khoảng cách trước, ràng buộc độ trơn sau.

Dùng khi loss phân loại gốc làm Generator hết gradient sớm, và bạn muốn một số của critic đọc được như độ lệch phân phối hơn là accuracy.

Đừng dùng khi bạn vẫn cần đọc đầu ra mạng chấm như một xác suất từ 0 đến 1. Critic của WGAN không phải xác suất đó. Họ này cũng không thay cho cGAN nếu nhu cầu thật sự là điều kiện yy.

7. BigGAN: điều kiện lớp còn đứng khi quy mô tăng không?

BigGAN mở GAN có điều kiện lớp lên quy mô lớn. Tăng batch, nhóm mẫu một bước, tăng capacity, sức chứa của kiến trúc, chỉnh regularization, các phạt để khỏi học vẹt, và cách đưa điều kiện vào có thể nâng chất lượng ảnh mạnh [5]. Kiến trúc, chuẩn hóa, batch, ngân sách tính toán và cách đưa điều kiện vào đứng cùng loss. Hãy tách đóng góp thuật toán khỏi đóng góp của quy mô và của siêu tham số, các lựa chọn ngoài trọng số như tốc độ học.

Dùng khi bài toán là sinh ảnh tự nhiên theo lớp, và bạn có dữ liệu cùng ngân sách tính toán đủ lớn để quy mô là một biến thật.

Đừng dùng khi tập nhỏ hoặc ngân sách không chịu batch lớn. Mang tên BigGAN vào một thí nghiệm nhỏ không mang theo các điều kiện đã làm nó chạy.

8. StyleGAN: bố cục và chi tiết có tách được theo tầng không?

StyleGAN đổi cách Generator dùng mã tiềm ẩn [6]. Thay vì bơm nhiễu zz thẳng vào mạng tổng hợp, một mapping network biến zz thành một mã ww. Từ ww sinh các style điều khiển nhiều tầng. Tầng thô ảnh hưởng mạnh tới tư thế và bố cục. Tầng mịn ảnh hưởng texture và chi tiết ngẫu nhiên. Ánh xạ đó đi từ nhiễu sang mã style:

z→wz \rightarrow w

Hình kiến trúc mở dưới đây minh họa họ StyleGAN: mạng ánh xạ tách khỏi mạng tổng hợp nhiều tầng.

Các kiến trúc StyleGAN

Nguồn: Wikimedia Commons, “StyleGAN Architectures”, CC BY 4.0; hình bắt nguồn từ phân tích kiến trúc StyleGAN/StyleGAN2.

Ảnh ghép dưới đây, trích từ tài liệu tham khảo, là các mẫu khuôn mặt mà sách ghi là StyleGAN sinh, để thấy loại ảnh họ này được mang ra minh họa.

Ví dụ ảnh sinh StyleGAN

Nguồn: Deep Learning Cơ Bản, tr. 266; hình trong sách ghi StyleGAN.

StyleGAN2 sửa artifact đặc trưng của bản trước, đổi modulation và normalization, và thêm path length regularization [7]. Modulation là cách style co giãn đặc trưng từng tầng. Path length regularization phạt ảnh đổi đột ngột khi ww đi một đoạn ngắn. Bản này quan trọng cho ảnh khuôn mặt và cho sửa trong không gian tiềm ẩn.

Tập ít khiến Discriminator dễ học vẹt. StyleGAN2-ADA tự chỉnh augmentation để giữ Discriminator trong vùng còn học được [8]. Đó là biến thể cần biết với tập chuyên ngành nhỏ, như ảnh y tế, nông nghiệp hoặc công nghiệp.

StyleGAN3 phân tích aliasing trong Generator [9]. Aliasing là răng cưa khi chi tiết bị lấy mẫu thô trên lưới pixel, nên đặc trưng bám tọa độ ảnh thay vì bám vật. Mục tiêu là đặc trưng đi cùng vật thể. Điều đó có nghĩa cho hoạt hình và video.

Dùng khi miền ảnh tương đối hẹp, bạn muốn điều khiển bố cục và texture theo tầng, và bạn cần không gian tiềm ẩn sửa được. Nếu tập nhỏ, biến thể đi cùng là ADA, không phải StyleGAN trần.

Đừng dùng khi nhu cầu là đổi ảnh có cặp hoặc không cặp: đó là pix2pix hoặc CycleGAN. Cũng đừng dùng bản không có chiến lược chống học vẹt khi tập quá nhỏ so với capacity. Và đừng đọc một lưới khuôn mặt đẹp như bằng chứng rằng mọi người thật trong tập đã được mô hình hóa công bằng.

9. Đào sâu: loss đối kháng khi cần sinh một lượt ở quy mô lớn

GigaGAN hỏi GAN có phóng lên sinh ảnh theo văn bản được không, bằng capacity lớn hơn, attention, và huấn luyện nhiều tỷ lệ [10]. Attention để các vị trí trong biểu diễn nhìn lẫn nhau. Cross-attention nhìn sang điều kiện chữ. Generator trong hướng này ra ảnh bằng một lượt forward, một lần truyền xuôi.

Dùng khi bài toán cần đúng lợi thế đó: một lượt sinh, có điều kiện chữ, và ngân sách chịu capacity lớn.

Đừng dùng khi điểm xuất phát là một mô hình nền sinh ảnh theo chữ huấn luyện từ đầu. Mode collapse, Generator lặp vài kiểu, vẫn là rủi ro của trò chơi hai mạng.

Adversarial Diffusion Distillation cho thấy loss đối kháng vẫn có thể ngồi trong một bộ sinh ít bước, khoảng một đến bốn bước [11]. Tổng quan năm 2026 kể hướng lai, hiệu quả dữ liệu, độ ổn định, tái lập và an toàn là chủ đề còn mở [12].

10. Khi nào còn nên chọn GAN

Câu hỏi đúng là sự đánh đổi của bài toán có hợp với huấn luyện đối kháng hay không.

GAN là ứng viên hợp lý khi cần suy diễn rất nhanh, một lượt hoặc rất ít lượt; khi bài đổi ảnh có mục tiêu đối kháng theo cảm nhận nhìn; khi cần không gian tiềm ẩn dễ thao tác như họ StyleGAN; khi bài là tăng độ phân giải, khôi phục, hoặc sinh trong một miền hẹp; khi tập không quá lớn nhưng đã có regularization hoặc augmentation; khi loss đối kháng chỉ là một thành phần để tăng độ sắc.

Đừng mặc định chọn GAN khi cần một mô hình nền sinh ảnh theo chữ, huấn luyện từ đầu; khi cần phủ rất rộng và quá trình học dễ đứng; khi nhóm chưa có thói quen đọc tín hiệu của hai mạng; khi thước đòi xác suất của dữ liệu dưới mô hình; khi tập quá nhỏ mà không có cách chống Discriminator học vẹt.

Các mục trên là lựa chọn mô hình. Chúng không phải hướng dẫn tạo ảnh giả danh một người thật.

Ba tình huống đủ để tự kiểm. Sinh chữ số theo nhãn là cGAN. Chuyển bản đồ vùng sang ảnh đường phố khi đã có cặp là pix2pix. Chuyển mùa hè sang mùa đông khi không có cặp cùng cảnh là CycleGAN.

11. Trách nhiệm khi sinh dữ liệu

Với dữ liệu tổng hợp, mức tối thiểu là kiểm quyền tập dữ liệu, tránh công bố mẫu có thể nhận lại một người, kiểm ghi nhớ trên dữ liệu nhạy cảm, ghi rõ phần do máy sinh, và không coi ảnh trông thật là bằng chứng khoa học. Dữ liệu y tế hoặc khoa học còn cần lợi ích của đầu việc phía sau và độ lệch phân phối, không chỉ FID.

12. Những điều mang đi

  • Chọn theo câu hỏi: DCGAN cho tích chập, cGAN cho điều kiện, pix2pix cho đổi ảnh có cặp, CycleGAN cho đổi ảnh không cặp.
  • WGAN đo khoảng cách; WGAN-GP phạt gradient sau việc đo đó. BigGAN cho thấy quy mô và conditioning nặng như một loss mới.
  • StyleGAN tách style theo tầng. StyleGAN2 sửa artifact. ADA cho tập ít. StyleGAN3 nhắm aliasing khi vật phải chuyển động.
  • Một lượt sinh là lý do còn chọn GAN. Ảnh trông thật không thay quyền dữ liệu, kiểm ghi nhớ, và thước đúng với quyết định.

Bài sau chuyển sang mô hình diffusion: học cách khử nhiễu từng bước để tạo mẫu, với một hàm mục tiêu khác trò chơi hai mạng.

Tài liệu tham khảo

[1] A. Radford, L. Metz, and S. Chintala, “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks,” 2015. https://arxiv.org/abs/1511.06434

[2] M. Mirza and S. Osindero, “Conditional Generative Adversarial Nets,” 2014. https://arxiv.org/abs/1411.1784

[3] P. Isola et al., “Image-to-Image Translation with Conditional Adversarial Networks,” CVPR, 2017. https://openaccess.thecvf.com/content_cvpr_2017/html/Isola_Image-To-Image_Translation_With_CVPR_2017_paper.html

[4] J.-Y. Zhu et al., “Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks,” ICCV, 2017. https://openaccess.thecvf.com/content_iccv_2017/html/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.html

[5] A. Brock, J. Donahue, and K. Simonyan, “Large Scale GAN Training for High Fidelity Natural Image Synthesis,” ICLR, 2019. https://openreview.net/forum?id=B1xsqj09Fm

[6] T. Karras, S. Laine, and T. Aila, “A Style-Based Generator Architecture for Generative Adversarial Networks,” CVPR, 2019. https://openaccess.thecvf.com/content_CVPR_2019/html/Karras_A_Style-Based_Generator_Architecture_for_Generative_Adversarial_Networks_CVPR_2019_paper.html

[7] T. Karras et al., “Analyzing and Improving the Image Quality of StyleGAN,” CVPR, 2020. https://openaccess.thecvf.com/content_CVPR_2020/html/Karras_Analyzing_and_Improving_the_Image_Quality_of_StyleGAN_CVPR_2020_paper.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

[9] T. Karras et al., “Alias-Free Generative Adversarial Networks,” NeurIPS, 2021. https://papers.nips.cc/paper_files/paper/2021/hash/076ccd93ad68be51f23707988e934906-Abstract.html

[10] M. Kang et al., “Scaling Up GANs for Text-to-Image Synthesis,” CVPR, 2023. https://openaccess.thecvf.com/content/CVPR2023/html/Kang_Scaling_Up_GANs_for_Text-to-Image_Synthesis_CVPR_2023_paper.html

[11] A. Sauer et al., “Adversarial Diffusion Distillation,” 2023. https://arxiv.org/abs/2311.17042

[12] A. Al-Yaari and Y. Deng, “Generative adversarial networks: A comprehensive survey,” Systems and Soft Computing, 2026. https://doi.org/10.1016/j.sasc.2026.200460