KV cache berukuran tetap tampak cocok dengan kebijakan sederhana: simpan entry terbaru dan buang yang paling lama. Pada sebagian decoder transformer, kebijakan ini justru menghapus posisi yang masih menerima porsi attention besar dari query berikutnya. Posisi awal tersebut bertindak sebagai attention sink, sehingga penghapusannya dapat mengubah distribusi attention jauh melampaui arti semantik token itu sendiri.
Efek ini relevan pada inference ketika sistem serving memangkas key dan value yang sudah tersimpan. Ini bukan klaim bahwa token pertama selalu memiliki arti semantik khusus, ataupun bahwa setiap transformer menunjukkan pola yang sama.
Softmax attention harus membagi massanya
Pada satu attention head, sebuah query menghasilkan skor terhadap key yang tersimpan lalu menormalisasikannya:
[ a_i = \frac{\exp(s_i)}{\sum_j \exp(s_j)}. ]
Bobot hasil normalisasi berjumlah satu pada seluruh posisi yang terlihat oleh query. Pada model yang membentuk perilaku sink, satu atau beberapa posisi awal dapat terus menerima bobot besar meski posisinya tidak membawa konten yang tampak relevan bagi token saat ini.
Kondisi ini menciptakan batas implementasi. Menghapus key sink bukan sekadar memperpendek riwayat. Tindakan itu mengubah himpunan yang dinormalisasi oleh softmax, sehingga massa probabilitas dibagikan ulang ke posisi yang tersisa. Kontribusi value dari posisi yang dihapus juga hilang. Keduanya terjadi sebelum residual update berikutnya merambat ke layer selanjutnya.
Perilaku attention sink dilaporkan pada StreamingLLM untuk beberapa keluarga model autoregresif. Hasil tersebut bersifat empiris dan bergantung pada arsitektur; perilaku ini tidak tepat dianggap sebagai sifat universal semua softmax transformer.
Window terbaru mengubah lebih dari panjang konteks
Anggap cache berkapasitas (W) mempertahankan posisi
[ t-W+1, \ldots, t ]
pada langkah (t). Setelah posisi sink awal keluar dari interval tersebut, query berikutnya tidak lagi dapat mengaksesnya. Sliding window murni karena itu mengubah riwayat semantik yang tersedia sekaligus lokasi attention yang sebelumnya dipakai model sebagai sink.
Cache yang mempertimbangkan sink memakai partisi berbeda. Sebuah prefix kecil dapat dipertahankan secara tetap, sementara kapasitas sisanya diberikan kepada posisi terbaru. Jika (S) entry prefix dipertahankan, cache berisi prefix tersebut ditambah sekitar (W-S) entry terbaru, bukan (W) entry terbaru saja.
Kebijakan ini tidak mengembalikan konteks lama secara sembarang. Token yang dibuang dari bagian tengah tetap tidak dapat diakses. Prefix yang dipertahankan memiliki tujuan lebih sempit: menjaga posisi yang penghapusannya dapat mengganggu perilaku attention sambil tetap membatasi memori KV.
Sink token bukan pengganti retrieval
Posisi sink yang dipertahankan dan token faktual yang dipertahankan menyelesaikan masalah berbeda. Sink dapat menyerap attention tanpa menyimpan fakta lama, instruksi, atau entitas yang dibutuhkan query berikutnya. Setelah entry KV yang membawa konten dibuang, mempertahankan sink tidak merekonstruksi entry tersebut.
Perbedaan ini membatasi interpretasi sistem streaming. Generasi yang stabil dengan cache terbatas tidak sama dengan generasi full-context. Model dapat mempertahankan perilaku lokal yang koheren sambil kehilangan akses ke detail di luar prefix dan recent window yang masih tersimpan.
Aplikasi yang membutuhkan referensi bebas ke konteks lama memerlukan mekanisme lain, seperti cache lebih besar, retensi selektif, retrieval eksternal, atau arsitektur yang memang dirancang untuk pola akses tersebut. Retensi sink hanya menangani gangguan spesifik akibat penghapusan posisi sink.
Penanganan posisi tetap menjadi bagian dari kontrak cache
Mempertahankan entry KV tertentu hanya valid jika runtime menjaga semantik posisi yang diharapkan model. Rotary, absolute, relative, dan skema posisi lain memberi batas berbeda pada cached state dan indeks posisi. Implementasi cache tidak dapat menganggap pemadatan fisik entry selalu identik secara semantik dengan posisi aslinya.
Kebijakan sink karena itu harus diperlakukan bersama pengelolaan posisi dalam desain serving. Entry mana yang dipertahankan, identifier posisi apa yang diberikan ke token baru, dan apakah cached key memerlukan transformasi tertentu merupakan persoalan yang bergantung pada implementasi.
Hal ini juga terpisah dari perluasan model melewati rezim konteks yang didukung. Mempertahankan sink token dapat memperbaiki perilaku cache streaming terbatas pada model yang kompatibel, tetapi tindakan itu sendiri tidak membuktikan bahwa panjang posisi sembarang valid.
Himpunan sink adalah properti model, bukan konstanta
Serving stack tidak seharusnya menetapkan jumlah sink universal berdasarkan model lain. Jumlah dan lokasi posisi awal dengan attention tinggi dapat berbeda menurut arsitektur, konfigurasi training, attention head, dan checkpoint. Kebijakan yang mempertahankan empat token awal adalah pilihan konfigurasi, bukan jaminan matematis.
Pengukuran perlu membandingkan checkpoint target dengan kebijakan cache yang benar-benar akan dipakai saat deployment. Pemeriksaan yang berguna mencakup pola attention jika tersedia, kualitas output pada stream panjang, serta sensitivitas terhadap perubahan ukuran prefix yang dipertahankan. Perbandingan juga perlu memakai aturan posisi yang sama; jika tidak, efek eviksi cache dan perubahan posisi akan tercampur.
Batas praktisnya cukup spesifik: eviksi KV oldest-first naif tidak aman bagi suatu model ketika posisi yang dibuang masih memiliki peran struktural dalam komputasi attention. Mempertahankan prefix kecil dapat menjaga peran itu sambil membatasi memori, tetapi tidak dapat memulihkan konten yang sudah dibuang ataupun menjamin konteks tanpa batas.