Giới thiệu bài lab
Bài Lab tổng hợp: học trường vận tốc trên ảnh hình học 4×4
Bạn sẽ chạy một chương trình NumPy tự chứa, không tải mô hình hay ảnh từ mạng. Dữ liệu là hai hình nét ngang/dọc và nhãn hai chiều; denoiser là mạng truyền thẳng 1.744 tham số. Lab giữ đúng bài toán học vận tốc từ nhiễu tới ảnh để bạn kiểm tra được từng phép tính.
Trước khi chạy, nhắc lại: MSE là trung bình bình phương sai số, gradient là đạo hàm của loss theo trọng số, còn AdamW dùng gradient cùng lịch sử của nó để sửa trọng số. Bài mới ở đây là tạo đầu vào nhiễu và đáp án vận tốc, EMA và nhánh rỗng cho CFG. Bạn cần hai khóa tiên quyết Foundations và Training (Text).
Bài lab gồm
- 10 khối
[n · Giai đoạn], mỗi khối có Quan sát / Kết luận / Không chứng minh; bảng phía dưới chỉ rõ phần nào là phép thay thế thu nhỏ và phần nào chưa được thực thi. - Một tập kiểm định cố định 128 cặp ảnh–nhiễu–thời gian: seed 17, ảnh 4×4, đầu vào 19 số → 48 số tầng ẩn → 16 vận tốc. Hai cột điều kiện lần lượt chỉ ngang và dọc; cả hai bằng 0 nghĩa là rỗng.
- Kiểm tra bốn phần tử gradient bằng sai phân hữu hạn, vòng AdamW 1.800 bước, bản sao EMA, đối chứng học có/không bỏ điều kiện và LoRA hạng 2 chỉ học 128 tham số.
- Lấy mẫu Euler 8 bước từ cùng nhiễu, so CFG scale 0, 1 và 1,5, in ma trận ảnh thô; cuối cùng đếm byte trọng số theo kiểu số.
Làm xong, bạn có thể
- Giải thích
z_t=(1-t)e+t·zvàu=z-ebằng hai đầu t=0/t=1, rồi dùng đúng dấu cộng khi lấy mẫu Euler. - Đối chiếu MSE kiểm định 2,098029 → 0,239795 ở cấu hình mặc định, tách loss từng minibatch khỏi loss của tập kiểm định giữ nguyên.
- Đọc đối chứng dropout: MSE nhánh rỗng 0,312712 so với 1,691582 khi không huấn luyện trên điều kiện rỗng; kết luận trong giới hạn một seed.
- Xác nhận LoRA giữ trọng số gốc và gộp adapter vẫn cho cùng đầu ra trong sai số số học; tránh đồng nhất phép này với một thí nghiệm DreamBooth.
- Thay một hằng số, dự đoán, chạy lại, so với đáp án đã được kiểm chứng bằng lần chạy biến thể; nêu điều dòng PASS thực sự kiểm tra.
Phạm vi: lab huấn luyện mô hình SINH ẢNH hình học bằng flow matching, không huấn luyện encoder hiểu ảnh ViT/CLIP/VLM. MLP thay DiT, ánh xạ đồng nhất thay VAE và bảng tra nhãn thay text encoder. Không chạy ControlNet, chưng cất, Diffusion-DPO, mixed precision hay huấn luyện nhiều độ phân giải. Sampler 8 bước chưa chưng cất; PASS chỉ xác nhận các điều kiện số trong mã.
Cách chạy và đọc số
- Đọc bảng ánh xạ rồi phần hướng dẫn: cột 4 của sơ đồ chủ yếu là kiến thức để thiết kế thí nghiệm thật, không nên tìm kết quả thực thi của chúng trong lab thu nhỏ.
- Dự đoán hai đầu đường nội suy và dấu của u trước khi Chạy. Ở khối 2, sai lệch hai đầu phải bằng 0; nếu đổi chiều thời gian thì phải đổi cả target và sampler.
- Chạy nguyên cấu hình. Đọc khối 4–6 để so loss cùng điều kiện; khối 7 đối chứng dropout; khối 8 kiểm tra gốc/gộp LoRA; khối 9 đọc 16 giá trị mỗi ảnh và so cùng nhiễu đầu vào.
- Chỉ sửa một hằng số trong mỗi lần thử. Dùng các bài tập ở trang bài đọc Lab đầy đủ để giảm số bước học, bỏ dropout, giảm hạng LoRA hoặc giảm số bước Euler rồi giải thích số thay đổi.
Các giá trị tham chiếu đến từ /usr/bin/python3 với NumPy trên máy tác giả. Trình duyệt có thể lệch vài chữ số cuối do phép toán dấu phẩy động; không dùng so chuỗi số tuyệt đối làm tiêu chí đúng.
| Giai đoạn | Ô | Bài học (bấm để mở) | Phần lab thực thi và giới hạn (training-image-end-to-end.py) | Cách đọc số liệu & phép kiểm chứng |
|---|---|---|---|---|
| 1 | 1A, 1B, 1D | Cặp ảnh và điều kiện ↗ | Tạo hai kiểu nét 4×4 và điều kiện hai cột; ảnh đồng kích thước, không có lọc/buckets hay encoder chữ thật. | 128 ảnh kiểm định, mỗi ảnh 16 số; điều kiện 128×2. [0,0] là rỗng, không phải lớp thứ ba. |
| 2 | 1C, 2A, 2B, 2E | Latent và đường nội suy ↗ | Ánh xạ đồng nhất thay VAE, t đều, nhiễu Gaussian, z_t=(1−t)e+t·z và u=z−e. | Hai đầu lệch 0; t đầu 0,022645, trạng thái đầu 0,377643 và target đầu −1,423406. Không kiểm chứng nén VAE. |
| 3 | 2D | Forward denoiser ↗ | MLP tanh thay DiT, ghép pixel, t và điều kiện để dự đoán vận tốc; không có attention. | Input 128×19, hidden 128×48, output 128×16; 1.744 tham số; vận tốc đầu chưa học 0,309156. |
| 4 | 3A | MSE và gradient ↗ | MSE vận tốc và gradient, trung bình trên batch cùng 16 pixel; ε/v chỉ được giải thích ở bài học. | MSE đầu 2,098029; baseline zero 1,970198; chuẩn gradient W1 là 0,519508. |
| 5 | 3B, 3C | Backward và AdamW ↗ | Gradient viết tay; sai phân hữu hạn trên phần tử lớn nhất của mỗi tensor; AdamW giữ m,v. | Bốn gradient lệch lớn nhất 3,047e−11; sau một bước MSE 1,998582, W1 đổi lớn nhất 0,003017. |
| 6 | 3D, 5A | Vòng học và EMA ↗ | 1.800 bước, EMA và bản sao weights-only trong RAM; không ghi file hay resume optimizer. | Cùng tập kiểm định: 2,098029→0,239795; EMA 0,238390; nạp lại EMA lệch 0. |
| 7 | 2C | Bỏ điều kiện để học CFG ↗ | Học có dropout p=0,2 và đối chứng p=0 với cùng khởi tạo/các batch; so nhánh rỗng. | 22.946/115.200 mẫu bị bỏ điều kiện; MSE null 0,312712 so với 1,691582 không dropout, trên một seed. |
| 8 | 4D | LoRA trên denoiser ↗ | LoRA hạng 2 trên W2 cố định, thích nghi miền nét dày; DreamBooth chỉ được giải thích. | 128 tham số adapter, MSE 3,201654→0,275528; nền lệch 0; gộp/unmerged lệch cỡ 3e−15. |
| 9 | 5B, 5C, 5D | Checkpoint sang Euler và CFG ↗ | Euler 8 bước với CFG, cùng nhiễu để so; reshape thay decoder. Có liên kết Qwen, không chạy Qwen. | MSE hình mẫu scale 1,5 là 0,017335; scale 1 là 0,017168; scale 0 là 0,450787. RMS so 64 bước 0,024457. |
| 10 | 4A, 4B, 4C, 4E, 4F, 4G | Quy mô và ranh giới phương pháp ↗ | Chỉ đếm byte trọng số và giải thích ranh giới. Không chạy mixed precision/recompute, đổi resolution, full fine-tuning, ControlNet, distillation hay DPO. | 13.952 byte float64; tính cùng số phần tử float32=6.976 và float16=3.488 byte. Chưa gồm activation/gradient/m,v, không là peak GPU. |
Hướng dẫn đọc output
1 · Mục tiêu và kiến thức cần dùng
Bạn cần tensor/attention từ LLM Foundations và loss, gradient, AdamW từ LLM Training (Text). Nhắc lại: MSE trung bình bình phương sai số; backward áp quy tắc chuỗi; AdamW dùng m,v để chọn bước sửa. Ở đây ta thêm đường từ nhiễu tới ảnh, EMA và nhánh rỗng cho CFG.
Sau bài, hãy giải thích một mẫu đi từ ảnh sạch và nhiễu tới target vận tốc, loss, gradient, trọng số mới rồi lấy mẫu ra ảnh. Dự đoán trước khi chạy để tách hiểu cơ chế khỏi việc nhìn dòng PASS.
2 · Đầu vào và cấu hình
Ảnh 4×4 có nền −1 và một hàng hoặc cột sáng +1, cộng nhiễu nhỏ độ lệch chuẩn 0,03. Nhãn ngang/dọc thành [1,0]/[0,1]; [0,0] là rỗng. Một hàng dữ liệu có 16 pixel, đầu vào mạng ghép thêm một t và hai điều kiện, tổng 19 số.
MLP tanh 19→48→16 có 1.744 tham số. SEED=17, STEPS=1800, LR=0.003, BATCH=64, DROP_PROB=0.2, EMA_DECAY=0.98; LoRA hạng 2 học thêm 450 bước, sampler 8 bước với CFG_SCALE=1.5. Không tải thư viện ngoài NumPy hoặc truy cập mạng.
VAE được thay bằng ánh xạ đồng nhất và reshape, text encoder bằng bảng tra nhãn, DiT bằng MLP. Không có attention hay encoder hiểu ngôn ngữ được học. Những phép thay thế này giúp tự tính mọi gradient chứ không tái tạo kiến trúc Qwen.
3 · Theo luồng dữ liệu và các khối
Khối 1 tạo cặp ảnh/nhãn, khối 2 rút t và nhiễu e rồi tính z_t=(1−t)e+t·z và target u=z−e. Khóa quy định t=0 là nhiễu, t=1 là sạch; kiểm tra hai đầu trước khi nhìn loss.
Khối 3–5 tính forward, MSE và gradient viết tay, so bốn phần tử với sai phân ±1e−5 rồi thử một bước AdamW. Khối 6 học dài, đo trên 128 cặp ảnh–nhiễu–t cố định và tạo bản EMA trong RAM; khối 7 so dropout với đối chứng cùng batch.
Khối 8 đóng băng denoiser EMA, chỉ học A,B ở W2 để vẽ nét dày và kiểm tra gộp. Khối 9 nạp bản sao EMA, chạy Euler/CFG từ nhiễu mới và in hai ma trận. Khối 10 chỉ đếm byte, nhắc rõ kỹ thuật chưa triển khai. Bảng Tab 02 liệt kê coverage từng nhóm ô.
4 · Cách đọc kết quả thật
MSE trước/sau của cùng tập kiểm định là 2,098029 → 0,239795; EMA là 0,238390. Loss minibatch ở bước 900 là 0,220923 và bước 1800 là 0,242463, nhưng hai batch khác nhau nên không kết luận mô hình xấu đi từ cặp số ấy.
Dropout thực tế 22.946/115.200 lượt mẫu, gần p=0,2; MSE null 0,312712 so với 1,691582 khi p=0. Đây là quan sát trên một seed, đủ thấy nhánh rỗng có cơ hội học, chưa tìm p tối ưu.
LoRA 128 tham số giảm loss miền nét dày 3,201654 → 0,275528, giữ nền lệch 0 và gộp lệch cỡ 3e−15. Euler 8 bước với s=1,5 cho MSE hình mẫu 0,017335; s=1 cho 0,017168. Scale lớn hơn không tự làm lỗi nhỏ hơn.
5 · Kết luận và điều chưa chứng minh
PASS kiểm tra hai đầu nội suy, bốn phần tử gradient lệch dưới 1e−7, loss kiểm định giảm, copy EMA nạp lại đúng, LoRA giữ nền/gộp lệch dưới 1e−12 và giảm loss, sampler trả giá trị hữu hạn. Nó không so output từng chữ số với file mẫu.
Lab không đo tốc độ, peak GPU, thẩm mỹ, đa dạng ảnh tự nhiên hoặc hiểu tiếng Việt. Không triển khai VAE/DiT thật, aspect buckets, mixed precision/recompute, curriculum resolution, DreamBooth, ControlNet, student distillation hay Diffusion-DPO. Sampler ít bước vẫn dùng checkpoint chưa chưng cất.
Ảnh kiểm định mới vẫn chỉ từ hai kiểu nét đã định, nên đây là kiểm định số học trong phân phối nhỏ. Khả năng sinh cảnh, bố cục nhiều vật thể và cá nhân hóa trên ảnh thật cần thí nghiệm khác.
Nguồn công bố tham chiếu
Danh sách bài học (18)
- Ảnh–chú thích: lọc dữ liệu và ghép nhóm khung hình
- Bài Lab tổng hợp: học vận tốc từ nhiễu tới ảnh hình học
- VAE cố định: từ pixel sang latent và trở lại
- Điều kiện chữ: encoder cung cấp tín hiệu cho mô hình sinh
- Nhiễu, thời gian và mục tiêu flow matching
- CFG: học điều kiện rỗng và kết hợp hai dự đoán
- DiT forward: latent, thời gian và chữ cùng dự đoán
- Loss hồi quy: ε, v và vận tốc cần được phân biệt
- Backward và AdamW: biến loss thành trọng số mới
- EMA và checkpoint: chọn trọng số để đánh giá và lưu
- Bộ nhớ: kiểu số, tính lại activation và độ phân giải
- Học nền: từ độ phân giải thấp tới cao
- Tinh chỉnh miền: giữ nền và học dữ liệu mới
- LoRA và DreamBooth: tham số nhỏ, mục tiêu cá nhân hóa
- ControlNet và adapters: thêm điều khiển không gian
- Chưng cất ít bước: học thay đổi quỹ đạo lấy mẫu
- Diffusion-DPO: học từ cặp ảnh ưu tiên
- Cầu nối suy luận: checkpoint, Euler, CFG và giải mã