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
Ôn lại trước khi học
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ỗi | Dấu hiệu | Cách sửa |
|---|---|---|
| Sinh yếu | Ảnh mờ, đa dạng | Tăng sức bộ sinh |
| Sập mode | Nét nhưng lặp 1 kiểu | Đa dạng batch |
| Phân biệt yếu | Khen cả ảnh xấu | Tă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ần | Kiến trúc |
|---|---|
| Generator | z (2) -> 128 -> 128 -> 2, ReLU |
| Discriminator | 2 -> 128 -> 128 -> 1, LeakyReLU, sigmoid ở cuối |
| Loss | BCE, generator dùng non-saturating loss |
- 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.
- Vẽ loss của D và G theo bước.
- 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
- 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.
- Đế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).
- 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).
- Tải
resnet18pretrained. Thay tầng cuối bằngLinear(512, 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ỏ.
- 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.