Sebuah vector quantizer dapat menyediakan ribuan entri codebook tetapi berulang kali memilih hanya sebagian kecil di antaranya. Ukuran vocabulary yang dikonfigurasi kemudian melebih-lebihkan kapasitas diskret yang benar-benar dipakai. Kondisi ini sering disebut codebook collapse: beberapa entri menerima banyak assignment, sedangkan entri lain menjadi tidak aktif atau hampir tidak aktif.

Masalah tersebut bukan sekadar kekurangan parameter. Penyebabnya berada pada interaksi antara output encoder, aturan assignment, dan prosedur pembaruan vektor kode. Setelah assignment terkonsentrasi pada sebagian entri, entri yang tidak terpakai dapat menerima sangat sedikit sinyal, atau tidak menerima sinyal sama sekali, untuk bergerak menuju wilayah yang ditempati output encoder.

Assignment ke kode terdekat membentuk batas routing diskret

Misalkan output encoder adalah z dan codebook berisi vektor e_1 ... e_K. Hard quantizer yang umum memilih entri terdekat:

k* = argmin_k ||z - e_k||²
q(z) = e_k*

Operasi ini membagi ruang representasi menjadi wilayah yang terkait dengan entri codebook. Sebuah entri aktif pada suatu batch hanya jika setidaknya satu output encoder masuk ke wilayah assignment miliknya.

Nilai K yang dikonfigurasi karena itu tidak menjamin adanya K simbol yang berguna. Jika output encoder menempati bagian ruang yang sempit, atau beberapa vektor kode berada pada posisi yang buruk, assignment dapat terkonsentrasi pada lebih sedikit entri. Codebook besar tetap dapat memiliki utilisasi efektif yang rendah.

Hard assignment juga membentuk efek umpan balik. Entri yang menerima assignment dapat diperbarui menuju output encoder yang diamati. Entri yang tidak menerima assignment mungkin tidak memperoleh pembaruan langsung berbasis assignment. Jalur pembaruan persisnya bergantung pada implementasi quantizer: pembaruan codebook berbasis gradient dan exponential moving average tidak memiliki dinamika yang identik.

Utilisasi terpisah dari kualitas rekonstruksi

Objective rekonstruksi dapat membaik meski penggunaan kode tidak merata. Decoder mungkin dapat merepresentasikan data yang diamati dengan subset kode terbatas, terutama jika kode aktif dan decoder memiliki kapasitas yang memadai untuk distribusi training.

Karena itu, reconstruction loss saja tidak menunjukkan apakah bottleneck diskret memakai vocabulary yang dimaksud. Penggunaan kode memerlukan pengukuran terpisah. Untuk dataset atau stream evaluasi, jumlah assignment dapat ditulis sebagai:

n_k = jumlah assignment ke kode k
p_k = n_k / sum_j n_j

Jumlah kode dengan n_k > 0 memberi occupancy count langsung pada jendela pengukuran. Entropy memberi sudut pandang lain:

H(p) = -sum_k p_k log p_k

Entropy yang lebih tinggi menunjukkan distribusi assignment yang lebih tersebar pada sampel dan jendela pengukuran yang dipilih, tetapi nilai itu bukan metrik kualitas dengan sendirinya. Penggunaan seragam dapat tidak sesuai ketika distribusi data dasarnya sangat tidak seragam. Pertanyaan yang relevan adalah apakah occupancy yang diamati sesuai dengan peran yang diharapkan dari representasi diskret.

Entri tidak aktif dapat bertahan pada pembaruan berbasis assignment

Misalkan sebuah vektor kode berada jauh dari semua output encoder. Dengan assignment nearest-neighbor, vektor tersebut tidak menerima sampel. Jika pembaruannya dihitung hanya dari sampel yang di-assign, entri itu tidak memiliki sinyal data lokal yang menariknya menuju wilayah yang ditempati data.

Kondisi tersebut membentuk asimetri praktis. Entri aktif terus beradaptasi karena terus menerima assignment. Entri tidak aktif dapat tetap berada di luar distribusi encoder kecuali ada mekanisme lain yang memindahkan atau menginisialisasi ulang entri tersebut.

Quantizer berbasis EMA membuat batas ini terlihat jelas. Vektor kodenya biasanya diperbarui dari running count dan jumlah assignment. Entri dengan count yang sangat kecil memiliki bukti yang lemah untuk centroid yang berguna. Implementasi dapat menangani entri kosong dengan cara berbeda, sehingga perilaku pada kondisi tersebut merupakan pilihan implementasi, bukan sifat universal kuantisasi vektor.

Formulasi berbasis gradient memiliki persoalan terkait. Keputusan kode terdekat bersifat diskret, dan training umumnya memakai estimator atau loss terpisah agar gradient dapat memperbarui encoder dan codebook. Dinamika akhirnya bergantung pada definisi loss dan aturan pembaruan tersebut. Keberadaan sebuah vektor kode tidak memastikan optimisasi akan mengarahkan data melaluinya.

Pergeseran encoder dapat memindahkan masalah assignment

State codebook dan state encoder berubah bersama selama training. Codebook yang tersebar baik saat inisialisasi dapat menjadi tidak cocok jika distribusi encoder bergeser. Sebaliknya, vektor kode yang mengikuti output encoder pada fase awal dapat terkonsentrasi di wilayah yang kemudian menerima massa lebih sedikit.

Keterkaitan ini membuat utilisasi perlu dibaca sepanjang waktu, bukan hanya dari satu snapshot akhir. Kode yang tidak aktif pada satu interval dapat aktif kemudian, sedangkan kode yang semula sering dipakai dapat menghilang dari assignment. Inaktivitas yang persisten lebih informatif daripada satu batch kosong.

Komposisi batch juga berpengaruh. Pola semantik atau akustik yang jarang dapat secara sah mengaktifkan sedikit entri dan tidak muncul pada setiap batch. Menyatakan sebuah entri mati berdasarkan jendela pendek dapat mencampur penggunaan yang jarang tetapi valid dengan collapse yang persisten.

Reinisialisasi mengubah state optimisasi

Salah satu respons terhadap inaktivitas persisten adalah mengganti vektor kode yang tidak terpakai dengan nilai yang berasal dari output encoder saat ini. Langkah ini dapat menempatkan entri kembali ke wilayah representasi yang ditempati data sehingga entri tersebut memiliki peluang menerima assignment berikutnya.

Reinisialisasi bukan operasi bookkeeping yang netral. Tindakan itu mengubah state quantizer dan dapat langsung mengubah assignment. Aturan penggantian, threshold inaktivitas, prosedur sampling, dan waktu pembaruan karena itu menjadi bagian dari desain optimisasi.

Desain lain mengubah tekanan assignment, menyesuaikan term codebook atau commitment, mengganti inisialisasi, atau memakai quantizer dengan mekanisme pembaruan berbeda. Tidak ada pilihan tersebut yang menjamin utilisasi luas pada setiap distribusi data. Metode yang meningkatkan occupancy juga dapat mengubah perilaku rekonstruksi atau semantik yang dibawa tiap kode.

Batas implementasinya cukup spesifik: ukuran codebook menyatakan jumlah entri diskret yang tersedia, sedangkan statistik assignment menunjukkan entri yang benar-benar dipakai. Menganggap kedua kuantitas itu setara justru menyembunyikan collapse ketika kapasitas yang dikonfigurasi tampak sehat.