ajaudio / studyAUDIO-JEPA · RESEARCH NOTES
8 phút đọc · Toàn văn
Mục lục bài · 7 mục

Bài 5: mel, cepstrum, chuẩn hóa và tokenization#

Bắt đầu · Trước: STFT · Tiếp: xác suất

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

Tự tính một filterbank nhỏ, hiểu khi nào DCT mất thông tin, phân biệt các trục normalization và truy vết shape tới token. Cần squared magnitude, log và frame ở bài 4. Log tự nhiên ln nghịch đảo với exp; ln(ab)=ln(a)+ln(b), nhưng ln(a+b) không bằng ln(a)+ln(b). Các số thập phân trong vector/công thức dùng dấu chấm.

1. Mel là gộp phổ với trọng số, không phải thêm tri thức#

Cho P[m,k]=|X[m,k]|² và filterbank W có B hàng, K cột. W[b,k]≥0 thường là các tam giác chồng nhau ở trục Hz. Một band:

E[m,b]=∑k=0K−1W[b,k]P[m,k],S[m,b]=ln⁡E[m,b]+ϵEref.E[m,b]=\sum_{k=0}^{K-1}W[b,k]P[m,k],\qquad S[m,b]=\ln\frac{E[m,b]+\epsilon}{E_{ref}}.

Đầu tiên gộp power rồi mới log. Matrix form với P shape[T,K] là E=PWᵀ shape[T,B]. W[b,k] là hệ số; scale E còn phụ thuộc normalization filterbank. S không thứ nguyên khi E_ref/ε cùng đơn vị với E.

Mel scale nén khoảng Hz ở vùng cao so với thấp. Một công thức HTK là M(f)=2595log10(1+f/700), f bằng Hz. Nó là quy ước, không công thức duy nhất: librosa có lựa chọn HTK/Slaney và area normalization. Đừng từ chữ “128 mel” suy ra filter weights giống nhau ở mọi thư viện. S10: librosa 0.11, mel Parameters/Returns và hz_to_mel, S10b: hz_to_mel.

Ví dụ số hoàn chỉnh, filterbank đồ chơi:

W=[10.5000.51],P=[246].W=\begin{bmatrix}1&0.5&0\\0&0.5&1\end{bmatrix},\quad P=\begin{bmatrix}2\\4\\6\end{bmatrix}.

Band0=2+0.5×4=4; band1=0.5×4+6=8. Bỏ ε trong ví dụ vì năng lượng dương và chọn E_ref=1: S=[ln4,ln8]=[1.386294,2.079442]. P′=[3,2,7] cho band0=3+1=4, band1=1+7=8: hai phổ khác nhau, cùng log-band vector. Filterbank 2×3 này không phải mel 128 thật; nó chỉ chứng minh phép gộp có thể không injective.

128 band có thể giữ tín hiệu hữu ích đồng thời làm cue ở mức bin khó truy cập. Log ở miền dương không tự mất thông tin về E nếu giữ precision và không clipping; floor, quantization và gộp band mới tạo những giới hạn riêng. Log làm chênh lệch theo tỷ lệ rõ hơn và nén range: E tăng 4→8 chỉ thêm ln2≈0.693147.

2. Cepstrum: đổi convolution thành cộng, rồi đổi basis#

Trong source-filter lý tưởng, X=EH ở miền tần số. Khi magnitude khác 0:

ln⁡∣X∣=ln⁡∣E∣+ln⁡∣H∣.\ln|X|=\ln|E|+\ln|H|.

Real cepstrum thường là inverse DFT của log magnitude, c[q]=IDFT(ln|X[k]|). Thang q/fs là quefrency tính bằng giây theo quy ước DFT này. Nó có thể tách cấu trúc biến thiên chậm của envelope khỏi comb của nguồn; không bảo đảm chúng tách sạch trong mọi tiếng nói. MFCC dùng DCT của log-mel, còn quefrency của real cepstrum không được gán vô điều kiện cho chỉ số MFCC. S11: Aalto, The cepstrum; The Mel-Frequency Cepstral Coefficients.

Một DCT-II trực chuẩn của B log-band values:

