--- license: mit library_name: pytorch tags: - diffusion-language-model - associative-memory - memorization - discrete-diffusion - lm1b - arxiv:2604.26841 datasets: - lm1b --- # Language Diffusion Models are Associative Memories Capable of Retrieving Unseen Data Model checkpoints for the paper: > **Language Diffusion Models are Associative Memories Capable of Retrieving Unseen Data** > Bao Pham, Mohammed J. Zaki, Luca Ambrogioni, Dmitry Krotov, Matteo Negri > **Accepted to EMNLP 2026 (Main Conference).** > arXiv:2604.26841 · [paper](https://arxiv.org/abs/2604.26841) · [code](https://github.com/Lemon-cmd/Associative-Memory-and-Language-Diffusion) ## Abstract When do language diffusion models memorize their training data, and how to quantitatively assess their true generative regime? We address these questions by showing that Uniform-based Discrete Diffusion Models (UDDMs) fundamentally behave as Associative Memories (AMs) with emergent creative capabilities. The core idea of an AM is to reliably recover stored data points as memories by establishing distinct basins of attraction around them. Historically, models like Hopfield networks use an explicit energy function to guarantee these stable attractors. We broaden this perspective by leveraging the observation that energy is not strictly necessary, as basins of attraction can also be formed via conditional likelihood maximization. By evaluating token recovery of training and test examples, we identify in UDDMs a sharp memorization-to-generalization transition governed by the size of the training dataset: as it increases, basins around training examples shrink and basins around unseen test examples expand, until both later converge to the same level. Crucially, we can detect this transition using only the conditional entropy of predicted token sequences: memorization is characterized by vanishing conditional entropy, while in the generalization regime the conditional entropy of most tokens remains finite. Thus, conditional entropy offers a practical probe for the memorization-to-generalization transition in deployed models. ## What is released here The **training-set size is the axis the paper's transition is measured along**, so this repo is a full sweep over it: three model sizes × 54 nested subsets of [LM1B](https://huggingface.co/datasets/billion-word-benchmark/lm1b), from 0.01% of the corpus to 100%, every checkpoint trained for exactly 1,000,000 steps. 162 checkpoints, ~473 GB. ## Repository layout Checkpoints are grouped into one directory per model size: ``` tiny/ 54 checkpoints ~0.38 GB each small/ 54 checkpoints ~2.23 GB each medium/ 54 checkpoints ~6.15 GB each ``` File names keep their original form: ``` /lm1b--.ckpt ``` where `` is the **fraction of the LM1B training set** the model saw (`data.subset` in the training config). The sweep covers 54 values: | Range | Values | |---|---| | Ultra-low data | `0.0001` | | Fine grid | `0.000719` … `0.009381` (15 steps of ~0.000619) | | Low-data grid | `0.01`, `0.02`, `0.03`, `0.04`, `0.05`, `0.06`, `0.07` | | Main grid | `0.1`, `0.13`, `0.16`, … `1.0` (steps of 0.03) | So `medium/lm1b-medium-0.0001.ckpt` is the medium model trained on 0.01% of LM1B, and `medium/lm1b-medium-1.0.ckpt` is the same architecture on the full corpus. Holding the architecture fixed and sweeping `subset` is what isolates the memorization behaviour. ## Model sizes | Size | Backbone | `hidden_size` | `n_blocks` | `n_heads` | `cond_dim` | Params (backbone) | |---|---|---|---|---|---|---| | `tiny` | `ddit` | 256 | 8 | 8 | 128 | 23.7 M | | `small` | `ddit` | 768 | 12 | 12 | 128 | 139.3 M | | `medium` | `ddit` | 1024 | 24 | 16 | 128 | 384.0 M | Shared across all sizes: `length: 1024`, `dropout: 0.1`, `scale_by_sigma: True`, `tie_word_embeddings: False`, `vocab_lookup: True`, log-linear noise schedule. ## Checkpoint contents These are **full PyTorch Lightning checkpoints**, not weights-only exports. Each file contains: | Key | Share of file | Notes | |---|---|---| | `state_dict` | ~25% | Live backbone weights, fp32 | | `ema` | ~25% | `{decay, num_updates, shadow_params}` — EMA **shadow weights**, use these for sampling / evaluation | | `optimizer_states` | ~50% | AdamW moments; keep these to resume training | | `loops`, `callbacks`, `lr_schedulers`, `hyper_parameters`, `sampler` | <1% | Lightning bookkeeping | Because optimizer state is preserved, any checkpoint here can be resumed, not just evaluated. ## Usage Download a single checkpoint: ```python from huggingface_hub import hf_hub_download path = hf_hub_download( repo_id="lemoncmd/lldms-associative-memory", filename="tiny/lm1b-tiny-0.01.ckpt", ) ``` Download one whole size: ```python from huggingface_hub import snapshot_download snapshot_download( repo_id="lemoncmd/lldms-associative-memory", allow_patterns="medium/*", ) ``` Load the EMA weights for evaluation: ```python import torch ckpt = torch.load(path, map_location="cpu", weights_only=False) ema = ckpt["ema"] # {"decay", "num_updates", "shadow_params"} shadow = ema["shadow_params"] # list of tensors, ordered as model.parameters() train_weights = ckpt["state_dict"] # live (non-EMA) weights step = ckpt["global_step"] ``` Note that loading requires `TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1` on recent PyTorch, or `weights_only=False` as above, since the checkpoints contain pickled config objects. ## Training setup Trained with the config in the accompanying codebase (Hydra), tokenizer `bert-base-uncased` (vocab 30,522): - Global batch size 512, sequence length 1024 - Log-linear noise schedule, `duo_base` algorithm - Constant LR with warmup - All checkpoints released here are at `global_step = 1,000,000` - DDP across 4× H100 80GB per run Reproduce a single run with: ```bash python main.py model=medium data.subset=0.25 ``` ## Citation ```bibtex @misc{pham2026languagediffusionmodelsassociative, title={Language Diffusion Models are Associative Memories Capable of Retrieving Unseen Data}, author={Bao Pham and Mohammed J. Zaki and Luca Ambrogioni and Dmitry Krotov and Matteo Negri}, year={2026}, eprint={2604.26841}, archivePrefix={arXiv}, primaryClass={cs.LG}, url={https://arxiv.org/abs/2604.26841}, } ```