6B · SnakeBeta 1920× Code2Wav
6B · Chuỗi Causal ConvNet 4 tầng (480×), Hàm tuần hoàn SnakeBeta & Giải mã 24 kHz
Phóng đại tín hiệu 50 Hz thêm 480 lần qua 4 tầng tích chập chuyển vị nhân quả [×8, ×5, ×4, ×3] dùng hàm kích hoạt tuần hoàn SnakeBeta để xuất sóng âm 24 kHz.
1Định nghĩa
Ở đỉnh Cột 4 là chặng về đích của toàn bộ kiến trúc Qwen3-Omni & Qwen3-TTS-12Hz: biến chuỗi đặc trưng 50 Hz từ khối Pre-Transformer & ConvNeXt 4× (5A) thành sóng âm thanh liên tục ở tần số lấy mẫu 24.000 Hz (24 kHz). Vì tốc độ khung gốc của sổ mã là 12,5 khung/giây, mỗi khung 80 ms phải nở ra đúng 24.000 / 12,5 = 1.920 mẫu sóng âm; sau khi khối 5A đã phóng đại 4 lần, khối 6B thực hiện nốt phép phóng đại 480 lần qua 4 tầng liên tiếp có hệ số upsample_rates = [8, 5, 4, 3] (8 × 5 × 4 × 3 = 480, và 4 × 480 = 1.920).
Điểm đặc sắc nhất của khối 6B là nó hoàn toàn không dùng mô hình khử nhiễu Diffusion (Non-DiT) mà dùng chuỗi tích chập nhân quả kết hợp hàm kích hoạt tuần hoàn Qwen3OmniMoeSnakeBeta: SnakeBeta(x) = x + (1 / e^β) · sin²(e^α · x). Khác với ReLU hay SiLU vốn chỉ là hàm đơn điệu nên rất khó tự tạo ra các dao động sóng âm hình sin khi phóng đại, thành phần sin²(e^α · x) của SnakeBeta bơm trực tiếp cấu trúc tuần hoàn có tần số học được (α) và biên độ học được (β) vào từng kênh âm thanh.
Ví dụ đời thường: Hãy hình dung việc vẽ lại mặt sóng biển từ vài điểm đo thưa thớt: nếu dùng thước thẳng nối các điểm (như hàm tuyến tính từng đoạn ReLU) thì mặt nước sẽ gãy khúc cứng nhắc, nhưng nếu dùng một khuôn thước hình lượn sóng có sẵn độ nhấp nhô (SnakeBeta) thì chỉ cần đi một lượt là tái tạo được ngay các gợn sóng mịn màng. Phép so sánh này dừng lại ở chỗ mỗi tầng trong 4 tầng của 6B còn đi kèm 3 khối tích chập giãn nở (dilation = 1, 3, 9) và giảm nửa số kênh từ 1536 xuống 96 rồi về 1 kênh sóng âm.
2Luồng
Cách đọc hình (Cột 4, khối 6B trên đỉnh): từ 5A đi lên đỉnh Cột 4, đưa tín hiệu qua 4 tầng TransConv [×8, ×5, ×4, ×3] kèm hàm tuần hoàn SnakeBeta và các nhánh giãn nở (dilation 1, 3, 9) để đạt tổng hệ số phóng đại 4 × 480 = 1920 mẫu/khung, xuất sóng âm 24 kHz trong [-1, 1]; xem bước [6B] trong [Bài Lab tổng hợp Qwen3-Omni](/courses/qwen3-omni-speech/qwen3-omni-lab/qwen3-omni-end-to-end-lab/) ở Tab 02.
- 1. Chiếu kênh khởi đầu CausalConvNet (1024 → 1536)
Đưa tín hiệu 50 Hz từ khối 5A lên decoder_dim = 1536 bằng tích chập nhân quả kernel = 7.
- 2. Đi qua 4 khối DecoderBlock [×8, ×5, ×4, ×3]
Mỗi khối áp dụng SnakeBeta → CausalTransConvNet (nhân thời gian, chia đôi kênh: 1536→768→384→192→96) → 3 ResidualUnit (dilation 1, 3, 9).
- 3. Chiếu về 1 kênh sóng âm và kẹp biên [-1, 1]
Áp dụng SnakeBeta(96) → CausalConvNet(96 → 1, kernel=7) và clamp(min=-1, max=1).
- 4. Cắt bỏ vùng đệm trái khi giải mã theo chunk
Trong chunked_decode, bỏ đúng left_context_size × 1920 mẫu đầu của mỗi chunk trước khi nối thành luồng âm thanh 24 kHz.
Mã Mermaid
flowchart TD
step1["1. Chiếu kênh khởi đầu CausalConvNet (1024 → 1536)"]
step2["2. Đi qua 4 khối DecoderBlock #91;×8, ×5, ×4, ×3#93;"]
step3["3. Chiếu về 1 kênh sóng âm và kẹp biên #91;-1, 1#93;"]
step4["4. Cắt bỏ vùng đệm trái khi giải mã theo chunk"]
step1 --> step2
step2 --> step3
step3 --> step4 3Giải pháp
Công thức toán học chính xác của lớp Qwen3OmniMoeSnakeBeta trong modeling_qwen3_omni_moe.py là: $$\text{SnakeBeta}(x) = x + \frac{1}{e^{\beta} + \epsilon} \sin^2\!\left(e^{\alpha} x\right), \quad \epsilon = 10^{-9}$$ Tại sao hàm này luôn đồng biến (monotonic increasing) khi $\alpha = \beta$? Lấy đạo hàm theo $x$: $\frac{d}{dx}\text{SnakeBeta}(x) = 1 + e^{\alpha - \beta} \sin(2 e^{\alpha} x) \ge 0$ khi $\alpha \le \beta$, vừa giữ cho dòng gradient không bị triệt tiêu vừa bổ sung thành phần hài bậc cao nhờ hàm lượng giác $\sin^2$.
Hãy kiểm tra chuỗi kích thước kênh và tần số lấy mẫu xuyên suốt Code2Wav: bắt đầu từ tốc độ khung $f_0 = 12{,}5\text{ Hz}$ (1 khung mỗi 80 ms), sau 2 tầng của khối 5A với tỷ lệ $[2, 2]$ ta có $12{,}5 \times 4 = 50\text{ Hz}$. Tiếp tục đi qua 4 khối Qwen3OmniMoeCode2WavDecoderBlock với upsample_rates = $[8, 5, 4, 3]$, tốc độ mẫu tăng lần lượt: $50 \times 8 = 400\text{ Hz}$ (kênh 1536 → 768) $\to 400 \times 5 = 2.000\text{ Hz}$ (kênh 768 → 384) $\to 2.000 \times 4 = 8.000\text{ Hz}$ (kênh 384 → 192) $\to 8.000 \times 3 = 24.000\text{ Hz}$ (kênh 192 → 96), rồi chiếu về 1 kênh âm thanh моно 24 kHz!
Trong hàm chunked_decode(codes, chunk_size=300, left_context_size=25), mỗi đoạn mã được ghép thêm 25 khung lịch sử bên trái trước khi đưa vào mạng nhân quả, sau đó cắt bỏ đúng $25 \times 1920 = 48.000$ mẫu sóng âm ở đầu đoạn kết quả. Nhờ mọi phép tích chập trong 5A và 6B đều là tích chập nhân quả (đệm lệch trái), mẫu sóng âm sau khi cắt trùng khớp với giải mã toàn bộ câu một lần! Bạn có thể kiểm chứng trực tiếp ở mục [6B] của Bài Lab tổng hợp Qwen3-Omni.
4Profiling
- Kiểm tra tổng hệ số phóng đại mẫu (Total Upsampling = 1920×)
Nhân toàn bộ chuỗi hệ số [2, 2] × [8, 5, 4, 3] = 4 × 480 = 1920 mẫu sóng âm cho mỗi khung RVQ 80 ms (1920 × 12,5 Hz = 24.000 Hz).
- Tính tương đương của Chunked Streaming Decode có Left Context
So sánh đoạn sóng âm thứ hai khi giải mã liền một mạch toàn chuỗi so với khi giải mã rời có ghép left_context_size đủ lớn hơn vùng cảm thụ nhân quả: sai lệch tại vùng hợp lệ bằng 0.00e+00.
Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.
5Ví dụ
Tính số mẫu sóng âm sinh ra từ 3 khung mã 12.5 Hz
Với 3 khung mã RVQ đầu vào (kéo dài 3 × 80 ms = 0,24 giây): trên bản thật 24 kHz, 3 khung nở thành 3 × 1920 = 5760 mẫu sóng âm. Trong bài lab thu nhỏ với tỷ lệ [2] × [2, 3] = 12×, 3 khung nở thành đúng 3 × 12 = 36 mẫu sóng âm nằm trong [-1, 1].
6Thuật ngữ
- SnakeBeta(x) = x + (1/e^β)·sin²(e^α·x)
- Hàm kích hoạt tuần hoàn có tham số tần số α và tham số biên độ β học được riêng cho từng kênh.
- upsample_rates = [8, 5, 4, 3] (480×)
- Bốn tầng tích chập chuyển vị nhân quả nhân trục thời gian thêm 8 × 5 × 4 × 3 = 480 lần; kết hợp với 4× ở 5A thành 1920 mẫu/khung.
- chunked_decode (chunk_size=300, left_context=25)
- Giải mã sóng âm theo từng đoạn 300 khung kèm 25 khung ngữ cảnh bên trái để nối sóng liền mạch không có tiếng khấc.
Glossary (2)
- SnakeBeta Periodic Activation
- Hàm kích hoạt x + (1/e^β)·sin²(e^α·x) giúp mạng tích chập tổng hợp trực tiếp sóng âm tuần hoàn không cần Diffusion.
- Dilated Residual Unit (dilation 1, 3, 9)
- Ba nhánh tích chập nhân quả có bước giãn 1, 3 và 9 nối tiếp trong mỗi tầng giải mã để mở rộng vùng cảm thụ.
