HelixRDT-80M
Helix Recurrent-Depth Transformer — 80.9M parameter, decoder-only, dengan mekanisme looped/recurrent-depth untuk reasoning.
🛑 STATUS: UNTRAINED — BACA INI DULU
Model ini belum dilatih sama sekali. Weight yang ada sekarang hasil random initialization. Kalau kamu load model ini dan coba generate teks, hasilnya token acak, tidak ada satupun kalimat yang masuk akal. Belum ada data yang dilihat model ini.
Repo ini sengaja diupload sebelum training dimulai. Tujuannya biar siapapun yang mau belajar desain looped-transformer, partial RoPE, gated GQA, atau tokenizer HELIX, bisa langsung baca kodenya sekarang tanpa nunggu training kelar. Checkpoint hasil training bakal diupload menyusul begitu tersedia.
Kalau kamu ke sini nyari model yang siap pakai, belum ada. Ini masih dokumentasi arsitektur.
📖 Daftar Isi
- Posisi Project & Riwayat
- Arsitektur HelixRDT
- Tokenizer HELIX
- Dataset
- Status Training
- Cara Penggunaan
- Intended Use & Limitasi
- Roadmap
- Catatan
- Acknowledgements
📜 Posisi Project & Riwayat
HelixRDT-80M bukan project pertama. Ini project keempat dari serangkaian eksperimen language model dari nol, dan riwayatnya penting untuk ditulis apa adanya.
| # | Project | Params | Progress |
|---|---|---|---|
| 1 | Photon-3M | 3M | Percobaan paling awal, pakai arsitektur MoE. Ditinggalkan karena MoE di skala sekecil ini tidak efektif. Overhead routing dan expert yang under-utilized bikin MoE baru masuk akal di skala yang jauh lebih besar, di 3M parameter jatuhnya lebih boros daripada dense model biasa. |
| 2 | Vega-100M-Indo | 96.6M | Progress paling jauh sejauh ini secara jumlah step, tiga fase training sampai step 17,500. Tapi ada masalah serius di fondasinya: dilatih pakai knowledge distillation dari Qwen3-0.6B, dan embedding space Vega ikut ketarik ke arah embedding Qwen yang multilingual, sementara Vega sendiri cuma didesain untuk Bahasa Indonesia. Hasilnya embedding space-nya kacau, kata-kata ketarik ke makna yang tidak semestinya karena mengikuti struktur representasi multilingual yang tidak relevan untuk model monolingual. Tokenizer yang dipakai saat itu juga punya masalah sendiri. Kombinasi keduanya bikin model ini tidak layak dilanjutkan ke instruction tuning. |
| 3 | Magnetar-50M-ID | 49M | Restart total dengan arsitektur lebih ringkas dan tokenizer baru (HELIX), dibuat sebagai perbaikan langsung dari masalah tokenizer di Vega. Eval internalnya cukup dalam, 13 macam test mulai dari residual decomposition sampai head specialization. Tapi trainingnya sendiri berhenti di step 6,050 dari target 8,230, belum sampai 75%. |
| 4 | HelixRDT-80M (repo ini) | 80.9M | Restart lagi, kali ini dengan pendekatan berbeda soal apa yang dijanjikan. |
Polanya cukup jelas: tiap project baru mulai sebelum yang lama selesai sampai tahap yang benar-benar terpakai. Tapi bukan cuma soal belum sempat lanjut, dua project pertama punya masalah teknis konkret yang bikin lanjut ke tahap berikutnya jadi tidak masuk akal. Ukuran modelnya naik turun (100M, lalu 50M, sekarang 80M) bukan karena rencana scaling, tapi karena tiap kali ada masalah atau ide baru, restart dari nol terasa lebih masuk akal daripada nambal yang lama.
Yang beda di HelixRDT: README ini sengaja tidak menjanjikan instruction tuning. Fokusnya cuma sampai base model yang selesai ditraining dengan baik. Kalau nanti mau lanjut ke instruction tuning atau eksperimen lain, itu jadi project terpisah, bukan janji yang ditempel di sini supaya kelihatan lengkap.
Riwayat di atas ditulis apa adanya, bukan untuk menutupi apapun.
🏗️ Arsitektur HelixRDT
HelixRDT (Helix Recurrent-Depth Transformer) adalah decoder-only causal LM. Bagian ini menjelaskan tiap komponennya dan alasan di baliknya.
Ringkasan Konfigurasi
| Komponen | Nilai |
|---|---|
model_type |
helix_rdt |
| Vocab size | 32,000 |
Hidden size (d_model) |
768 |
Jumlah layer fisik (n_unique_layers) |
9 |
| Loop factor | 2 |
| Depth efektif | 18 (9 × 2) |
| Attention heads | 12 Query / 3 Key-Value (GQA 4:1) |
| Head dimension | 64 |
| FFN dimension (SwiGLU) | 1,792 |
| Max sequence length | 512 token |
| Positional encoding | Partial RoPE (50% rotary, 50% NoPE) |
| Normalization | RMSNorm + Zero-centered QK-Norm |
| Tied embeddings | Ya |
| Total parameter | ~80.9M |
Breakdown Parameter
Token embedding (tied): 24,576,000 (30.4%)
9 unique layers (attn+ffn+norm): 55,753,344 (68.9%)
MTP auxiliary head (1 token): 590,592 ( 0.7%)
Final RMSNorm: 768 (~0.0%)
─────────────────────────────────────────────
TOTAL: 80,920,704
Embedding menyumbang sekitar 30% dan sisanya di layer. Proporsi ini dijaga supaya nggak ada yang mendominasi terlalu banyak. Kalau embedding kegedean, budget parameter habis buat lookup table doang. Kalau layer kegedean tapi embedding-nya kurang representatif, kualitas prediksinya juga ikut turun.
Desain Arsitektur, Komponen per Komponen
1. Recurrent-Depth (Looped) Layers
Ini bagian intinya. HelixRDT punya 9 layer fisik, tapi tiap layer dipakai ulang 2 kali secara berurutan saat forward pass:
Layer_1 → Layer_2 → ... → Layer_9 → kembali ke Layer_1 → Layer_2 → ... → Layer_9
Parameter yang tersimpan setara 9 layer, tapi compute yang dijalankan setara 18 layer.
Riset soal looped/recurrent-depth transformer menunjukkan model dengan depth efektif tinggi lewat looping bisa mendekati performa transformer non-looped yang parameternya dua kali lebih besar, khususnya di task reasoning. Setiap forward pass dapat kesempatan proses lebih panjang tanpa nambah parameter yang harus disimpan. Ini cocok untuk skenario compute terbatas kayak Colab dengan GPU tunggal 16GB VRAM.
Konsekuensinya, compute per forward pass tetap setara 18 layer, jadi bukan gratis. Yang dihemat cuma parameter tersimpan dan jumlah gradient unik yang perlu diupdate.
2. Gated Grouped-Query Attention (GQA) + Output Gate
GQA dipakai dengan rasio 4:1, 12 query head berbagi 3 key-value head. Ini mengecilkan ukuran KV cache dibanding Multi-Head Attention biasa, dengan penurunan kualitas yang kecil di skala ini.
Ditambahkan juga output gate berupa sigmoid: sebelum hasil attention diproyeksikan ke output, dikalikan dulu elemen-per-elemen dengan gate yang dipelajari dari input yang sama. Teknik ini dipakai di arsitektur seperti Trinity Large dan Qwen3-Next, dan membantu mengurangi attention sink (token pertama menyerap perhatian berlebihan) sekaligus bikin training lebih stabil.
3. Zero-Centered QK-Norm
RMSNorm diterapkan ke Query dan Key sebelum dot-product attention. Versinya zero-centered: dipakai skala (1 + weight) dengan weight diinisialisasi nol, jadi di awal training perilakunya sama persis dengan RMSNorm biasa. Model tetap bisa belajar rescale per-channel seiring training jalan. Pendekatan ini diambil dari Qwen3-Next.
4. Partial RoPE
RoPE cuma diterapkan ke 50% dimensi pertama tiap head (32 dari 64 dimensi). Sisanya nggak dikasih informasi posisi sama sekali (NoPE).
Pendekatan campuran ini dipakai juga di Qwen3-Next dan SmolLM3. Channel yang murni content-based tanpa bias posisi membantu generalisasi untuk pola yang nggak bergantung posisi absolut, sementara channel yang tetap dikasih RoPE menjaga kemampuan model memahami urutan dan jarak antar token.
5. SwiGLU Feed-Forward Network
FFN pakai gated activation: SwiGLU(x) = SiLU(gate_proj(x)) ⊙ up_proj(x), lalu diproyeksikan lewat down_proj. Ini activation standar di hampir semua model modern sekarang (LLaMA, Qwen, Mistral) karena konsisten lebih baik dari ReLU/GELU untuk budget parameter yang sama.
6. Depth-Scaled Residual Init
RMSNorm kedua di tiap block (sebelum FFN) diinisialisasi dengan gain 1/√18 ≈ 0.236 alih-alih 1.0. Kontribusi cabang FFN ke residual stream mulai kecil di awal training, lalu membesar sendiri seiring model belajar skala yang tepat untuk tiap layer. Diambil dari pendekatan Trinity Large, membantu stabilitas training terutama karena depth efektif model ini (18) cukup dalam untuk ukuran parameternya.
7. Multi-Token Prediction (MTP)
Selain memprediksi token t+1 seperti biasa, ada head kecil tambahan yang memprediksi token t+2 dari hidden state di posisi t. Loss-nya dijumlahkan ke loss utama. Teknik ini dipopulerkan DeepSeek dan dipakai juga di model seperti Step 3.5 Flash, terbukti mempercepat konvergensi karena tiap step dapat sinyal gradien lebih banyak. Head MTP ini dibuang saat inference, jadi nggak nambah biaya komputasi waktu model dipakai.
Yang Sengaja Tidak Dipakai
Ada beberapa teknik arsitektur LLM terbaru per Agustus 2026 yang tidak diadopsi: mHC dari DeepSeek V4, Compressed Convolutional Attention, dan teknik context compression untuk 1M+ token. Semua ini didesain untuk masalah di skala jauh lebih besar, model puluhan-ratusan miliar parameter dengan context jutaan token. Di model 80M dengan max_seq_len 512, masalah yang mereka selesaikan itu nggak muncul, jadi mengadopsinya cuma nambah kompleksitas tanpa manfaat.
🔤 Tokenizer HELIX
HelixRDT pakai HELIX Tokenizer, tokenizer custom berbasis Unigram SentencePiece dengan vocab 32,000, dirancang khusus untuk Bahasa Indonesia baik domain formal maupun informal.
Data Training Tokenizer
| Sumber | Deskripsi | Dokumen | Karakter |
|---|---|---|---|
| Reddit r/Indonesia | Komentar media sosial, slang, percakapan informal | 696,320 | ~129.3 juta |
| Wikipedia Indonesia | Artikel ensiklopedia, teks formal/akademik | ~26,549 | ~129.3 juta |
Proporsi datanya diseimbangkan berdasarkan jumlah karakter, bukan jumlah dokumen, supaya representasi formal vs informal jadi 50/50. Ini penting karena satu artikel Wikipedia jauh lebih panjang dari satu komentar Reddit.
Pipeline Filtering Data Reddit
Data mentahnya 1,203,109 komentar, melewati beberapa tahap filter:
| Tahap Filter | Kriteria | Dokumen Dibuang |
|---|---|---|
| Deleted/Removed | Komentar [deleted]/[removed] |
5,187 |
| Stickied Mod Post | Post yang di-pin moderator | 5,015 |
| Panjang | < 4 kata, < 15 karakter, atau > 2000 kata | 166,018 |
| Score < 1 | Downvote atau score 0 | 51,270 |
| Non-Alpha Ratio | Rasio non-alfanumerik > 40% | 723 |
| URL Ratio | Rasio URL dalam teks > 20% | 3,475 |
| Keyword Blacklist | Kata kunci spam/konten negatif | 3,506 |
| Filter Bahasa (langid) | Teks non-Indonesia tanpa kata slang Indo | 271,595 |
Hasil akhirnya 696,320 komentar, sekitar 57.9% dari input awal yang lolos semua filter.
Filter bahasa pakai library langid digabung sama whitelist kata slang Indonesia. Komentar tetap disimpan kalau terdeteksi bahasa Indonesia, Melayu, Jawa, atau Sunda, atau kalau terdeteksi bahasa lain tapi ada kata slang Indonesia di dalamnya. Ini buat mempertahankan komentar code-switching Indonesia-Inggris yang umum banget di percakapan online.
Konfigurasi Tokenizer
| Parameter | Nilai | Alasan |
|---|---|---|
model_type |
unigram | Cocok untuk morfologi aglutinatif Bahasa Indonesia |
vocab_size |
32,000 | Balance antara coverage dan efisiensi |
character_coverage |
0.9999 | Coverage maksimal untuk aksara Latin |
byte_fallback |
true | Fallback ke byte untuk karakter aneh/emoji |
split_by_number |
false | Angka tidak dipisah, 2025 jadi 1 token |
max_sentencepiece_length |
24 | Support kata panjang seperti mempertanggungjawabkan |
Sempat dilatih dua versi tokenizer buat dibandingkan: Reddit-only dan Mixed (Reddit + Wikipedia). Versi Mixed yang dipakai final, berdasarkan hasil benchmark di bawah.
Benchmark Fertility Score
Fertility score itu rata-rata jumlah token per kata. Makin rendah makin efisien.
Domain Formal (Wikipedia Indonesia, 1,000 sampel):
| Tokenizer | Fertility | Chars/Token |
|---|---|---|
| Indo-BERT | 1.299 | 5.60 |
| HELIX-32k Mixed | 1.336 | 5.50 |
| HELIX-32k Reddit-only | 1.541 | 4.81 |
| XLM-RoBERTa (250k vocab) | 1.564 | 4.66 |
| GPT-2 | 2.778 | 2.60 |
Domain Informal (Reddit Indonesia, 1,000 sampel):
| Tokenizer | Fertility | Chars/Token |
|---|---|---|
| HELIX-32k Reddit-only | 1.300 | 4.91 |
| HELIX-32k Mixed | 1.339 | 4.76 |
| Indo-BERT | 1.596 | 3.82 |
| XLM-RoBERTa | 1.655 | 3.66 |
| GPT-2 | 2.465 | 2.57 |
HELIX-32k Mixed unggul dari XLM-RoBERTa di kedua domain padahal vocabnya 7.8x lebih kecil (32k vs 250k). Di domain formal, selisihnya cuma 0.037 dari Indo-BERT walau Indo-BERT kemungkinan dilatih penuh di Wikipedia. Di domain informal, HELIX Mixed unggul jauh dari Indo-BERT dengan selisih fertility 0.257.
Special Tokens
Skema penamaan token khususnya terinspirasi dari struktur heliks DNA, format \HELIX→nama←HELIX/. Ada 44 special token total, dirancang forward-compatible, artinya sudah disiapkan sejak level tokenizer walau modelnya sendiri belum tentu langsung memakai semua fungsi itu.
| Kategori | Contoh Token | ID | Fungsi |
|---|---|---|---|
| Kontrol dasar | pad, unk, start, end |
0–3 | Padding, unknown, BOS, EOS |
| Chat roles | user, assistant, system |
4–6 | Giliran percakapan |
| Reasoning | think.open, think.close |
7–8 | Blok reasoning eksplisit |
| Tool use | tool.call.open/close, tool.result.open/close, tool.name, tool.args |
9–14 | Pemanggilan dan hasil tool |
| Dokumen & konteks | doc.open/close, ctx.open/close, sep |
15–19 | Blok dokumen/konteks |
| RAG | retrieved.open/close, source |
20–22 | Hasil retrieval dan sitasi sumber |
| Kode | code.open/close |
23–24 | Blok kode |
| Memori | memory.open/close |
25–26 | Konteks/memori panjang |
| Persona | persona |
27 | Karakter/persona model |
| Multimodal | image.open/close, audio.open/close |
28–31 | Placeholder gambar dan audio |
| Sitasi | cite.open/close |
32–33 | Blok sitasi |
| Reserved | reserved.0–reserved.9 |
34–43 | Ekspansi masa depan |
Contoh chat template:
\HELIX→start←HELIX/\HELIX→system←HELIX/
Kamu adalah asisten AI berbahasa Indonesia.
\HELIX→user←HELIX/
Halo, apa kabar?
\HELIX→assistant←HELIX/
Halo! Kabar baik, terima kasih sudah bertanya.\HELIX→end←HELIX/
Contoh Tokenisasi
| Input | Token | Jumlah |
|---|---|---|
gue gaskeun aja bro |
['gue', 'gas', 'keun', 'aja', 'bro'] |
5 |
wkwkwk parah banget sih |
['wkwkwk', 'parah', 'banget', 'sih'] |
4 |
mempertanggungjawabkan semua perbuatannya |
['memper', 'tanggung', 'jawab', 'kan', 'semua', 'perbuatan', 'nya'] |
7 |
Kata slang umum kayak wkwkwk, parah, banget, sih masing-masing jadi satu token utuh. Ini nunjukkin coverage yang bagus buat kosakata informal, biasanya jadi titik lemah tokenizer yang cuma dilatih dari korpus formal.
📊 Dataset
Pretraining direncanakan pakai korpus sekitar 1.3B token, full Bahasa Indonesia, campuran dari dua jenis sumber:
- Web corpus berskala besar yang sudah difilter kualitasnya, mencakup teks Bahasa Indonesia dari berbagai domain, sudah melalui deduplikasi dan filtering standar untuk pretraining LLM.
- Korpus diskusi komunitas online, teks percakapan informal yang ngasih eksposur ke pola bahasa sehari-hari, slang, dan code-switching yang jarang muncul di teks formal.
Detail komposisi persisnya (rasio, jumlah token per sumber) bakal diumumkan bareng rilis checkpoint pertama.
Soal Bahasa Lain
Arsitektur HelixRDT sendiri tidak spesifik untuk Bahasa Indonesia. Tidak ada bagian dari desain model (attention, FFN, positional encoding) yang bergantung pada bahasa tertentu, jadi secara arsitektur, model ini bisa saja dilatih untuk bahasa apapun atau multilingual.
Yang jadi pembatas justru tokenizer HELIX. Tokenizer ini dilatih khusus dari korpus Bahasa Indonesia (Reddit r/Indonesia + Wikipedia Indonesia), jadi vocab dan fertility score-nya dioptimasi untuk pola morfologi dan kosakata Indonesia. Kalau mau dipakai untuk bahasa lain, tokenizer HELIX ini kemungkinan besar tidak efisien (fertility score tinggi, banyak kata kepotong jadi subword yang tidak natural), dan solusinya bukan mengganti arsitektur, tapi melatih tokenizer baru dari korpus bahasa target atau memakai tokenizer multilingual yang sudah ada.
🧪 Status Training
Saat ini training belum dimulai, masih 0 step.
Belum ada training curve, eval internal, atau contoh output untuk ditunjukkan, karena memang belum ada proses training yang jalan. Begitu training dimulai dan checkpoint pertama tersedia, bagian ini bakal diisi dengan kurva loss, eval internal (mengikuti standar yang sama kayak project sebelumnya: residual decomposition, dead neuron check, gradient norm per layer, head specialization, attention sink), contoh output generasi, dan detail infrastruktur training yang dipakai.
⚙️ Cara Penggunaan (Setelah Trained)
Kode di bawah ini akan jalan secara teknis sekarang juga karena arsitekturnya sudah lengkap dan valid, tapi hasilnya nggak bakal masuk akal karena weight-nya masih random. Ini disiapkan sebagai referensi struktur pemakaian setelah checkpoint hasil training tersedia.
pip install transformers sentencepiece safetensors torch
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained(
"Veenn/helix-rdt-80m-id", # ganti sesuai nama repo final
trust_remote_code=True
)
model = AutoModelForCausalLM.from_pretrained(
"Veenn/helix-rdt-80m-id",
trust_remote_code=True
)
model.eval()
prompt = "Teknologi kecerdasan buatan saat ini"
inputs = tokenizer(prompt, return_tensors="pt")
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=100,
do_sample=True,
temperature=0.8,
top_p=0.9,
top_k=50,
repetition_penalty=1.3,
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
🎯 Intended Use & Limitasi
Model Ini Untuk Riset, Bukan Penggunaan Langsung
Bahkan setelah training selesai nanti, HelixRDT-80M dirancang sebagai base model untuk riset dan eksperimen arsitektur. Ini bukan chatbot atau asisten, dan tidak ditujukan untuk deployment produksi tanpa proses tambahan seperti instruction tuning, safety alignment, dan evaluasi menyeluruh, yang semuanya di luar scope repo ini.
Cocok untuk
- Mempelajari implementasi arsitektur looped/recurrent-depth transformer
- Riset skala kecil pada partial RoPE, gated GQA, MTP
- Basis eksperimen fine-tuning atau instruction-tuning sebagai project terpisah
- Referensi desain tokenizer multi-fungsi untuk Bahasa Indonesia
- Belajar trade-off desain arsitektur LM kecil dari nol
Tidak cocok untuk
- Penggunaan langsung sebagai chatbot atau asisten
- Aplikasi produksi dalam bentuk apapun
- Konteks yang butuh akurasi faktual
- Pengambilan keputusan penting (medis, hukum, finansial)
- Sequence lebih panjang dari 512 token
Limitasi yang Diketahui
- Status saat ini masih untrained, jadi limitasi lain baru relevan setelah training jalan
- 80.9M parameter secara fundamental membatasi kapasitas pengetahuan faktual dan reasoning kompleks dibanding model berskala miliaran parameter
- Tokenizer dioptimasi buat Bahasa Indonesia, performa di bahasa lain nggak diharapkan bagus
- Token multimodal (
image.open/close,audio.open/close) sudah ada di tokenizer tapi modelnya sendiri text-only, jadi token itu belum punya fungsi terlatih - Token reasoning (
think.open/close) tersedia di tokenizer, tapi kemampuan reasoning eksplisit tergantung sepenuhnya sama data training yang memakai format itu
🗺️ Roadmap
Roadmap ini ditulis pendek dan konkret, kebalikan dari roadmap ambisius di project-project sebelumnya yang jarang kejalan:
- Checkpoint pretraining pertama
- Kurva loss dan eval internal dasar
- Checkpoint pretraining final dengan eval internal lengkap
- Di luar scope repo ini: eksperimen turunan seperti instruction tuning, kalau dikerjakan bakal jadi repo terpisah
💭 Catatan
Beberapa kutipan yang relevan dengan semangat project ini, soal riset yang berjalan bertahap dan pentingnya jujur soal apa yang belum selesai:
"If I have seen further, it is by standing on the shoulders of giants." — Isaac Newton
"The important thing is not to stop questioning. Curiosity has its own reason for existing." — Albert Einstein
"What I cannot create, I do not understand." — Richard Feynman
"An expert is a person who has made all the mistakes that can be made in a very narrow field." — Niels Bohr
Bukan maksud membandingkan project kecil ini dengan pencapaian mereka. Cuma pengingat bahwa mengakui apa yang belum selesai itu bagian yang wajar dari riset, bukan sesuatu yang perlu ditutup-tutupi.
🙏 Acknowledgements
- Komunitas riset arsitektur LLM terbuka, atas publikasi GQA, SwiGLU, RoPE, RMSNorm, QK-Norm, looped transformer, dan MTP yang jadi fondasi desain HelixRDT
- Google Colab, untuk akses GPU gratis
- Hugging Face, untuk ekosistem transformers dan hosting model
- Project-project sebelumnya (Photon-3M, Vega-100M-Indo, Magnetar-50M-ID), atas pembelajaran yang didapat termasuk dari yang belum selesai
Untrained. Riset. Jujur soal prosesnya.
HelixRDT-80M · Apache 2.0 · @Veenn
