Dimension Projection
Dimension projection enables transferring adapters between models with different dimensions.
Why Projection is Needed
Different models have different dimensions:
GPT-2: 768 dimensions
LLaMA-7B: 4096 dimensions
LLaMA-13B: 5120 dimensions
Direct transfer requires dimension adaptation.
Projection Methods
SVD Projection
Recommended for most use cases
Uses Singular Value Decomposition to preserve maximum variance:
# Reconstruct: ΔW = B @ A
# SVD: ΔW = U @ S @ Vt
# Project: A' = S[:r] @ Vt[:r]
# B' = U[:, :r]
Advantages: * Preserves semantic information * Handles both upscaling and downscaling * Maintains rank automatically
Truncate Projection
Fast but may lose information
Simply truncates or zero-pads dimensions:
# Downscaling: A' = A[:, :target_dim]
# Upscaling: A' = pad(A, target_dim)
Use when: * Dimensions are similar * Speed is critical * Information loss is acceptable
Interpolate Projection
Smooth adaptation
Uses bilinear interpolation:
A_new = F.interpolate(A, size=target_dim)
Good for: * Moderate dimension changes * Preserving smoothness * Image-like weight patterns
Rank Preservation
UAL preserves the original LoRA rank during projection:
Maintains adapter capacity
Prevents information loss
Ensures consistent behavior
Quality Analysis
Projection quality metrics:
Variance preserved
Frobenius norm ratio
Effective rank
quality = projector.analyze_projection_quality(
original_weights,
projected_weights
)
# Returns: {
# "variance_preserved": 0.95,
# "frobenius_ratio": 0.98,
# "effective_rank": 15
# }