On the Convergence Rate of LoRA Gradient Descent
SAI replication review · Referee report
Summary
The paper studies gradient descent on the LoRA parametrization and asks how fast it converges when the original loss is Lipschitz smooth and lower bounded, but the reparametrized loss is not. Prior work either studies infinite-width limits, restricts to one-adapter-at-a-time variants (RAC-LoRA, Bernoulli-LoRA), or explicitly assumes bounded adapter norms — which effectively re-imposes Lipschitz smoothness. The conceptual move is to stack and into a single tall matrix so that the reparametrized loss becomes , then derive a "Lipschitz-like" descent lemma with extra higher-order terms in . Because carries a factor, a state-dependent learning rate is needed to guarantee per-step descent; the price is a recursive coupling between and . The authors control this by showing in the worst case, giving and the headline bound on the minimum gradient norm — recovering the classical rate when adapters happen to stay bounded. The theoretical picture is complemented by CIFAR-10 logistic-regression and ResNet-18 experiments plus a TinyLlama fine-tuning study, all designed to exhibit the interplay between , , and observed convergence, and to motivate practical adaptive/normalized schedules (, , ). Overall this is a careful, well-motivated contribution to LoRA theory that fills a real gap. The main conceptual limits are that the guarantee is a best-iterate upper bound with no matching lower bound (so it is unclear whether the factor is intrinsic or a proof artifact), that the theoretically-cleanest schedule is impractical at scale, that the deterministic theory is validated only with minibatch SGD, and that several supporting empirical claims — most notably the large-init LLM regime — rest on hand-wavy reasoning and single-seed runs. An execution of the released code confirms the core empirical phenomena but also shows the headline adaptive schedule was silently broken as shipped.
Strengths
- Conceptual contribution. The stacking turns the two-matrix LoRA update into gradient descent on and cleanly connects the analysis to symmetric Burer–Monteiro. This is a genuinely useful reframing that survives the multi-matrix extension in Section 3.
- First non-asymptotic rate without a bounded-adapter assumption. Prior analyses either enforce bounded or work only asymptotically; establishing under just Lipschitz smoothness and lower-boundedness of the original loss is a real gap-closing result relative to Ghiasvand et al. and Jiang et al.
- Honest calibration of the rate. The paper cleanly distinguishes the general rate from the bounded-iterate recovery, and explains the mechanism (the recursive – coupling and the harmonic-series lower bound on ) rather than hiding it in the appendix.
- Position-dependency insight. The observation that the LoRA reparametrization creates a stationary point at the origin — regardless of the original loss — is neatly extracted from the theory and offers a concrete mechanism for the "LoRA and full-rank fine-tuning may not converge to comparable solutions" observation of Shuttleworth et al.
- Core empirical phenomena reproduce. On execution, the two mechanisms behind the theory show up cleanly: for logistic regression the loss converges early while grows without leveling off ( over 1000 epochs), and for ResNet-18 the loss reaches interpolation and plateaus once it does. The vision-task schedule comparisons also reproduce (fast early descent, stable tail; best on ResNet-18).
- Careful scope statements. The LLM section correctly notes that in the large- regime the adaptive advantage collapses, and the candid admission that is not tractable in standard LoRA implementations is welcome.
Weaknesses
- Rank-independence claim conflates the rate with hidden constants. Section 3.3 asserts as a "rigorous observation" that the rate does not depend on rank, but Theorem 3.5's hides constants involving and , both of which depend on through the stacked-adapter dimension. Only the -dependence is rank-free — the same distinction the paper uses to criticize Jiang et al.
- No lower bound / tightness argument. The paper never argues is the actual rate — only an upper bound achieved with the state-dependent . It is possible the true rate is and the factor is a proof artifact. The Section 4 assertion that "the asymptotic behavior is slower" than overstates what a one-sided upper bound establishes.
- Deterministic theory, stochastic experiments. The rate and the schedule (8) are full-batch GD results, but every experiment uses minibatch SGD (the paper itself lists stochastic GD as unsolved future work). The experiments are best read as motivating, not validating, the theory.
- Best-iterate rather than last-iterate guarantee. Theorem 3.5 controls ; the last iterate, which practitioners deploy, is not covered. Standard for nonconvex analysis but worth an explicit mention.
- Theory-cleanest schedule is impractical at scale. requires , which materializes the reconstructed weight and is not what standard LoRA computes — hence its omission from the ResNet-18 and LLM runs. The Section 3 exposition should state this up front and clarify how approximates rule (8) beyond the pointer to Eq. (23).
- Comparison "in the same range of values" is loose. The reproduced logistic-regression runs show the nonconstant schedules peaking at effective rates of –, several times above the constant grid they are compared against. The observed benefit is partly a high-early/low-late schedule shape no tested constant can match, which should be stated as such.
- BatchNorm-off caveat is buried in the appendix. ResNet-18 runs use
model.eval()(BatchNorm frozen), a substantive departure from standard fine-tuning that changes the loss surface on which the step-size-modulating schedules are assessed. A BatchNorm-active control run, and lifting the caveat into Section 4, would help. - LLM large-init explanation is hand-waved. The rationale for the collapse at (" very large but grows extremely slowly relative to its size") is asserted, not measured — and the reproduction (below) complicates it.
- LLM comparison lacks published tuning details. The central LLM claim depends on "constant learning rates of similar magnitudes," but the paper never states the values, the constant baselines, the number of steps, or the training slice for TinyLlama. Table 1 covers only CIFAR-10.
- Empirical scope and variance. All results are single-seed at a few hyperparameter points on one image classifier and one small chat LLM. Ordering claims like " outperforms " rest on tail-loss gaps () well within plausible seed noise.
- "Almost no impact" of overstates. The proof is insensitive to which block of is extracted, but the block determines the representable update class (top-left gives symmetric PSD , not arbitrary ). The Discussion suggests unwarranted generality.
- Notation slips. (i) " is not Lipschitz smooth in or " reuses , defined over , for the composition ; (ii) the stated stacking order ", " contradicts the extractor definitions that need on top; (iii) is typed where is needed; (iv) is imposed without comment. None are load-bearing but together they slow a careful reading. The load-bearing linear-in- coefficient in the bound is also not spelled out.
Reproducibility & code
Execution used the shipped training paths (patched where necessary); figures and one experiment branch had to be reconstructed. Overall 3/3 headline claims and 9/12 total reproduced (score ).
- Headline adaptive schedule was broken as shipped. The
eta_adaptbranch inmain.pywas a strayifinstead ofelif, so anadaptiverun fell through to the constant path () and diverged to NaN from epoch 1; two further bugs (unassignedbest_step, uncomputedlipschitz_L) crashed the save step. After a control-flow fix the run converged (final loss ) and the claim reproduces, but the paper's adaptive figures cannot be regenerated from the release unedited. - Loss/norm phenomena reproduce. The logistic-regression -unbounded-with-converged-loss fingerprint and the ResNet-18 plateau-at-interpolation behavior both reproduced directly from the checkpoint histories, as did the vision schedule comparisons ( lowest/steadiest, next).
- Large-init LLM branch is missing and behaves differently than described.
llm.pyhard-codes the -init scale at with no branch. When run, the large-init adaptive step size did become nearly constant () — but below , so the model essentially did not train (loss flat near ). The paper conveys "behaves like a constant," not "did not learn." - Small-init LLM claim only partially holds. With , the normalized schedule clearly beat the constant run (final MA-10 loss vs ), but the adaptive schedule tied the constant run with marginally higher step-to-step variance, so "faster and more stable" holds for and not clearly for .
- LoRA-vs-full-rank: only the logistic-regression arm verified. At matched , LoRA was clearly slower ( vs full-rank ), matching Figure 7. No matched full-rank ResNet-18 baseline was runnable, so Figure 8 was not verified; neither shell script runs a no-LoRA sweep.
- No plotting code; missing/mismatched drivers. The repo ships only a learning-rate-finder notebook, so all figures were reconstructed from captions. The 1000-epoch Figure 4 sweep is not scripted (only
--epochs 60);resnet_script.shiterates rather than Table 1's ; andllm.pylogs step size but not gradient norm, so Figure 5's gradient-norm panels are not reproducible as published. - Single seed throughout. Scripts hard-code
--seed 42; no variance information supports the comparative claims. - Possible ResNet-18 construction bug. In
models.py:get_cifar_resnet18the CIFAR head replacements (conv1,maxpool,fc) appear to be applied afterpeft.get_peft_model, so they may not propagate into the trained model. The runs still converged sensibly, so any effect is not obviously fatal, but the path should be verified.
Recommended Changes
Essential
- Qualify the rank-independence claim. In Section 3.3, state that only the -dependence is rank-free while the hidden constants (via , ) generally depend on , mirroring the paper's own critique of Jiang et al.
- Address tightness of . State in the theorem or conclusion that no matching lower bound is established; provide a concrete example (or heuristic) where the factor is achieved, or flag as open whether the true rate is faster, and soften the "asymptotic behavior is slower" phrasing in Section 4.
- Clarify the GD-vs-SGD gap. State that Theorem 3.5 and schedule (8) are full-batch GD results while all experiments are minibatch SGD, and frame the experiments as motivating rather than validating the deterministic rate.
- Fix and release the broken adaptive code path. Correct the
if/elifcontrol flow (and thebest_step/lipschitz_Lerrors) inmain.pyso the releasedeta_adaptschedule runs end-to-end, and confirm the published adaptive figures come from the fixed code. - Report LLM tuning details and reconcile the large-init story. Specify the values, constant baselines, step count, and training slice for TinyLlama; add a direct trajectory at ; and note that the reproduced large-init adaptive run collapsed to a near-zero step size and failed to learn, rather than merely tracking a constant.
- Release the missing code paths and plotting. Publish plotting code for all Section 4 / Appendix B figures, a driver for the 1000-epoch Figure 4 sweep, a branch in
llm.py, gradient-norm logging for the LLM runs, the missing constant inresnet_script.sh, and a no-LoRA driver matching Figures 7–8. - Verify the ResNet-18 model construction. Confirm (and reorder if needed) that the CIFAR head replacements in
get_cifar_resnet18propagate into the PEFT-wrapped model, and rerun Figure 2 if the shipped code differs from what produced it. - Fix the notation slips. Rephrase " not Lipschitz smooth in or " in terms of /; correct the stacking order to ; type as ; note is WLOG; and spell out the coefficient in the linear bound.
Suggested
- State the best-iterate limitation. Add one sentence to Theorem 3.5 clarifying it controls , not the last iterate.
- Report the effective-rate range. In Section 4, note that the adaptive/normalized schedules reach effective rates well above the constant grid early in training, so the "same range of values" comparison reflects a schedule shape rather than a matched magnitude.
- Add a BatchNorm-active control and cross-seed variance. Include at least one ResNet-18 run without
model.eval(), lift the caveat into Section 4, and re-run the CIFAR-10 experiments over 3–5 seeds with variance bands so ordering claims (e.g. vs ) can be assessed against noise. - Explain and soften the remark. Briefly relate the loss-based surrogate to Eq. (8) (and how is absorbed into ), and reframe the extractor remark as "the proof carries over for any block extraction, though the representable update class depends on the block."
- Reconcile Figure 5's caption and prose about which adaptive schedules are actually run for the LLM.