Improve long-context length extrapolation by denoising instabilities in Rotary Position Embeddings (RoPE) through spectral analysis and selective head rewriting—training-free post-hoc intervention for longer context windows.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add ADu2021/skillXiv --skill dope-denoising-rotary-embeddings --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Dope Denoising Rotary Embeddings?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/adu2021-dope-denoising-rotary-embeddings)More formats (shields.io, HTML) on the badges page.
---
name: dope-denoising-rotary-embeddings
title: "DoPE: Denoising Rotary Position Embedding"
version: 0.0.2
engine: skillxiv-v0.0.2-claude-opus-4.6
license: MIT
url: "https://arxiv.org/abs/2511.09146"
keywords: [Position Embeddings, RoPE, Long-context, Length Extrapolation, Attention Stability]
description: "Improve long-context length extrapolation by denoising instabilities in Rotary Position Embeddings (RoPE) through spectral analysis and selective head rewriting—training-free post-hoc intervention for longer context windows."
---
# Stabilize Long-Context Reasoning by Denoising Rotary Position Embeddings
RoPE (Rotary Position Embedding) enables models to extrapolate beyond training context, but its low-frequency components concentrate energy in narrow angular cones, creating over-aligned attention patterns that destabilize performance on long sequences. DoPE (Denoising Rotary Position Embedding) identifies and corrects these problematic attention heads using spectral analysis, improving extrapolation without fine-tuning.
The core insight is that certain heads amplify positional noise—they suffer from attention sinks where energy concentrates on specific tokens. By detecting these heads via entropy and reparameterizing their attention maps with isotropic noise, DoPE stabilizes extrapolation and improves needle-in-haystack and in-context learning tasks.
## Core Concept
RoPE uses low-frequency sinusoidal encodings to maintain rotational equivariance across position shifts. However, these low frequencies create pathological activation patterns: they concentrate spectral energy, producing massive attention scores that collapse into sinks (single tokens grabbing all attention) rather than distributing appropriately.
DoPE solves this by:
1. **Spectral Detection**: Identify heads where RoPE induces concentrated energy using truncated matrix entropy on query/key representations
2. **Head Selection**: Sort by entropy and choose heads to denoise (typically 1-32 per layer)
3. **Reparameterization**: Replace problematic RoPE with isotropic Gaussian noise in selected heads, breaking the alignment pathology
This achieves long-context extrapolation gains while keeping the model fully frozen—denoising happens at inference without model retraining.
## Architecture Overview
- **Spectral Analysis Layer**: Compute truncated matrix entropy ℋ = 1/r Σᵢ₌₁ʳ λᵢ log λᵢ on RoPE-transformed representations to quantify concentration
- **Entropy Thresholding**: Select heads with entropy below a calibrated threshold (indicating spectral amplification)
- **Three Denoising Strategies**:
- DoPE-by-parts: Suppress low-frequency RoPE bands
- DoPE-by-all: Completely mask RoPE
- DoPE-by-Gaussian: Replace with isotropic Gaussian noise
- **Inference-time Application**: Apply denoising only at inference; no training needed
## Implementation Steps
**Step 1: Entropy Computation.** Compute singular values of query/key representations and calculate truncated entropy to identify problematic heads.
```python
import numpy as np
def compute_truncated_entropy(representations, r=32):
"""
Compute truncated matrix entropy for head identification.
representations: (seq_len, hidden_dim) tensor of queries or keys
r: number of singular values to use for entropy calculation
"""
U, S, Vt = np.linalg.svd(representations, full_matrices=False)
S_sorted = np.sort(S)[::-1] # descending order
S_trunc = S_sorted[:min(r, len(S_sorted))]
S_norm = S_trunc / np.sum(S_trunc) # normalize
entropy = -np.sum(S_norm * np.log(S_norm + 1e-8))
return entropy
```
**Step 2: Head Selection.** After profiling on matched-length data, identify heads with low entropy (concentration) and mark them for denoising.
```python
def identify_problematic_heads(model, calibration_data, entropy_threshold=0.5):
"""
Identify heads to denoise by computing entropy across attention heads.
Returns list of (layer_idx, head_idx) tuples for heads with entropy < threshold.
"""
problematic_heads = []
for layer_idx, layer in enumerate(model.layers):
entropies = []
for head_idx in range(layer.num_heads):
# Extract head representation during forward pass
head_reps = get_head_representations(layer, calibration_data, head_idx)
ent = compute_truncated_entropy(head_reps)
entropies.append(ent)
# Select bottom-k heads (lowest entropy = highest concentration)
for head_idx, ent in enumerate(entropies):
if ent < entropy_threshold:
problematic_heads.append((layer_idx, head_idx))
return problematic_heads
```
**Step 3: Gaussian Reparameterization.** At inference, replace RoPE in problematic heads with isotropic Gaussian noise.
```python
def apply_dope_denoising(model, problematic_heads, strategy='gaussian'):
"""
Apply denoising strategies to identified heads at inference time.
strategy: 'gaussian' (replace with noise), 'mask-parts' (suppress low freq), 'mask-all' (remove RoPE)
"""
for layer_idx, head_idx in problematic_heads:
layer = model.layers[layer_idx]
if strategy == 'gaussian':
# Replace positional encoding with isotropic Gaussian noise
layer.attention.heads[head_idx].use_rope = False
layer.attention.heads[head_idx].use_gaussian_noise = True
elif strategy == 'mask-parts':
# Suppress low-frequency RoPE bands
layer.attention.heads[head_idx].suppress_low_freq_rope = True
elif strategy == 'mask-all':
# Completely disable RoPE
layer.attention.heads[head_idx].use_rope = False
return model
```
## Practical Guidance
**When to Use:** Long-context reasoning tasks (document QA, long-form summarization, many-shot ICL) where models need to reference distant context or integrate information across 10K+ token windows.
**Hyperparameters:**
- Entropy threshold: calibrate on data of training length; typically 0.3–0.7
- Number of heads to denoise: 1–32 per layer; start conservative (1–8) and increase if extrapolation degrades
**Pitfalls:**
- Over-denoising (denoising too many heads) can discard useful positional information and hurt in-distribution performance
- Entropy threshold must be calibrated on matched-length data; using mismatched data degrades selection accuracy
- Does not solve fundamental context window limits; it improves extrapolation stability but not unbounded scaling
**When NOT to Use:** Short-context or fixed-length tasks where extrapolation is not a concern; denoising adds inference overhead without benefit.
**Integration:** Apply at inference after model loading; pairs well with ALiBi or other position-independent attention variants for complementary improvements.
---
Reference: https://arxiv.org/abs/2511.09146
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!