cr=αr∑b=0B−1Sbcos⁡[πB(b+1/2)r],c_r=\alpha_r\sum_{b=0}^{B-1}S_b\cos\left[\frac\pi B(b+1/2)r\right],

với α0=1/√B, αr=√(2/B) khi r>0. Mỗi hệ số là tổng có trọng số; r nhỏ đo pattern mượt trên band index, r lớn đo thay đổi nhanh. Giữ tất cả B hệ số thì đây là đổi basis khả nghịch; giữ R<B mới thêm mất mát do truncation.

Tiếp ví dụ hai band: c0=(ln4+ln8)/√2≈2.450645; c1=(ln4−ln8)/√2≈−0.490129. Inverse: S0=(c0+c1)/√2=ln4, S1=(c0−c1)/√2=ln8. Nếu chỉ giữ c0, hai band được tái dựng thành (ln4+ln8)/2=ln√32≈1.732868; phần khác biệt giữa chúng mất. Đây là ví dụ học, không khuyến nghị số MFCC cho detector.

LFCC dùng filterbank tuyến tính theo Hz rồi nén năng lượng và DCT; cần ghi rõ log hay dB, vì API có nhiều quy ước. S31: Torchaudio LFCC, Parameters. CQCC dựa trên constant-Q, với tỷ số tần số trung tâm/bandwidth gần cố định và window length thay theo tần số. Recipe gốc có bước resample log-power theo trục tần số sang lưới đều trước DCT. S32: Todisco et al. (2016), §§3.3–3.4, 4.2 và Figure 3. Đây là nhánh đọc thêm, chưa so sánh thực nghiệm ở lớp 1.

3. Chuẩn hóa: nêu trục trước khi nói tác dụng#

CMVN theo utterance, từng band dùng valid frames V:

μb=1∣V∣∑m∈VS[m,b],vb=1∣V∣∑m∈V(S[m,b]−μb)2,S~[m,b]=S[m,b]−μbvb+ϵ.\mu_b=\frac1{|V|}\sum_{m\in V}S[m,b],\quad v_b=\frac1{|V|}\sum_{m\in V}(S[m,b]-\mu_b)^2,\quad \tilde S[m,b]=\frac{S[m,b]-\mu_b}{\sqrt{v_b+\epsilon}}.

Định nghĩa CMVN theo utterance/speaker và cách tích lũy thống kê được đối chiếu với S28: Kaldi, Cepstral mean and variance normalization. Chúng ta dùng population variance (chia |V|) trong ví dụ; sample covariance ở bài 7 sẽ dùng n−1. ε chống chia 0 và phải cùng đơn vị với variance. Chuẩn hóa theo train dataset dùng μ/v fit chỉ trên train, rồi giữ cố định cho dev/test. Waveform mean subtraction loại DC; peak/RMS normalization thay gain. Không được gom các phép ấy thành “normalize” rồi nghĩ chúng cùng invariance.

Ví dụ số: S=[[1,2],[3,4]] gồm 2 time frames × 2 bands, ε=0 vì variance dương. CMVN theo thời gian cho μ=[2,3], std=[1,1], output=[[-1,−1],[1,1]]. LayerNorm theo feature của mỗi token cho mean 1.5/3.5, std 0.5, output=[[-1,1],[−1,1]]. Hai output khác nhau vì khác trục. Thêm một padding row [0,0] vào phép tính CMVN sẽ đổi μ thành [4/3,2], dù speech không đổi.

PyTorch LayerNorm tính trên các chiều cuối trong normalized_shape, dùng input statistics cả train/eval. BatchNorm1d tính theo channel trên batch (và sequence nếu 3D), thường dùng running stats ở eval; track_running_stats=False là trường hợp khác. S12: LayerNorm, S13: BatchNorm1d. Các ví dụ CMVN ở trên là toán trực tiếp, không claim paper có dùng CMVN.

Phản ví dụ thông tin: utterance A có band series [1,3], B có [11,13]. CMVN riêng đều thành [−1,1]. Offset 10 đã mất. Nếu offset là channel nuisance có thể hữu ích; nếu nó là cue cần đo thì có thể hại. Phép chuẩn hóa không tự biết lý do vật lý của offset.

4. Tokenization: tính shape và hiểu phép trộn#

