Combat dead codebook entries in VectorQuantize
masterTo prevent 'dead' codebook entries in VectorQuantize, you can use several techniques:
- Lower codebook dimension: Project encoder values to a lower dimension before quantization using
codebook_dim. - Cosine similarity: Use L2 normalization for codes and encoded vectors by setting
use_cosine_sim = True. - Expiring stale codes: Replace codes with low EMA cluster sizes using
threshold_ema_dead_code(e.g., set to2to replace codes with fewer than 2 hits).
import torch
from vector_quantize_pytorch import VectorQuantize
# Example: Lower codebook dimension
vq = VectorQuantize(
dim = 256,
codebook_size = 256,
codebook_dim = 16
)
# Example: Cosine similarity
vq = VectorQuantize(
dim = 256,
codebook_size = 256,
use_cosine_sim = True
)
# Example: Expiring stale codes
vq = VectorQuantize(
dim = 256,
codebook_size = 512,
threshold_ema_dead_code = 2
)