Bài 1 — Detector như một hệ thống: forward, học và vận hành#
Điểm vào lớp 4 · Tiếp: front-end và baseline.
Mục tiêu và tiền đề#
Tự trace một detector, đặt mỗi kỹ thuật đúng vị trí, và phân biệt “hệ tính gì” với “hệ học gì”. Cần mel/token, chain rule/attention và task/output/supervision. Chưa cần nhớ tên model.
Quy ước lớp 4: B = bona fide, S = spoof; nhãn số y = 1 cho B, y = 0 cho S. Logits theo thứ tự (z_S, z_B); d = z_B − z_S, d cao nghiêng B. Nếu một ví dụ dùng spoof evidence r thì ghi rõ r cao nghiêng S. Ký hiệu b là batch size, T là số frames, F là số mel bins, N là số tokens, D là embedding width; tránh dùng B vừa là lớp vừa là batch.
1. Hai bản đồ bổ sung nhau#
Forward một utterance có thể viết:
x là waveform; P gồm load/resample/crop/feature; f là encoder; A ghép layers; Q pooling; g classifier. Threshold τ thuộc policy quyết định. Utterance detection không tự có frame labels, localization hay source attribution. Những tác vụ ấy cần output/supervision/protocol riêng.
Adaptation quy định tập tham số được optimizer cập nhật, ví dụ frozen chọn (a, φ, ψ), full tuning chọn cả θ. Nó không phải một hàm thêm giữa f và A. Một adapter thêm vào encoder là module forward thật, còn “học adapter, freeze phần còn lại” là adaptation rule. Loss nối output với nhãn khi training; data sampling và augmentation quy định phân phối đầu vào cho quá trình ấy. PyTorch: autograd, requires_grad và grad modes.
flowchart LR
X[Waveform] --> P[Preprocess và feature]
P --> E[Encoder theta]
E --> A[Layer sum a]
A --> Q[Pooling phi]
Q --> G[Classifier psi]
G --> S[Score rồi threshold]
G --> L[Loss với nhãn]
L -. gradient ở cả hai regimes .-> G
L -. gradient ở cả hai regimes .-> Q
L -. gradient ở cả hai regimes .-> A
L -. gradient khi fine-tune .-> EXem mã sơ đồ
flowchart LR
X[Waveform] --> P[Preprocess và feature]
P --> E[Encoder theta]
E --> A[Layer sum a]
A --> Q[Pooling phi]
Q --> G[Classifier psi]
G --> S[Score rồi threshold]
G --> L[Loss với nhãn]
L -. gradient ở cả hai regimes .-> G
L -. gradient ở cả hai regimes .-> Q
L -. gradient ở cả hai regimes .-> A
L -. gradient khi fine-tune .-> ESơ đồ tự biên soạn; đường nét đứt chỉ update qua loss, không thêm module inference. Buffers có update ngoài optimizer sẽ học ở bài 3.
2. Ví dụ đầy đủ: trace paper Audio-JEPA#
Các setting dưới là reported Method §§3.1–3.3, đã đọc lại PDF và hình; chưa là xác nhận một training run. Paper gốc, trang 3–6.
| Bước | Shape cho b mẫu | Ý nghĩa/đơn vị |
|---|---|---|
| Toolkit | b × 64.600 | Samples ở 16 kHz; tile/truncate, khoảng 4,04 s |
| Model crop | b × 81.920 | Resample 32 kHz, lấy đầu 2,56 s |
| Log-mel | b × 256 × 128 | Trục time × mel sau pad/truncate; waveform mean subtraction |
| Patches | b × 32 × 4 × 256 | Mỗi patch chứa 8 × 32 giá trị; 32 time positions × 4 frequency positions |
| Projection + ViT | b × 128 × 768 | Embedding width 768; không class token |
| Readouts | 13 tensors b × 128 × 768 | 12 block outputs và final LayerNorm output |
| Layer sum | b × 128 × 768 | Softmax trên 13 scalars rồi cộng |
| Attentive mean/std | b × 1.536 | Hai vector 768 chiều, attention trên tokens |
| Classifier | b × 2 | LN, linear 1.536→256, GELU, dropout, linear 256→2 |
| Score | b | d = z_B − z_S |
Tính: 256/8 = 32; 128/32 = 4; N = 32 × 4 = 128. Ở 32 kHz, 2,56 × 32.000 = 81.920 samples. Hop 10 ms cho bước lưới patch 80 ms, không phải toàn receptive field: STFT window 25 ms chồng lấn và ViT attention nhìn context rộng hơn. Số complete STFT frames còn phụ thuộc center/padding/library; paper pad lên 256 nên không suy mọi frame đều valid.
Flatten là đổi chỉ số (t, f) thành n; không đổi 32 × 4 thành 128 thời điểm. Cũng không đổi token attention thành frame-level forensic explanation. Một temporal head muốn nhận 32 steps phải định nghĩa cách xử lý bốn frequency positions ở mỗi t; bài 4 tính ví dụ.
3. Một thay đổi nhỏ có thể đổi hệ thống lớn#
Toy tự biên soạn: clip dài 4 s, fake interval [3,2; 3,6] s. Pipeline lấy [0; 2,56] s. Hai clip giống hệt nhau ở đoạn này, khác chỉ ở fake interval. Mọi detector deterministic chỉ nhận crop ấy phải cho cùng score. Encoder mạnh hơn không phục hồi phần chưa quan sát. Đây là giới hạn input coverage, không chứng minh representation đã mất cue.
Ngược lại, freeze encoder vẫn phải tính 128 tokens qua 12 blocks khi chấm audio mới. Khoảng 0,5 M trainable backend không làm inference chỉ còn 0,5 M parameters. Một cache dùng trong head trials thay chi phí lặp encoder bằng đọc feature; triển khai nhận audio mới vẫn cần encoder hoặc một student được thiết kế riêng.
4. Phân loại bằng câu hỏi, không bằng tên#
| Can thiệp | Nó đổi gì? | Câu hỏi cần hỏi |
|---|---|---|
| Đổi crop/hop | Observed evidence và geometry | Đoạn nào được nhìn? |
| Đổi ViT sang CNN | Function family/inductive bias | Cùng input/data/budget chưa? |
| Frozen sang full tuning | Update space | Gradient và state nào đổi? |
| Weighted CE | Training objective | Lớp nào và denominator nào? |
| RawBoost | Distribution của training views | Có giữ nhãn/cue không? |
| Sliding-window max | Inference coverage và aggregation | Label “có bất kỳ fake” hay “đa số fake”? |
Paper sử dụng context encoder pretrained AudioSet rồi supervised detector. Predictor/target encoder không nằm trong forward downstream; loss không phải JEPA prediction error. Exact provenance của public checkpoint còn mở ở đối chiếu lớp 3; không nhập scheduler hiện hành vào recipe downstream.
5. Bài tập và đáp án#
- Freeze encoder nhưng học attention pooling và MLP: forward nào mất? Tham số nào còn học?
- Đổi patch từ 8 × 32 thành 4 × 32 trên cùng grid. N và số temporal positions đổi thế nào?
- Detector utterance cho score B−S. Được dùng 128 pooling weights làm 128 nhãn thời gian không?
- Trong toy crop, lỗi thuộc input, head capacity hay đã chứng minh encoder loss? Nêu lý do.
Đáp án giải thích
- Không mất encoder forward. θ cố định; layer weights, attention network và MLP còn học. Hệ theo feature có phi tuyến nên không phải linear probe.
- 64 temporal × 4 frequency = 256 tokens. Không suy runthời điểm tăng chính xác bao nhiêu chỉ từ N.
- Không. Weights là summary parameters trên contextualized patch tokens; chưa có frame labels/localization training hay geometry thích hợp.
- Input coverage: hai observations bằng nhau. Chưa quan sát vùng fake nên chưa thể quy lỗi cho encoder hoặc head.
Đào sâu tự chọn: vẽ thêm loss/optimizer và buffers lên sơ đồ. Ghi mỗi mũi tên là forward, derivative hay state update; dùng bài 3 để kiểm.