Artikel mendalam tentang teknologi yang membentuk masa depan.

Weight-Space Programming: Tuas Ketiga untuk LLM

Weight-space programming memungkinkan LLM membaca dan mengedit bobot jaringan saraf langsung. Kapan mengedit bobot mengalahkan fine-tuning, dan mengapa rapuh.

Kisi node yang berpendar dengan satu untai yang dirangkai ulang dengan hati-hati oleh berkas cahaya.
Mengedit jaringan saraf dengan tangan: satu untai di antara miliaran, diubah dengan niat, bukan oleh tekanan gradien.

Gradient descent tidak pernah sakral. Ia hanyalah perancah, satu-satunya alat serba guna yang kita punya untuk membentuk miliaran angka yang tidak bisa dibaca manusia, jadi kita membangun seluruh "agama" deep learning di atasnya. Tim di MIT CSAIL baru saja mendobrak perancah itu. Mereka memberi frontier model bobot mentah dari jaringan saraf yang sudah dilatih, lalu memintanya dalam bahasa alami untuk menjelaskan, men-debug, dan menulis ulang bobot tersebut, tanpa training loop, tanpa gradien, tanpa forward pass. Dan itu berhasil. Weight-space programming, yaitu menalar langsung tentang parameter alih-alih mendorongnya menuruni lembah, sudah berpindah dari eksperimen pikiran menjadi demo, dan menurut saya ini diam-diam menurunkan fine-tuning dari "cara kita mengadaptasi model" menjadi salah satu dari tiga opsi.

Hasil utamanya layak mendapat hype yang sedang dibicarakan. Ketika diminta membuat Qwen3.5-0.8B lebih baik dalam matematika tanpa pembaruan gradien apa pun, model (GPT-6 Astra) menelusuri loop penalaran patologis ke satu arah yang tertulis di dua layer MLP, mengurangkannya dari 0,016% bobot, dan menaikkan akurasi MATH-500 dari 7,9% ke 48,1%. Pengaturan sampling sama, semuanya sama. Perbaikannya bahkan tertransfer ke instruction following, IFEval naik tiga kali lipat. Ini bukan sekadar tweak hyperparameter; ini operasi bedah. Tapi sebelum kita menguburkan gradient descent, penting untuk jelas soal apa yang sebenarnya didemonstrasikan, di mana hasilnya bisa digeneralisasi, dan di mana ia sudah gagal.

Apa Sebenarnya Weight-Space Programming

Selama bertahun-tahun kita hanya punya dua cara untuk mengubah perilaku model. Prompting mengubah input; bobotnya tetap beku. Fine-tuning mengubah bobot, tapi secara membabi buta. Kamu menunjukkan lanskap loss sekumpulan contoh dan membiarkan gradien mendorong parameter ke arah mana pun yang mengurangi error, dengan kontrol kecil atas mesin internal mana yang ikut diubah. Weight-space programming mengajukan tuas ketiga: buang fungsi loss sepenuhnya, dan biarkan sistem penalaran membaca bobot, membentuk hipotesis tentang apa yang dihitungnya, lalu mengeditnya agar sesuai dengan spesifikasi dalam bahasa alami.

Bagian paling menyeramkan adalah hasil pembacaannya. Para peneliti melatih empat kebijakan kecil dengan PPO untuk memainkan versi grid-world dari Breakout, Pong, Pac-Man, dan Freeway. Arsitekturnya sama, input channel sama, action space sama, sehingga hanya bobot yang bisa membedakannya. Astra menamai keempat game itu dengan benar tanpa diberi daftar kandidat. Hal yang sama ia lakukan pada diffusion model yang dilatih menghasilkan lingkaran, persegi, dan segitiga. Versi yang lebih sulit: ia mengidentifikasi mana dari tiga character-level transformer yang dilatih pada Python, bahasa Inggris, atau bahasa Jepang yang diromanisasi, hanya dengan layer tengahnya saja, embedding dan output layer dihapus, dan setiap dimensi tanpa label. Di sepanjang jalan, ia menemukan setiap induction head, sirkuit penyalin yang memungkinkan model mengulang teks sebelumnya, dengan mengalikan matriks bobot. Itu teknik yang sudah dikenal di literatur interpretabilitas dan tidak ada yang pernah memberitahunya. Kalau kamu sudah mengikuti perlahan-lahan riset mechanistic interpretability, melihat model general-purpose melakukannya secara native agak bikin pusing.

