# Bài 3 — Dự đoán tương lai, chọn target và học speech units

[Bắt đầu](00-BAT-DAU-LOP-03.md) · Trước: [loss](02-TAXONOMY-TARGET-LOSS.md) · Tiếp: [reconstruction và continuous targets](04-RECONSTRUCTION-CONTINUOUS-TARGET.md)

## Mục tiêu và tiền đề

Bạn sẽ trace CPC, wav2vec 2.0, HuBERT, WavLM và BEST-RQ theo **target lifecycle**, thay vì nhớ chúng đều là speech SSL. Cần bài 2 về CE/InfoNCE; “quantization” là ánh xạ nhiều giá trị sang một số hữu hạn mã. Khác với neural codec lớp 2, units ở đây phục vụ supervision; không mặc định có decoder khôi phục waveform hoặc bitrate truyền dẫn.

Trực giác: che một phần câu rồi hỏi “đáp án là gì?” chưa đủ mô tả bài học. Đáp án có thể là đoạn tương lai đúng, một codebook đang học, một cluster ID đã tính sẵn, hoặc partition random. Ai được sửa đáp án trong lúc học là khác biệt quan trọng.

Ký hiệu chung: waveform $x$, CNN features $Z=(z_1,\ldots,z_T)\in\mathbb R^{T\times d_z}$, context $c_t\in\mathbb R^{d_c}$, mask positions $M\subseteq\{1,\ldots,T\}$. $T$ đếm feature steps, không samples waveform. $d_z,d_c,K$ phụ thuộc model; không áp một width/frame rate cho mọi checkpoint.

## 1. CPC: context quá khứ chọn được latent tương lai

