GAN và transfer learning

Đối đầu sinh phân biệt, mode collapse, tái sử dụng mô hình tiền huấn luyện, đóng băng tầng và tinh chỉnh cho dữ liệu ít.
KhóThuật toán ~60 phút

Giới thiệu

Bài này học vẽ ảnh giả bằng đấu tay đôi và tái dùng mô hình. Dùng để sinh ảnh đẹp khi dữ liệu mới rất ít.

Kiến thức cần nhớ

GAN

  • Định nghĩa: bộ sinh vẽ giả, bộ phân biệt soi thật giả.
  • Sinh càng giỏi thì phân biệt càng khó đoán.
  • Ví dụ đời thường: như thợ vẽ giả đấu với giám định.
  • Điểm chuẩn là phân biệt chỉ đoán mò 50%.
  • Loss dao động là bình thường vì 2 bên cùng học.

Mode collapse

  • Định nghĩa: bộ sinh vẽ mãi 1 kiểu dễ lừa.
  • Ảnh sắc nét nhưng quanh quẩn vài mẫu lặp lại.
  • Ví dụ đời thường: như học sinh chỉ học tủ 1 đề.
  • Do phân biệt quá mạnh sớm hoặc tín hiệu nghèo.
  • Sửa bằng đa dạng batch và cân tốc độ học.
LỗiDấu hiệuCách sửa
Sinh yếuẢnh mờ, đa dạngTăng sức bộ sinh
Sập modeNét nhưng lặp 1 kiểuĐa dạng batch
Phân biệt yếuKhen cả ảnh xấuTăng sức phân biệt

Transfer learning

  • Định nghĩa: tái dùng mô hình lớn cho bài mới ít dữ liệu.
  • Đóng băng tầng thấp, chỉ tinh chỉnh tầng cuối.
  • Ví dụ đời thường: như thợ giỏi đổi nghề vẫn giữ tay nghề.
  • Tầng thấp giữ cạnh và vân chung mọi ảnh.
  • Dữ liệu càng ít càng nên đóng băng nhiều.

Ví dụ

  • Input: ảnh sinh ra toàn 1 kiểu mặt -> Output: kết luận sập mode.
  • Giải thích: nét nhưng thiếu đa dạng là dấu hiệu điển hình.
# Đóng băng tầng thấp, mở tầng cuối
for layer in model.layers[:-2]:
    layer.trainable = False  # giữ kiến thức cũ
print("san sang tinh chinh")

💻 Bài tập

Ngôn ngữ: Python 3 với PyTorch và torchvision. Có GPU thì tốt, CPU vẫn chạy được với dữ liệu nhỏ. Nộp vào day-097/.

Bài 1: GAN trên dữ liệu 2D

Dữ liệu thật: 8 cụm Gauss xếp thành vòng tròn.

Thành phầnKiến trúc
Generatorz (2) -> 128 -> 128 -> 2, ReLU
Discriminator2 -> 128 -> 128 -> 1, LeakyReLU, sigmoid ở cuối
LossBCE, generator dùng non-saturating loss
  1. Huấn luyện 5000 bước. Mỗi 500 bước vẽ điểm sinh ra chồng lên điểm thật.
  2. Vẽ loss của D và G theo bước.
  3. In output trung bình của D trên dữ liệu thật và giả ở cuối. Giải thích vì sao gần 0.5 là tốt.

Bài 2: Tái hiện và sửa mode collapse

  1. Cố tình gây mode collapse: learning rate của D gấp 10 lần G, hoặc cho D học 5 bước mỗi bước G. Vẽ kết quả: G chỉ sinh vài cụm.
  2. Đếm số cụm được phủ (cụm có ít nhất 5% điểm sinh ra rơi vào bán kính 0.5).
  3. Thử 1 cách sửa: cân lại learning rate, thêm nhiễu vào input của D, hoặc minibatch discrimination. So số cụm được phủ.

Bài 3: Transfer learning (nâng cao)

Dữ liệu: 2 lớp ảnh, mỗi lớp 100 ảnh (ví dụ tập con của Oxford Pets hoặc tự chụp).

  1. Tải resnet18 pretrained. Thay tầng cuối bằng Linear(512, 2).
  2. Ba chế độ: (a) huấn luyện từ đầu không pretrained, (b) đóng băng mọi tầng trừ tầng cuối, (c) mở băng block cuối cùng với lr nhỏ.
  3. Mỗi chế độ 10 epoch. In accuracy validation và thời gian.
chế_độ                 acc_val    thời_gian
từ đầu                 ...
đóng băng hết trừ cuối ...
fine-tune block cuối   ...

✅ Tiêu chí hoàn thành

  • Có chuỗi hình GAN học qua các mốc bước.
  • Tái hiện được mode collapse và có số cụm được phủ trước và sau khi sửa.
  • Bảng 3 chế độ transfer có số thật.
  • Giải thích được vì sao ít dữ liệu thì nên đóng băng nhiều.

❓ Câu hỏi ôn tập

  • 2 mạng trong GAN làm gì?
  • Mode collapse là gì?
  • Transfer learning tiết kiệm gì?
  • Khi nào nên đóng băng nhiều tầng?

🌕 Bạn đã hoàn thành ngày 97. Làm hết bài tập phía trên rồi sang ngày tiếp theo.

Bớt paste mù, hiểu sâu từng dòng mình viết.

180 Days Challenge. 180 ngày cai nghiện vibe code.