Improves LLM convergence and downstream task performance by introducing time-dependent scaling to residual connections, enabling shallow layers to learn first before deeper layers activate. Apply during model pretraining to achieve 0.4-4.86 perplexity reduction.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add ADu2021/skillXiv --skill progressive-residual-warmup --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Progressive Residual Warmup?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/adu2021-progressive-residual-warmup)More formats (shields.io, HTML) on the badges page.
---
name: progressive-residual-warmup
title: "Progressive Residual Warmup for Language Model Pretraining"
version: 0.0.2
engine: skillxiv-v0.0.2-claude-opus-4.6
license: MIT
url: "https://arxiv.org/abs/2603.05369"
keywords: [Pretraining, Optimization, Residual Connections, Layer-wise Warmup, Gradient Stability]
description: "Improves LLM convergence and downstream task performance by introducing time-dependent scaling to residual connections, enabling shallow layers to learn first before deeper layers activate. Apply during model pretraining to achieve 0.4-4.86 perplexity reduction."
---
# Progressive Residual Warmup: Improving Training Stability Through Layer-wise Activation Scheduling
Deep transformer models suffer from unstable optimization during pretraining. All layers simultaneously modify representations from initialization, causing conflicting learning signals where downstream layers process ill-formed inputs from upstream layers. This creates inefficient convergence and suboptimal feature learning across model depth.
Progressive Residual Warmup (ProRes) solves this by introducing learnable time-dependent scaling factors to residual connections. Shallow layers activate immediately while deeper layers gradually "warm up" to full capacity, forcing shallow layers to establish stable representations before downstream layers begin learning. This orchestrated activation prevents representation collapse and improves optimization trajectory.
## Core Concept
Residual connections normally read: x_{l+1} = x_l + F(Norm(x_l))
ProRes modifies this to: x_{l+1} = x_l + α(l,t) · F(Norm(x_l))
The scaling factor α(l,t) is deterministic based on layer depth (l) and training step (t), following a linear schedule that gradually increases from 0 to 1. Early layers see α ≈ 1 from step 1, while later layers remain near 0 initially, gradually increasing throughout warmup.
## Architecture Overview
- **Scheduling Mechanism**: Per-layer warmup schedules based on depth; deeper layers have longer warmup periods
- **No Additional Parameters**: Uses purely deterministic scheduling—no learnable α values, preserving parameter efficiency
- **Gradient Flow**: Shallow layers receive strong gradients from deeper frozen paths, establishing features; gradients gradually route through deeper layers
- **Integration Point**: Drop-in modification to standard transformer architectures at the residual addition step
## Implementation Steps
The core modification integrates cleanly into existing training loops. Implement the warmup schedule as a deterministic multiplier computed once per training step.
```python
# Compute warmup scaling factor for each layer at step t
def compute_warmup_scale(layer_idx, current_step, total_warmup_steps, num_layers):
"""
layer_idx: 0-indexed layer position (0 = shallowest, num_layers-1 = deepest)
current_step: current training step
total_warmup_steps: total steps for complete warmup (e.g., 5000)
num_layers: total number of layers in model
Returns scalar in [0, 1]
"""
# Deeper layers have later warmup start points
layer_warmup_start = (layer_idx / num_layers) * total_warmup_steps
steps_into_layer_warmup = max(0, current_step - layer_warmup_start)
layer_warmup_duration = total_warmup_steps - layer_warmup_start
# Linear schedule: alpha goes from 0 to 1
alpha = min(1.0, steps_into_layer_warmup / layer_warmup_duration)
return alpha
```
Apply this scaling during the forward pass. For transformer blocks, modify residual connections:
```python
# In transformer block forward method
def forward(self, x, layer_idx, warmup_alpha):
"""
x: input tensor
layer_idx: which layer this is (0-indexed)
warmup_alpha: precomputed scaling factor [0, 1]
"""
normed = self.norm(x)
transformed = self.mlp(normed) + self.attn(normed)
# Standard residual: return x + transformed
# ProRes residual: return x + alpha * transformed
return x + warmup_alpha * transformed
```
Compute warmup alpha once per forward pass and broadcast to all layers:
```python
# In training loop
def training_step(batch, global_step, model, total_warmup_steps):
# Model has num_layers layers
num_layers = model.config.num_layers
# Compute all layer alphas for this step
warmup_alphas = [
compute_warmup_scale(l, global_step, total_warmup_steps, num_layers)
for l in range(num_layers)
]
# Forward pass with warmup scheduling
logits = model(batch['input_ids'], warmup_alphas=warmup_alphas)
loss = compute_loss(logits, batch['labels'])
# Standard backprop and optimizer step
loss.backward()
optimizer.step()
```
## Practical Guidance
**Hyperparameters**:
- Total warmup steps: Typically 5-10% of pretraining steps (e.g., 5000-10000 for models trained 100k+ steps)
- Can remain fixed or scale with model size—experiments show robustness across configurations
- Alternative schedule: Use warmup_steps = 0.07 * total_training_steps as default
**When to Apply**:
- Large-scale pretraining (10B+ parameters) where optimization stability is critical
- Deep models (40+ layers) where layer coordination matters most
- Models struggling with convergence or showing perplexity plateaus
**When NOT to Apply**:
- Fine-tuning phases (only beneficial for pretraining)
- Small models (<1B parameters) where the effect is minimal
- Models already converging smoothly with standard training
**Key Pitfalls**:
- Setting total_warmup_steps too short eliminates the effect (needs 5000+ steps minimum)
- Applying simultaneously with other warmup schemes (learning rate warmup) requires careful coordination—delay LR warmup start by ~1000 steps
- Mixing with layer normalization variants (LayerNorm vs RMSNorm)—works with both but scaling factors may need tuning
**Evidence**: Across 130M-7B model scales, ProRes consistently reduced perplexity by 0.4-4.86 points and improved downstream reasoning tasks by 1.27% on average.
Reference: https://arxiv.org/abs/2603.05369
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!