Lalu ia menulis bobot. Diberi controller mobil yang dilatih PPO dan terjebak di local minimum, kebijakannya menyetir lurus ke arah tanjakan alih-alih mundur dulu untuk membangun kecepatan. Astra mendiagnosis kegagalannya dari bobot ditambah satu episode rekaman, dan editnya membuat mobil berhasil di semua 1.024 episode evaluasi setelah mengubah 3,5% parameter. Diminta menulis jaringan pemain game dari nol, tanpa feedback environment sama sekali, ia menghasilkan kebijakan yang mengalahkan jaringan yang dilatih PPO selama 100 juta step. Baca lagi: tanpa interaksi, tanpa sinyal reward, hanya deskripsi bahasa alami tentang sebuah game yang dikompilasi menjadi bobot yang berfungsi oleh penalaran sebuah language model.

Cara Edit Bobot Langsung Bekerja pada Model Nyata

Perbaikan Qwen adalah hasil yang paling penting bagi praktisi, karena 0,8 miliar parameter itu model sungguhan, jenis yang benar-benar di-fine-tune dan dirilis oleh tim. Kegagalannya sudah banyak didokumentasikan: model penalaran kecil sering terjebak loop, mengulang teks yang sama sampai menyentuh batas token tanpa pernah memberikan jawaban. Model card Qwen sendiri sudah memperingatkan soal ini, dan dalam percobaan para peneliti, 85 dari 96 jawaban pertama habis membakar seluruh konteks 32.768 token dengan cara itu. Diagnosis Astra: MLP di layer 15 dan 19 menulis sebuah arah ke residual stream yang terus menarik model kembali ke lintasan generasi yang sama. Perbaikannya adalah mengurangkan arah itu dari 64 output column di masing-masing dari dua MLP tersebut, total 131.072 bobot, atau 0,016% dari model.

Aritmatikanya sangat sederhana sampai terasa menghina, dan justru itu intinya. Begitu kamu tahu arah mana di activation space yang sesuai dengan "loop selamanya", menghapusnya adalah sebuah proyeksi: untuk setiap vektor bobot yang terdampak, kurangi komponen yang berada di sepanjang arah buruk itu. Siapa pun bisa menulisnya dalam belasan baris kode.

import numpy as np
def subtract_direction(W, v, columns):
"""Remove the component of each chosen column that lies along v."""
v = v / np.linalg.norm(v)
W[:, columns] -= np.outer(v, v @ W[:, columns])
return W
# The Qwen repair, schematically: for the MLP output projections of
# layers 15 and 19, subtract the "loop" direction from 64 columns each.
# 2 layers x 64 columns x 1024 rows = 131,072 edited weights.
W_down[15] = subtract_direction(W_down[15], loop_dir[15], cols[15])
W_down[19] = subtract_direction(W_down[19], loop_dir[19], cols[19])

Bagian sulitnya tidak pernah pengurangannya, melainkan mengetahui arah mana, di layer mana, dari residual stream yang lebarnya ribuan dimensi. Itulah bagian yang dulu kita butuhkan gradient descent, karena gradien adalah prosedur pencarian di weight space yang sama sekali tidak butuh pemahaman. Astra mengganti pencarian dengan diagnosis. Bedanya seperti teknisi listrik yang merewire sirkuit dengan trial and error sampai kerusakannya hilang, dengan teknisi yang membaca skema dan memotong kabel yang tepat. Alasan yang sama juga menjelaskan kenapa model menemukan induction head dengan menyusun matriks bobot: ia menerapkan metode interpretabilitas yang sudah dipublikasikan padahal belum pernah diperlihatkan, yang menunjukkan adanya transfer penalaran yang sungguhan, bukan resep hafalan.

Satu untai berpendar ditarik bersih keluar dari anyaman padat benang-benang yang berpendar.
Mengurangkan satu arah tunggal dari bobot jaringan: anyamannya tetap utuh, asal kamu memilih untaian yang tepat.

Kapan Edit Bobot Langsung Mengalahkan Fine-Tuning

Ini pendapat saya, dan saya siap mempertahankannya: untuk kegagalan yang sempit dan bisa dilokalisasi pada model kecil hingga menengah, edit bobot langsung sudah menjadi alat yang lebih baik, dan jaraknya jauh. Pertimbangkan alternatif fine-tuning untuk bug looping itu. Kamu harus menyusun dataset jejak penalaran yang tidak looping, menjalankan SFT atau RL, dan berharap tekanan loss menghapus perilaku itu tanpa merusak semua pengetahuan lain di model. Kamu akan menghabiskan jam GPU untuk mendaki bukit menuju sebuah proxy, yaitu lebih banyak data matematika, alih-alih menuju niat sebenarnya: 'berhenti mengulang dirimu sendiri'. Weight-space programming memungkinkan kamu menyatakan niat itu. Editnya menyentuh seperseratus persen model; fine-tune menyentuh seluruhnya, dan kerusakan sampingannya muncul belakangan sebagai regresi aneh yang tidak ada yang mengaitkannya kembali ke run training.