Paper: log-mel[T,F]=[256,128], patch[p_t,p_f]=[8,32]. N_t=256/8=32, N_f=128/32=4, N_tok=128. Mỗi patch có 8×32=256 scalar. Flatten patch thành v_i∈R^256, projection h_i=v_iW+b với W shape[256,768] và b[768], rồi thêm 2D positional embedding p_i∈R^768.

Đại lượngShape minh họa batch-first
Log-mel[B_batch,256,128]
Patch vectors[B_batch,128,256]
Projected + positional tokens[B_batch,128,768]
Một block output[B_batch,128,768]

Một implementation Conv2d có tensor/channel/kernel layout khác nhưng biểu diễn phép projection tương đương sau reshape. Paper không dùng class token, nên ở đây 128 chính là patch tokens. Vùng 32 mel liên tiếp không nhất thiết rộng 2 kHz: mel bands không đều theo Hz. Trục freq/time cũng không đối xứng.

Tăng 256→768 chiều có thể giữ nguyên thông tin patch nếu projection đủ rank, nhưng không tái tạo phase hay spectral bins đã bị mel bỏ. Output dimension lớn không tự nghĩa input information tăng. Không sửa positional embeddings khi đổi grid 32×4 sang 16×8 sẽ làm vị trí bị hiểu sai dù cùng 128 token. Paper báo cáo resize kernel 16×16→8×32 và tái tạo position embeddings; đây là adaptation hình học, không swap shape thuần túy. Paper mục 3.1, trang 3–4; pipeline.

5. Bài tập#

  1. Với W đồ chơi ở mục 1, tìm một P khác nữa cùng band [4,8] và không có power âm.
  2. DCT đủ 128 hệ số có làm mất thêm information so với log-mel 128 không? Giữ 13 thì sao?
  3. Muốn tính CMVN cho frame padding, cần nêu điều gì? Vì sao pad bằng 0 trong log-space khác im lặng?
  4. Input [256,128], patch [16,16] có bao nhiêu time positions/frequency positions/tokens? So với [8,32], cái gì giống và cái gì khác?
  5. Nếu model chỉ nhập log-mel, nó có thể dùng direct complex phase để quyết định không? Vì sao vẫn có thể đo cue liên quan phase gián tiếp?
Đáp án
  1. P=[4,0,8] cho 4 và 8. Tổng quát P=[4−0.5a,a,8−0.5a], với 0≤a≤8 giữ mọi phần tử không âm. Rất nhiều spectra cùng đầu ra.
  2. DCT khả nghịch khi giữ đủ hệ số, biết normalization/order và bỏ qua rounding. Giữ 13 chỉ giữ một projection, thêm mất mát. Các bước magnitude/mel trước đó có thể đã mất thông tin rồi.
  3. Nêu valid mask và trục thống kê; thường loại padding để mean không phụ thuộc artificial length. Log 0 không xác định; log(ε/E_ref) cho silence có thể âm, không tự bằng 0.
  4. 16 time × 8 freq=128 tokens. Tổng token/diện tích patch giống, nhưng temporal grid và frequency coverage khác; nominal span 160 ms so với 80 ms nếu hop 10 ms. Receptive union cho 16 windows là 175 ms theo cùng giả định.
  5. Không có phase trực tiếp trong input. Nhưng phase distortions có thể tác động pattern magnitude của overlapping frames, hoặc tương quan với cue khác. Cần đo đường thông tin thật, không suy từ tên feature.

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

Từ ví dụ W, vector v=[−0.5,1,−0.5] thỏa Wv=0: đó là nullspace, các thay đổi theo hướng này không thấy ở band energies. Bài 7 dạy rank/nullspace. Đọc code librosa S10 để thấy triangles và area normalization; chưa áp code đó như config paper. DCT không mặc định decorrelate mọi phân phối: nó là fixed basis, còn PCA bài 7 phụ thuộc covariance dữ liệu.

DỪNG LẠI & TỰ KIỂM TRA

Bạn đã giải thích được cơ chế trong bài?

↓ Bản Markdown nguyên gốcGiữ nguyên nội dung · Công thức, bảng và nguồn đầy đủ.Các chat bàn giao được mở trong Codex.

Gõ từ khóa để tìm bài học và đoạn liên quan.