Placeholder post2 min read
Low-rank updates, plotted
What LoRA's rank actually buys you, as pixels and as curves. A sketch of a sweep, with charts you can hover, filter and smooth.
LoRA freezes a weight matrix and learns a correction that is the product of two thin matrices. The rank of that product is the only real knob, and it is tempting to turn it up. This placeholder post sketches what turning it does, with synthetic numbers shaped like a real sweep.
The update as pixels
For a frozen weight , LoRA trains
starts at zero, so training begins exactly at the pretrained model.1 Drag the rank and watch the product gain structure.
Learning rate against rank
The useful question is not which rank wins but whether the best learning rate moves with it. With the scaling, it mostly does not.2 Hover the chart to read values; use the chips to hide or isolate a series.
Training curves
Raw loss is noisy. An exponential moving average with factor shows the trend:
Applying it
With Hugging Face PEFT the whole setup is a config:
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
lora_dropout=0.0,
)
model = get_peft_model(model, config)
model.print_trainable_parameters()Targeting the MLP layers as well as attention matters more than the rank in most small sweeps. That claim is the subject of a real post, later.
Notes
Cite this post
@article{sahu2026low,
author = {Surya Kant Sahu},
title = {Low-rank updates, plotted},
year = {2026},
url = {https://ojus1.github.io/posts/low-rank-updates-plotted/}
}