Fine-tuning mendaki menuju proxy dari niatmu. Weight-space programming memungkinkan kamu menyatakan niat itu.

Kasus kedua adalah keluar dari local minima yang secara struktural tidak bisa ditinggalkan oleh metode gradien. PPO membuat mobil terjebak menempel di tanjakan karena reinforcement learning mengeksplorasi dengan menggoyang kebijakan yang sekarang, dan tidak ada perturbasi kecil dari "setir lurus" yang menemukan "mundur dulu dua detik". Penalaran tidak menggoyang. Ia bisa melompat ke solusi yang secara kualitatif berbeda karena ia beroperasi pada model masalah, bukan perturbasi terhadap jawaban yang sekarang. Semiliar step PPO tidak bisa menemukan apa yang ditemukan satu kali pass penalaran. Itu bukan kesenjangan efisiensi, melainkan perbedaan kategori.

Ketiga, iterasi loop-nya runtuh. Fine-tuning punya ekor logistik (kurasi data, run training, sweep evaluasi, pengecekan regresi) yang mengubah "perubahan perilaku kecil" menjadi proyek berhari-hari. Siapa pun yang pernah menjalankan model besar di perangkat keras sendiri tahu betapa banyak usahanya adalah plumbing, bukan pemodelan. Edit bobot lebih mirip hotfix kode: diagnosis, patch, jalankan evaluasi, kembalikan kalau salah. Ketika diagnosisnya benar, kamu melewati seluruh pipeline training. Kemenangan yang jelas terkonsentrasi di empat situasi:

  • Kegagalannya sudah didiagnosis, tetapi kamu tidak punya data training yang mengekspresikan perbaikannya
  • Kamu butuh cakupan yang presisi, mengubah satu perilaku tanpa menggeser yang lain
  • Model terjebak di local minimum yang tidak bisa dilepaskan oleh eksplorasi acak
  • Kamu tidak mampu membiayai pipeline training, baik dari sisi GPU maupun waktu kalender

Mengapa Weight-Space Programming Rapuh

Sekarang air dinginnya, karena banyak. Data point paling berguna yang saya lihat bukan dari paper, melainkan dari seorang praktisi yang mencoba trik yang sama pada model kecil natural-language-ke-bash dan tidak mendapat hasil bersih. Mengedit 1.920 bobot memperbaiki beberapa kesalahan grep dan merusak perintah lain. Itu hasil yang wajar, dan itulah masalah dalamnya: perilaku dalam jaringan terlatih itu saling terjalin. Edit Qwen berhasil karena perilaku looping kebetulan hidup di arah yang ringkas dan bisa dihapus. Banyak perilaku tidak begitu. Mereka tersebar dalam superposition, dengan kolom yang sama membawa banyak fitur yang tidak berhubungan, sehingga mengurangkan sebuah "arah" seperti mencoba menghapus satu nada dari sebuah akord. Kamu pasti ikut memotong yang lain. Belum ada yang punya teori untuk memprediksi di muka kegagalan mana yang secara geometris ringkas dan mana yang tersebar. Sampai itu ada, setiap edit bobot adalah perjudian.

Demo pembacaannya juga perlu diberi diskon. Penalaran Astra tentang jaringan game bertumpu pada statistik permukaan, seperti di mana bobot layer pertama terkonsentrasi dan logit output mana yang memisahkan. Identifikasi bahasanya pada dasarnya adalah pilihan ganda tiga opsi, di mana salah satu opsi, bahasa Jepang yang diromanisasi, punya distribusi huruf yang sangat tidak biasa (tidak ada q, l, v, atau x). Pencocokan pola yang mengesankan? Tentu saja. Bukti pemahaman mendalam yang native terhadap weight space? Kurang jelas. Hasil diffusion berlaku dua arah: Astra menggambar setiap bentuk sebagai garis tepi, padahal model sebenarnya menghasilkan bentuk berisi. Itu kesalahan yang membuktikan ia membaca geometri, bukan mensimulasikan jaringan, tapi juga menunjukkan bahwa "pemahamannya" bisa keliru secara struktural dengan cara yang tetap lolos tes.

