Data-Constrained Scaling › Data Repetition Effects
Language AI HandbookAll chapters Data-Constrained Scaling › Data Repetition EffectsOne section · Sections in this chapter3 / 10 ↓
Reading tools Definitions & inline links
Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.
Article links
Make inline references clickable
When unique data runs out, the natural response is to repeat existing data, training on the same examples multiple times across different epochs. But repetition is not free. Each additional pass through the same data yields diminishing returns, and excessive repetition can actively harm model quality. To understand why, consider what a neural network learns during training and how that learning changes when the network has already seen an example.
Empirical Observations
Muennighoff et al. (2023) conducted the first systematic study of data repetition in language model scaling, training models ranging from 25 million to 8.7 billion parameters with varying degrees of repetition. Their findings confirmed what practitioners suspected:
Repeated data is worth less than unique data. A model trained on 100 billion unique tokens significantly outperforms one trained on 25 billion tokens repeated four times, even though both see the same total token count. The gap widens as repetition increases. This result challenges a naive view where tokens are interchangeable units of learning signal. Instead, the novelty of information matters significantly.
Returns diminish rapidly. The first repetition (seeing data twice) captures perhaps 70-80% of the value of unique data. The fourth repetition might capture only 30-40%. Beyond 8-16 repetitions, additional passes contribute almost nothing to final performance. This pattern reflects how gradient-based learning works: early passes make large updates that capture the broad structure of the data, while later passes can only make small refinements to already-learned patterns.
Larger models suffer more from repetition. A 175 million parameter model tolerates 16 epochs with modest degradation. An 8 billion parameter model shows measurable harm after just 4 epochs. This makes intuitive sense: larger models have more capacity to memorize, and they extract more information per pass, leaving less to learn on subsequent passes. A small model might need multiple exposures to fully capture a complex pattern, while a large model grasps it on the first pass, making subsequent passes redundant.

The Epoch Penalty
Researchers formalize repetition effects through what we might call an "epoch penalty": a multiplier that discounts the effective value of repeated tokens. If unique tokens have a value of 1.0, the -th repetition of a token has value .
Before diving into the mathematical formulation, let's build intuition for what we're trying to capture. Imagine reading a textbook chapter for the first time. You absorb enormous amounts of new information. Reading it a second time still helps: you catch details you missed, reinforce your understanding, and make new connections. By the fifth reading, you're mostly confirming what you already know. By the twentieth reading, you're gaining almost nothing. The mathematical framework below captures exactly this diminishing pattern.
The functional form of this penalty follows an exponential saturation pattern (despite common references to "power law" behavior in scaling contexts, the repetition penalty specifically uses exponential decay). Let be the number of unique tokens and be the number of epochs (repetitions). The effective number of tokens is lower than the naive product :
where:
- : the effective number of training tokens after accounting for repetition penalty
- : the number of unique tokens in the dataset
- : a function that captures the diminishing returns from repetition, mapping epochs to an effective multiplier
The key insight here is that grows more slowly than itself. If repetition had no penalty, we would have , and effective tokens would simply equal total tokens processed. The entire purpose of introducing is to quantify how much value we lose to repetition.
Muennighoff et al. found that is well-approximated by:
where:
- : the number of epochs (times the data is repeated)
- : a decay constant controlling how quickly returns diminish (empirically fitted to approximately 0.1)
- : exponential decay term that approaches zero as repetitions increase
- : the single-epoch decay factor, used to normalize the function so that
Let's unpack why this particular mathematical form makes sense. The numerator is a classic saturation curve. It starts at zero when and approaches 1 as grows large. This captures the intuition that no matter how many times you repeat the data, you can only extract a finite amount of information from it. The denominator is simply a normalization constant that ensures , meaning one pass through the data has full value.
The parameter controls the rate of saturation. When is small (as the empirically fitted value of 0.1 suggests), the saturation happens slowly. You can repeat data many times before hitting severe diminishing returns. If were larger, returns would diminish more quickly, and even modest repetition would waste computational resources.

This functional form has two useful properties. First, , meaning there is no penalty for seeing data once. A single pass through the data contributes its full value. Second, asymptotes to a finite limit as , meaning there is a maximum effective dataset size regardless of how many times you repeat the data. Specifically, as grows without bound, the exponential term vanishes, and approaches . For , this asymptotic limit is approximately 10.5, meaning that infinite repetition of your data is equivalent to having roughly 10.5 times as much unique data. This asymptotic behavior captures the intuition that you cannot extract infinite value from finite data through repetition alone.
Modified Scaling Laws
Incorporating repetition effects into the Chinchilla framework requires modifying the loss function. This modification is an important conceptual shift. We move from treating all tokens as equivalent to recognizing that the information content of tokens depends on whether we've seen them before.
Recall that the basic Chinchilla loss takes the form:
where:
- : the expected loss (cross-entropy) for a model with parameters trained on tokens
- : the number of model parameters
- : the number of training tokens
- : empirically fitted scaling coefficients
- : exponents controlling how loss decreases with scale (approximately 0.34 and 0.28 respectively)
- : irreducible loss representing the entropy of natural language (the theoretical minimum loss even with infinite model size and data)
The formula captures a fundamental tradeoff: the first term represents the capacity limitation of the model (reducible by adding more parameters), while the second term represents the data limitation (reducible by adding more training tokens). The irreducible loss represents patterns in language that are inherently unpredictable. Understanding this decomposition is essential because data-constrained scaling fundamentally alters how we can address the data limitation term.
Think of the first term as "how much the model could learn but lacks the capacity to store," and the second term as "how much the model could store but has not yet seen." In the standard Chinchilla framework, we can freely trade off between these by adjusting model size and data quantity. But when data is constrained, the second term becomes partially frozen, and we can only reduce it so much before running out of unique information.
When data is repeated, we replace with :
where:
- : the expected loss for a model with parameters trained on unique tokens for epochs
- : the effective token count after accounting for repetition penalty, computed as
- : retain their meanings from the standard Chinchilla loss above
This substitution changes the loss curve. In the original formulation, increasing always improves loss (with diminishing returns governed by ). In the modified formulation, increasing epochs improves , but the improvement saturates. Eventually, the marginal gain in effective data from additional epochs becomes negligible, while the computational cost continues to grow linearly.
This modification has measurable implications for compute-optimal training. Under the original Chinchilla law, doubling compute should roughly double both and . Under data-constrained scaling, once is fixed at the available unique data, additional compute should go primarily toward larger models with more repetitions. But we must be aware that the marginal value of additional training decreases. The key tradeoff becomes: given fixed unique data , how should we allocate compute between model size and number of epochs ? The answer depends on solving for the minimum of subject to the compute constraint (approximately 6 FLOPs per parameter per token per epoch).
This optimization problem no longer has the elegant closed-form solution of the original Chinchilla analysis. Instead, practitioners must numerically search over possible allocations, as we demonstrate in the code implementation section below.