Model abliterated adalah model open-weight biasa yang perilaku penolakannya (refusal) telah dihilangkan secara bedah dengan mengedit bobotnya — bukan dengan melatihnya ulang, dan bukan dengan membungkusnya dalam prompt yang cerdik. Namanya adalah gabungan dari ablate dan obliterate, dan nama itu menggambarkan mekanismenya dengan tepat: Anda mengidentifikasi satu arah di ruang aktivasi yang membawa makna "sebaiknya saya menolak ini", lalu Anda membuat jaringan tidak akan pernah bisa menuliskan arah itu lagi.
Teknik ini lahir dari riset interpretabilitas yang menunjukkan bahwa penolakan pada transformer yang di-tuning untuk chat sebagian besar dimediasi oleh satu arah linear. Temuan itulah yang membuat seluruh proses ini murah. Seandainya penolakan tersebar di ribuan fitur yang saling berinteraksi, menghilangkannya akan membutuhkan gradient descent. Karena penolakan terkonsentrasi, menghilangkannya cukup dengan aljabar linear.
Penolakan hidup di residual stream
Residual stream pada transformer adalah vektor berjalan, satu untuk setiap posisi token, yang dibaca dan ditulis kembali oleh setiap blok. Attention head dan MLP menambahkan keluarannya ke sana; tidak ada yang menimpanya. Karena struktur aditif itu, sebuah arah di residual stream berarti kurang lebih hal yang sama di layer 10 dan di layer 40 — dan persis sifat inilah yang memungkinkan kita membicarakan "arah penolakan" sebagai satu objek tunggal, bukan empat puluh objek yang tidak saling berkaitan.
Untuk menemukannya, Anda butuh dua set prompt: satu yang secara konsisten ditolak model, satu lagi yang secara konsisten dijawab. Jalankan keduanya, tangkap aktivasi residual stream pada satu layer dan posisi token yang tetap (beberapa token instruksi terakhir bekerja dengan baik, karena di situlah model sudah selesai membaca permintaan tetapi belum mulai menjawab), lalu ambil selisih rata-ratanya.
import torch
def refusal_direction(harmful: torch.Tensor, harmless: torch.Tensor) -> torch.Tensor:
"""Difference-in-means estimate of the refusal direction, unit-normalised.
Both tensors are [n_prompts, d_model] residual-stream activations captured at
the same layer and token position. Difference-in-means beats a trained probe
here: with a few hundred prompts a probe overfits, a mean shift does not.
"""
r = harmful.mean(dim=0) - harmless.mean(dim=0)
return r / r.norm()Anda melakukan ini pada setiap layer dan posisi kandidat, menghasilkan puluhan arah kandidat, lalu memilih satu. Pemilihan lebih penting daripada ekstraksi: kriteria yang tepat adalah ablasi kandidat ini, lalu ukur seberapa besar penolakan turun pada prompt berbahaya yang di-hold-out dan seberapa jauh distribusi token berikutnya bergeser pada prompt yang tidak berbahaya. Angka kedua itu — biasanya divergensi KL terhadap model yang belum dimodifikasi — adalah meteran kerusakan Anda. Kandidat yang mematikan penolakan tetapi menggeser distribusi prompt tidak berbahaya secara parah adalah pilihan yang lebih buruk daripada kandidat yang mematikan sedikit lebih sedikit penolakan dengan kerusakan sampingan yang jauh lebih kecil.
Bagaimana model abliterated dibuat
Begitu Anda punya vektor satuan r, ada dua cara memakainya. Cara pertama adalah hook saat inferensi: di setiap layer, kurangi komponen aktivasi di sepanjang r sebelum meneruskannya. Ini berhasil, tetapi harganya adalah sebuah hook runtime, sehingga model tidak lagi berupa checkpoint polos.
Cara kedua — abliteration yang sesungguhnya — menanamkannya langsung ke bobot. Setiap matriks yang menulis ke residual stream mendapat pembaruan rank-one yang menghapus r dari ruang keluarannya: matriks embedding, setiap proyeksi keluaran attention, setiap down-projection MLP.
def orthogonalize_(weight: torch.Tensor, r: torch.Tensor) -> None:
"""Project r out of a matrix that writes into the residual stream, in place.
weight is [d_model, d_in]. After W <- (I - r rT) W, the product W @ x has zero
component along r for every possible x, so no amount of prompting can put the
direction back. Rank-one per matrix; no gradients, no optimiser, no dataset of
answers — only the few hundred prompts used to estimate r.
"""
weight -= torch.outer(r, r @ weight)Hasilnya adalah checkpoint biasa. Arsitektur sama, format file sama, biaya inferensi sama, bisa dimuat di vLLM atau llama.cpp tanpa perubahan. Pada satu GPU, seluruh prosedur ini selesai dalam hitungan menit, dan bagian yang mahal adalah sapuan kandidat, bukan pengeditannya.
Bedanya dengan fine-tuning
Fine-tuning untuk menghilangkan penolakan — SFT atau DPO pada korpus respons yang patuh — adalah operasi yang secara fundamental berbeda. Fine-tuning menggeser setiap bobot lewat gradient descent, membutuhkan dataset berisi jawaban dan bukan sekadar prompt, memakan GPU-hour, dan mengajarkan perilaku baru alih-alih menghapus perilaku yang sudah ada. Fine-tuning juga ikut membawa gaya, bias panjang jawaban, dan keanehan faktual apa pun yang ada di korpus latihnya, serta berisiko menyebabkan catastrophic forgetting pada kemampuan yang tidak terkait.
Abliteration hanya menyentuh satu subruang rank-one dan tidak ada yang lain. Presisi itulah nilai jual utamanya sekaligus sumber mode kegagalan utamanya: jika ada hal lain selain penolakan yang kebetulan hidup di sepanjang r, hal itu ikut hancur, dan sehati-hati apa pun sapuan kandidatnya, ini tidak bisa sepenuhnya dihindari.
Bedanya dengan jailbreak lewat prompt
Jailbreak membiarkan bobot tak tersentuh dan justru mengarahkan aktivasi ke wilayah di mana sirkuit penolakan tidak terpicu. Ini rapuh dengan cara-cara yang penting untuk otomasi. Jailbreak membakar token konteks di setiap panggilan. Jailbreak nondeterministik — prompt yang sama bisa dipatuhi pada satu sampel dan ditolak pada sampel berikutnya. Jailbreak rusak diam-diam ketika penyedia memperbarui model atau menambal frasa spesifik yang dipakai. Dan karena mesin penolakannya masih utuh sepenuhnya, penolakan bisa muncul kembali di tengah generasi, memberi Anda tiga paragraf keluaran yang berguna disusul "sebenarnya, saya tidak bisa melanjutkan ini."
Model abliterated tidak punya apa pun untuk dimunculkan kembali. Perilakunya stabil sepanjang seluruh generasi dan lintas perumusan prompt, dan sifat itulah yang membuatnya layak dipakai dalam pipeline batch.
Jujur soal kompromi yang dibayar
Model abliterated bukan model yang lebih baik. Ia adalah model yang berhenti berkata tidak, dan klaim itu lebih sempit daripada kedengarannya.
- Pergeseran kemampuan. Menghapus satu arah dari setiap matriks penulis punya biaya yang terukur. Checkpoint abliterated umumnya menunjukkan kemampuan mengikuti instruksi yang lebih lemah pada kasus-kasus tepi, lebih mudah menyetujui premis keliru di dalam prompt, dan regresi kecil pada benchmark penalaran.
- Penolakan tidak sepenuhnya satu dimensi. Satu arah menangkap sebagian besar perilaku, bukan seluruhnya. Perkirakan sebagian penolakan akan bertahan, dan perkirakan ada kerusakan sampingan pada perilaku lain yang berbagi arah tersebut.
- Tidak ada pengetahuan baru. Abliteration tidak menambahkan apa pun. Di tempat model dasar tadinya menolak karena ketidaktahuan yang dibungkus sebagai kehati-hatian, sekarang Anda mendapat fabrikasi yang percaya diri — yang untuk sebuah pipeline evaluasi bisa lebih buruk daripada penolakan, karena penolakan setidaknya adalah sinyal jujur yang bisa Anda deteksi.
- Set prompt menentukan hasil editnya. Set prompt berbahaya yang sempit menghasilkan arah yang sempit. Dua abliteration dari model dasar yang sama tidak bisa saling dipertukarkan.
Banyak model abliterated yang dipublikasikan mendapat fine-tune perbaikan ringan sesudahnya untuk memulihkan kemampuan yang menurun — yang secara diam-diam memasukkan kembali biaya yang seharusnya dihindari oleh teknik ini.
Di mana ini berguna
Kasus penggunaan yang jujur adalah pekerjaan di mana penolakan merupakan galat pengukuran, bukan kemenangan keselamatan: harness red-teaming, baseline tingkat penolakan, evaluasi ketahanan (robustness), dan analisis keamanan di mana materinya memicu guardrail meskipun tugasnya bersifat defensif. unbleep menyajikan model abliterated di balik endpoint yang kompatibel dengan OpenAI, sehingga Anda bisa mengarahkan klien yang sudah ada ke sana dan mendapat baseline yang stabil. Apa yang Anda bangun dengan itu adalah tanggung jawab Anda — lihat kebijakan penggunaan untuk batas-batas yang tidak kami langgar.
Dapatkan API key dan ukur sendiri perbedaannya.