Lalu soal skala dan provenance. Setiap hasil bersih berada di kisaran 17.000 sampai 7 juta bobot, dengan Qwen 0,8B sebagai pengecualian, dan bahkan eksperimen pembacaan layer tengah butuh sampai seratus kali run analisis Python untuk sampai ke sana. Belum ada yang menunjukkan ini bekerja pada model 70B, apalagi frontier model, dan pendekatan naif (tempel bobotnya ke context window) mati jauh sebelum sampai ke sana. Ada juga pertanyaan tidak nyaman yang menggantung di seluruh hal ini: dari mana kemampuan ini berasal? LLM yang anehnya jago catur biasanya ternyata sudah "memakan" banyak notasi catur saat training. Jika Astra sengaja dilatih dengan data bobot, hasil ini lebih menunjukkan kurikulum yang sangat bagus daripada pemahaman yang muncul sendiri. Kita benar-benar tidak tahu.

Terakhir, lonjakan MATH-500 perlu diberi tanda bintang. Benchmark itu sudah jenuh oleh data training selama bertahun-tahun, dan model dasar dengan skor 7,9% hampir pasti gagal karena looping dan format, bukan karena kemampuan matematika. Artinya, edit ini membuka kemampuan laten, bukan menciptakan keterampilan. Itu tetap berharga; membuka blokir adalah kemenangan nyata. Tapi itu klaim yang berbeda dari "edit membuat model lebih pandai matematika", dan cocok dengan pola yang sudah akrab di mana benchmark melewatkan sebagian besar bentuk pekerjaan nyata.

Skalpel dan palu godam tergeletak berdampingan di samping papan sirkuit yang terbuka di atas meja kerja.
Dua filosofi mengubah model: skalpel edit bobot dan palu godam training gradien.

Edit Bobot di Production: Perlakukan Seperti Hotfix

Kalau kamu ingin mencobanya, dan di model kecil sebaiknya iya, perlakukan edit bobot dengan disiplin yang sama seperti saat menerapkan hot patch ke database yang sedang berjalan. Diff semuanya: catat tepatnya tensor mana yang berubah dan seberapa banyak, karena 0,016% cukup kecil sehingga bug diam di script editmu bisa bersembunyi selamanya. Evaluasi secara luas, bukan hanya pada perilaku target. Perbaikan Qwen kebetulan ikut meningkatkan instruction following, tapi arah efek samping itu adalah keberuntungan, dan lain kali bisa berbalik. Jaga base checkpoint tetap sakral dan versikan setiap edit sebagai patch yang bisa dibalik. Dan atur ambisimu: sweet spot yang sudah didemonstrasikan adalah kegagalan kecil yang terpahami dengan baik pada model yang bisa kamu evaluasi sepenuhnya. Kalau naluri kamu adalah memperbaiki masalah "vibe" yang samar pada model 70B dengan "menghapus arah buruk", kamu akan segera belajar tentang superposition dengan cara yang sulit.

  • Kunci base checkpoint; simpan edit sebagai diff, jangan pernah menimpa di tempat
  • Jalankan evaluasi luas sebelum dan sesudah, bukan hanya benchmark target
  • Utamakan kegagalan dengan signature yang tajam dan bisa direproduksi daripada sekadar vibe
  • Siapkan anggaran untuk revert, dan anggap sebagian edit akan merusak sesuatu

Posisi jujur saya: saat ini ini adalah instrumen interpretabilitas dan skalpel untuk debugging, bukan pipeline deployment. Tim yang pertama kali mendapat nilai bukanlah yang mengirim edit bobot ke production. Mereka adalah yang memakai frontier model untuk menjelaskan apa yang dipelajari model kecil mereka, membaca checkpoint seperti kita sudah membaca jejak penalaran, lalu bertindak berdasarkan pengetahuan itu dengan alat yang biasa saja, membosankan, dan andal.

Gradien Tidak Mati, Hanya Diturunkan Pangkatnya

Di sinilah klaim pembuka saya runtuh, dan saya ingin jujur soal itu. Gradient descent melakukan sesuatu yang tidak bisa dilakukan weight-space programming: ia belajar dari data dalam skala besar. Setiap kemampuan yang dipakai Astra untuk membuat edit ini sendiri dipasang oleh gradien di atas korpus training yang sangat besar. Penalaran bisa melakukan operasi bedah pada apa yang diketahui jaringan; ia tidak bisa mengajarkan jaringan seluruh teks manusia. Masa depan yang realistis bukan gradien yang digantikan, melainkan pembagian kerja. Gradien menuangkan beton; weight-space programming mengerjakan finishing kayu. Selama empat puluh tahun kita memperlakukan bobot yang sudah dilatih sebagai artefak buram, kotak hitam yang hanya bisa diarahkan dari luar. Gagasan baru yang sungguh menarik di sini adalah kotak itu mulai bisa dibaca, dan yang membacanya bukan kita. Apakah itu menenangkan atau mengkhawatirkan mungkin tergantung seberapa besar kamu mempercayai gradien selama ini.