CPC gốc tạo $z_t$ bằng encoder, rồi autoregressive model $c_t=g(z_{\le t})$. Với horizon $k$, score là $z_{t+k}^{\top}W_kc_t$; $W_k\in\mathbb R^{d_z\times d_c}$. InfoNCE chọn positive $z_{t+k}$ giữa negatives. Encoder, context model và scoring matrices học end-to-end; không target EMA, không quantizer và không masking kiểu BERT. [CPC §§2.2–2.3, audio setup §3.1](https://arxiv.org/pdf/1807.03748).

**Trace toy.** $c_t=[1,0]$, $W_1=I$, candidate latents $[2,1],[0,2],[0,-1]$; first candidate positive. Scores $[2,0,0]$, loss 0,239545 như bài 2. Gradient không chỉ cập nhật query: positive và negative keys cũng là outputs encoder, trừ khi một implementation chủ ý detach. Gradient tới future key giúp encoder biến latent đó thành đáp án dễ phân biệt.

Một horizon dài hơn đổi thông tin chung giữa past/future. Nó có thể ưu tiên speaker/content đang ổn định, nhưng không tự đo forensic artifact. Toy negative/channel ở bài 2 là một negative protocol giả lập; **không gán protocol ấy cho CPC/wav2vec2 nếu paper sampling khác**.

## 2. wav2vec 2.0: target rời rạc nhưng học cùng student

Luồng chính:

```mermaid
flowchart LR
    X[Waveform] --> F[CNN features Z]
    F --> Q[Learned product quantizer]
    F --> M[Replace masked latent spans]
    M --> C[Context Transformer]
    Q --> L[Contrastive loss at masked steps]
    C --> L
    Q --> D[Codebook diversity]
    L -. gradient .-> Q
    L -. gradient .-> C
    L -. gradient .-> F
    D -. gradient .-> Q
```

Target $q_t$ được tạo từ **CNN latent chưa mask**, không từ contextual Transformer. Product quantization chọn một entry trong mỗi group, concat rồi project. Forward hard selection; backward dùng Gumbel softmax/straight-through approximation. Loss contrastive tại $t\in M$ cùng diversity term; trong recipe gốc negatives lấy ở masked timesteps khác của cùng utterance. [wav2vec2 §§2, 3.1–3.2](https://arxiv.org/pdf/2006.11477).

Target “rời rạc” không có nghĩa gradient bằng 0 ở mọi tham số tạo target: hard IDs forward đi cùng surrogate derivative backward. Codebook vectors và selection logits học joint. Không gọi quantizer này là offline k-means hoặc frozen teacher. Gradient surrogate là lựa chọn thuật toán, không derivative toán học của argmax nguyên thủy.

**Toy code usage.** Một group hai mã; average assignment $\bar p=[1,0]$ có entropy 0, $\bar p=[1/2,1/2]$ có entropy $\ln2$. Negative entropy thích trường hợp hai mã được dùng. Nhưng hai mã có thể chia theo silence/speech hoặc channel; dùng đủ mã chưa chứng minh giữ forensic cue. Paper có quy ước hệ số và implementation theo perplexity; toy entropy này giải thích cơ chế, không thay exact released loss.

Mask ở latent sequence khác zero waveform: CNN đã xử lý audio trước. Receptive fields có overlap nên masking feature positions không tự xóa toàn bằng chứng raw của một đoạn; cần đọc front-end/kernel geometry khi làm claim về context.

## 3. HuBERT: học từ đáp án cố định trong từng vòng

HuBERT tạo labels bằng clustering trước một lượt train. Lượt đầu có thể dùng MFCC; lượt sau cluster hidden features của model đã học. Student CNN/Transformer nhận masked features, categorical head dự đoán IDs. Main masked loss dùng $t\in M$; paper còn định nghĩa unmasked loss và cluster ensembles. Clusterer/IDs không nhận gradient từ minibatch, nhưng prediction projection/codeword embeddings của head **vẫn học**. [HuBERT §II, Eq. 1 và iterative refinement](https://arxiv.org/pdf/2106.07447).

**Trace toy đủ một vòng.** Offline features ở bốn frame là $[-2,-1,+1,+2]$, centers $[-1,5;+1,5]$ cho IDs $[A,A,B,B]$. Mask frame 2 và 3. Student đoán $p_2(A)=0,8$, $p_3(B)=0,6$. Mean masked CE

$$L=-\tfrac12(\ln0,8+\ln0,6)\approx0,366985.$$

Các centers giữ nguyên trong bước này. Sau training, reclustering một representation khác có thể tạo IDs mới; đó là **một outer loop**, không phải EMA mỗi optimizer step. Label A không cần được gán tên âm vị để làm target; chất lượng/tính nhất quán labels là câu hỏi đo riêng.

**Phản ví dụ.** Nếu clustering chia genuine/fake toy chỉ theo loudness hoặc recording source, CE học dự đoán code đó tốt vẫn chưa chứng minh synthesis detection. Ngược lại, target bỏ một detail nhỏ không tự chứng minh hidden encoder không giữ nó: loss có thể không ràng buộc mọi hidden direction. Cần probes/controlled comparisons thay vì suy toàn encoder từ label vocabulary.

## 4. WavLM: denoising là quan hệ input–target

WavLM cho một phần student inputs nhiễu/overlap, nhưng yêu cầu predict pseudo-labels của utterance chính gốc tại masked steps. Nó còn thay relative-position mechanism và có nhiều data regimes. [WavLM §IV.A–B, Algorithm 1, §IV.C](https://arxiv.org/pdf/2110.13900).

**Case toy.** Utterance chính có units $[A,B,A]$; trộn secondary speech ở đoạn giữa rồi mask feature frame 2. Target vẫn là B của primary utterance, không nhãn của mixture mới. Loss $-\ln p(B\mid\tilde x)$ khuyến khích dự đoán nội dung primary qua corruption. Đây là denoising supervision mà không reconstruct waveform sạch.

Nhãn offline không được cập nhật qua CE. Noise/mixing làm view harder hoặc giữ tính phù hợp cho task; chúng không là variance regularizer. Trong forensics, corruption có thể vừa mô hình hóa channel thật vừa che artifact. WavLM speech-task gains không cho phép kết luận nó bỏ hay giữ artifact tốt hơn Audio-JEPA trong điều kiện chưa đo.

## 5. BEST-RQ: quantizer không cần học units

BEST-RQ dùng random matrix $A\in\mathbb R^{h\times d}$ và random codebook $\{c_i\in\mathbb R^h\}_{i=1}^K$, đều **fixed**. Target:

$$y(x)=\arg\min_i\left\|\frac{Ax}{\|Ax\|}-\frac{c_i}{\|c_i\|}\right\|.$$

Nonzero norms được giả định; tie cần convention. Student masked speech features dự đoán IDs bằng CE; gradient chỉ tới encoder/head, không tới $A,c_i$. Main paper replaces masked spans bằng Gaussian noise, không patch removal. [BEST-RQ §3.1–3.2](https://proceedings.mlr.press/v162/chiu22a/chiu22a.pdf).

**Toy nearest-code.** Chọn $A=I$, $x=[3,4]$, normalized codes $c_1=[1,0],c_2=[0,1]$. $\tilde x=[0,6;0,8]$. Squared distances là $2-2(0,6)=0,8$ và $2-2(0,8)=0,4$, nên ID 2. Nhân $x$ với gain dương giữ ID vì target normalization. Điều này mô tả quantizer toy, không chứng minh mọi hidden feature student invariant với gain.

Random labels ở đây **không phải gán ID độc lập ngẫu nhiên cho mỗi utterance**. Mapping cố định của feature space tạo đáp án nhất quán cho input gần nhau, là điểm khác quan trọng. Một noise draw độc lập mỗi lần train không cho context học quan hệ ấy. Fixed target cũng không tự bảo đảm context có đủ information để predict ID.

## 6. Đọc output và data riêng với objective

Downstream thường dùng continuous hidden states, không nhất thiết dùng codes/softmax predictions làm embedding. CPC future scores, wav2vec2 quantizer, HuBERT categorical head và BEST-RQ target mapping là khối pretraining; pipeline downstream phải đọc cụ thể. [Hồ sơ recipe](14-HO-SO-RECIPE.md) ghi các data regimes của nguồn đã đọc; LibriSpeech/Libri-Light/general audio và hours/budget không được gộp thành một setting.

Trong paper mình, context encoder Audio-JEPA là front-end log-mel ViT. Nó không được coi là HuBERT chỉ vì cùng mask prediction, hoặc wav2vec2 chỉ vì target có embeddings. Những comparison speech-task giữa các model không trực tiếp là deepfake evidence.

## Bài tập tăng dần

1. CPC có cần mask spans hoặc discrete codebook trong formulation gốc không?
2. HuBERT IDs cố định nhưng prediction head learned: tham số nào bị chặn khỏi gradient, tham số nào không?
3. Tính masked CE toy HuBERT nếu $p_2(A)=p_3(B)=0,5$; compare với đáp án đã giải.
4. BEST-RQ toy với $x=[4,3]$ cho code nào? Target “random” khác random label mới mỗi lần ra sao?
5. Một bài nói “denoising SSL”: cần hỏi thêm gì để biết nó reconstruct waveform hay predict units?
6. Nếu bỏ diversity term của wav2vec2, có được tuyên bố model chắc chắn collapse không?

<details>
<summary>Đáp án</summary>

1. Không; nó dùng latent future discrimination từ past context.
2. Clusterer và stored IDs không nhận student loss gradient trong vòng; encoder/Transformer/projection/codeword vectors của head nhận gradient. Tạo labels thế hệ tiếp là outer procedure.
3. $\ln2\approx0,693147$, cao hơn 0,366985; cùng mask/denominator.
4. Code 1: normalized dot 0,8 so với 0,6. Random mapping fixed có consistency; label draw độc lập mỗi lần không có cùng relation với input.
5. Target source/type, clean/noisy view nào, loss trên axes/positions nào, gradients/update. WavLM target units của original speech, không clean waveform.
6. Không. Diversity tạo incentive code usage; bỏ nó cần empirical/theoretical evidence của setup cụ thể, không suy từ tên thành định lý collapse.

</details>

## Đào sâu tự chọn

Derive gradient tới positive/negative key của dot-product InfoNCE: $\partial L/\partial k_i=(p_i-\mathbf1[i=+])q/\tau$. Đây là dot-product convention, khác cosine có derivative normalization. Khi claim teacher frozen, hỏi **weights hay output labels cố định**, và có shared weights nhận gradient từ student branch không.
