TL;DR
Mô hình lớn reason giỏi vì sâu. Một LLM 70B có khoảng 80 layer, mỗi layer học một biến đổi riêng. Muốn mô hình nhỏ làm điều tương tự, cách rẻ nhất là lấy một layer rồi chạy nó 80 lần — ý tưởng từ Universal Transformer (2019) và gần đây là Huginn (2025). Vấn đề: mọi vòng lặp áp dụng cùng một biến đổi, nên một bài toán và một bài thơ được xử lý y hệt nhau ở mỗi step.
Ouroboros (Jaber Jaber & Osama Jaber, RightNow AI, arXiv 2604.02051, 2/4/2026) đề xuất một fix gọn: gắn một controller hypernetwork ~0.7M params kế bên layer được lặp. Mỗi step, controller nhìn hidden state hiện tại và sinh ra một weight modification khác nhau cho step đó. Trên Qwen2.5-3B cắt từ 36 còn 17 layer, hệ thống thêm 9.2M tham số trainable (0.6% của model gốc), giảm 43.4% training loss so với baseline 17-layer, và recover 51% khoảng cách so với mô hình 36-layer đầy đủ.
Cái gì mới
Ouroboros không phải là mô hình mới nguyên — nó là một primitive kiến trúc gắn lên một transformer block dùng chung. Có ba thành phần đáng để ý:
- CompactController: một hypernetwork nhỏ nhận mean-pooled hidden state cộng step embedding, rồi tạo ra một vector điều biến đường chéo cho mỗi step. Vector này được áp lên 7 LoRA target (Q, K, V, O, gate, up, down) đã được khởi tạo SVD và đóng băng. Các đầu ra được zero-init để controller bắt đầu như identity — không phá model lúc t=0.
- Gated recurrence thay cho residual thường:
g = σ(W_g[h_new; h_prev] + b_g)vớib_g = -2.0, tức σ ≈ 0.12. Mặc định giữ lại 88% hidden state cũ — như một gradient highway xuyên qua các vòng lặp. - Per-step LayerNorm: mỗi vòng lặp có norm riêng, để iteration sâu vẫn ổn định.
Điểm phân biệt với các approach trước: per-step modulation ở đây là input-conditioned, sinh động bởi hypernetwork — không phải tham số tĩnh được học sẵn như RingFormer.
Vì sao quan trọng
Cuộc đua "reasoning hiệu quả" đang chia làm hai trại: một bên tăng test-time compute bằng chain-of-thought tokens, một bên tăng latent compute bằng cách lặp layer ở chiều sâu. Trại thứ hai (Universal Transformer, Huginn, các looped transformer) hấp dẫn vì không tốn token budget — bạn không phải sinh thêm 1000 từ "thinking" cho mỗi câu hỏi.
Nhưng trại latent có một weak spot rõ: chia sẻ trọng số nghĩa là mọi step làm cùng một việc. Ouroboros là một câu trả lời sạch sẽ và rẻ cho weak spot đó. 0.6% tham số thêm không đáng kể với một deployment thực tế — nếu primitive này transfer được sang reasoning benchmark, nó là free lunch.
Số liệu kỹ thuật
Setup: Qwen2.5-3B chia thành Prelude (8 layer đầu) / Recurrent (1 layer được lặp) / Coda (8 layer cuối). Train trên FineWeb-edu, seq len 2048, AdamW, cosine LR với warmup 2000 step, effective batch 32, 300k step, BF16, một H100.
| Cấu hình | Training loss | Ghi chú |
|---|---|---|
| Qwen2.5-3B đầy đủ (36 layers) | 1.378 | Trần |
| 17-layer truncated (không recurrence) | 8.975 | Sàn |
| Static per-step LoRA, depth 1 | 6.519 | Same-budget rival |
| Static per-step LoRA, depth 8 | 5.119 | — |
| Ouroboros, depth 1 | 5.082 | +1.44 vs static |
| Ouroboros, depth 4 | 5.075 | — |
| Ouroboros, depth 8 | 5.080 | — |
Hyperparameter robustness rất mạnh: tất cả depth (1, 4, 8, 16) và rank (8, 32, 64) hội tụ về loss ≈ 5.08, dao động chỉ 0.009. Nói cách khác, một pass duy nhất qua layer được modulate đã bắt được phần lớn tín hiệu phục hồi được.
Ablation đẹp: gated recurrence là bắt buộc. Không có gate, lặp layer làm loss tệ hơn 0.20 điểm. Có gate, loss giảm 3.49 điểm (9.42 → 5.93). Cộng controller lên trên, loss tiếp tục xuống 5.08.
So với Universal Transformer và Huginn
Ouroboros nằm trong dòng họ recursive/looped transformer. Cả ba đều chia sẻ trọng số xuyên depth, nhưng khác về cách điều phối các step:
- Universal Transformer (2019): cùng một block, áp lặp. Có halting mechanism quyết định khi nào dừng nhưng không phân hóa step.
- Huginn-3.5B (2/2025): prelude/recurrent/coda với một block dùng chung được lặp 4–32 lần. Đẹp ở scale, vẫn đồng nhất ở per-step.
- RingFormer / static per-step LoRA: thêm một bộ tham số LoRA tĩnh khác nhau cho mỗi step. Có phân hóa, nhưng phân hóa cố định, không phụ thuộc input.
- Ouroboros: phân hóa theo input qua hypernetwork. Cùng số tham số như static LoRA nhưng linh hoạt hơn — và số liệu cho thấy gap lớn nhất ở depth 1, đúng chỗ static approach yếu.
Giới hạn & điểm honest của tác giả
Đây là phần đáng quý nhất của paper. Trên 12 đoạn held-out, Ouroboros đạt loss 5.961, còn baseline 17-layer là 5.690 — tức là tệ hơn baseline đã bị cắt lớp. Tác giả không giấu chỗ này.
Lý do: các Coda layer bị đóng băng trông đợi một phân phối hidden state cụ thể từ block recurrent. Controller học cách bẻ phân phối đó theo hướng giảm loss trên data train, nhưng cú bẻ ấy không transfer ra-ngoài-distribution.
Hướng fix được đề xuất ngay trong paper: unfreeze Coda (hoặc thêm adapter cho Coda) để downstream layer có thể adapt theo hidden state đã được modulate — đổi lại nhiều tham số trainable hơn. Code Apache 2.0, mở để cộng đồng test hướng này.
Bước tiếp theo
Câu hỏi mở mà paper chưa trả lời: input-conditioned dynamic modulation có transfer sang reasoning benchmark thật không (toán, code, multi-step QA), hay nó chỉ giảm training loss đẹp? Lập luận "big model reason because they're deep" rất gợi cảm hứng, nhưng training loss trên FineWeb-edu chưa phải bằng chứng cho reasoning. Bài toán generalization cần được giải trước khi nói đến reasoning.
Cá nhân tôi đặt cược rằng Controller idea sẽ được kết hợp với các looped reasoning architectures khác — primitive này gọn, zero-init để không phá baseline, và mất chỉ 0.6% params. Đó là kiểu component mà nhiều lab sẽ thử bolt vào kiến trúc của họ chỉ để xem.
Nguồn: arXiv 2604.02051, RightNow-AI/ouroboros, @Akashi203.
