Skip to content

Split View: LoRA rank를 바꾸면 학습률도 바꿔야 하나 — μA(2026)가 가른 두 레짐, 그리고 그 측정의 한계

|

LoRA rank를 바꾸면 학습률도 바꿔야 하나 — μA(2026)가 가른 두 레짐, 그리고 그 측정의 한계

들어가며 — rank를 올렸더니 학습률을 다시 찾아야 했다

LoRA를 실제로 굴려 본 사람이면 겪는 일이 있습니다. rank 16에서 잘 돌던 레시피를 rank 64로 올렸더니 손실이 튀거나 학습이 멈춥니다. 학습률을 다시 쓸어 봐야 합니다. 그런데 다른 팀 이야기를 들어 보면 정반대입니다 — "rank는 그냥 올려도 돼요, 학습률은 안 건드려도 됩니다."

둘 다 실제로 관찰된 현상입니다. 그리고 이 모순은 실무자가 대충 봐서 생긴 게 아닙니다. 2026년 2월 5일 arXiv에 올라온 Learning Rate Scaling across LoRA Ranks and Transfer to Full Finetuning(Nan Chen, Soledad Villar, Soufiane Hayou, arXiv:2602.06204)은 이 두 통념이 서로 다른 설정에 대한 참인 진술이라고 말합니다. 어느 쪽인지는 당신이 쓰는 α 규약과 초기화가 결정합니다.

이 글은 그 논문이 정확히 무엇을 유도했고, 실험이 무엇을 쟀고, 무엇을 못 쟀는지를 정리합니다. 결론부터 말하면 유용한 규칙이 나옵니다. 다만 그 근거는 시드 하나(42)에 2배 간격 격자이고, 저자들 자신이 한계를 명시해 두었습니다. 그 한계까지 같이 옮기는 게 이 글의 목적입니다.

문제의 정체 — α, 초기화, rank, 학습률은 서로 묶여 있다

논문의 표기부터 맞춥시다. LoRA는 얼어붙은 사전학습 가중치에 저랭크 항을 더합니다.

W  ←  W + α·B·A

  A ∈ R^(r×n)   (down-projection)
  B ∈ R^(n×r)   (up-projection)
  n = 모델 폭(width),  r = LoRA rank,  α = LoRA 배율(multiplier)

여기서 실무자가 만지는 손잡이는 넷입니다 — rank r, 배율 α, 학습률 η, 그리고 초기화. 어댑터가 처음에 no-op이 되도록 한쪽 인자는 0으로 두고 다른 쪽만 랜덤으로 채우는데, 논문은 이 두 선택을 이렇게 부릅니다.

  • Init[A] — A는 랜덤, B = 0. 원조 LoRA가 쓰는 방식이고, 대부분의 구현 기본값입니다.
  • Init[B] — B는 랜덤, A = 0. 뒤집은 쪽입니다.

배율 α도 하나가 아닙니다. 논문 2절 정리에 따르면 원조 LoRA(Hu 등, 2022)는 업데이트 크기를 눌러 두려고 α = r의 -1제곱을 쓰고, rsLoRA(Kalajdzievski, 2023)는 큰 rank에서의 안정성을 위해 α = r의 -1/2제곱을 제안했으며, 최근 연구들은 점점 α = 1을 씁니다.

여기서 실무자가 헷갈리는 지점이 나옵니다. Hugging Face PEFT는 α를 직접 받지 않습니다. PEFT v0.17.0 소스(논문이 실제로 쓴 버전)를 열어 보면 이렇게 되어 있습니다.

# peft/tuners/lora/layer.py — update_layer()
if use_rslora:
    self.scaling[adapter_name] = lora_alpha / math.sqrt(r)
else:
    self.scaling[adapter_name] = lora_alpha / r

use_rslora=False일 때 실효 배율은 lora_alpha / r입니다. 그래서 논문의 α로 환산하면 이렇게 됩니다.

lora_alpha = 32 (rank와 무관한 상수)  ->  실효 α = 32/r   ∝ r^(-1)
lora_alpha = r  (rank에 맞춰 같이 키움) ->  실효 α = 1      (상수)
lora_alpha = 2r                        ->  실효 α = 2      (상수)

튜토리얼에 흔한 lora_alpha=32 고정과, 요즘 자주 권장되는 "lora_alpha를 rank와 같이(혹은 2배로) 맞춰라"는 조언이 서로 다른 수학적 레짐이라는 뜻입니다. 논문 1절의 표현대로, LoRA 업데이트는 A와 B에 대해 쌍선형(bilinear)이라 초기화·α·rank·η가 서로 얽혀 실효 업데이트 크기를 함께 결정합니다. 그래서 하이퍼파라미터 튜닝이 깨지기 쉽습니다.

μA — 두 레짐이 갈리는 지점

논문은 폭과 rank가 동시에 무한대로 가는 극한(n, r → ∞)에서 LoRA의 한 스텝 특징 업데이트 크기를 계산합니다. 사전학습의 μP(Maximal-Update Parametrization)를 파인튜닝에 옮긴 것이라 이름이 μA(Maximal-Update Adaptation)입니다. 목표는 특징 업데이트가 발산하지도, 사라지지도 않는(Θ(1)) 학습률을 찾는 것입니다.

가정을 먼저 봐야 합니다. 논문 4절이 명시한 것은 셋입니다.

  1. 각 스텝에서 순전파 입력과 역전파 그래디언트가 Θ(1)로 유계 (가정 4.1)
  2. 옵티마이저를 모멘텀 없는 Adam = SignSGD로 근사 (가정 4.2). 실험은 실제로는 AdamW로 돌립니다.
  3. 손실은 단일 샘플 기준으로 계산 (Hayou 등, 2024b를 따름)

이 위에서 나온 결과가 두 개입니다.

Init[A] (따름정리 4.4). α = r의 -γ제곱, γ는 0과 1 사이라고 두면, 안정적 특징 학습에 필요한 학습률은

η = Θ( n^(-1/2) · r^(-(1-γ)/2) )

  γ=0   (α = 1)          ->  η ∝ n^(-1/2) · r^(-1/2)     rank 의존
  γ=1/2 (α = r^(-1/2))   ->  η ∝ n^(-1/2) · r^(-1/4)     약한 rank 의존
  γ=1   (α = r^(-1))     ->  η ∝ n^(-1/2)                rank 무관

논문의 해석을 그대로 옮기면, α = 1일 때는 rank를 4배 키우면 학습률을 절반으로 줄여야 하고, α = r의 -1제곱일 때는 rank 의존이 배율에 흡수되어 학습률이 rank에 무관해집니다.

Init[B], α = 1 (따름정리 4.6).

η = Θ( n^(-1) )      rank 무관, 폭에만 의존

여기서 논문의 핵심 관찰이 나옵니다. 같은 SignSGD 근사 아래에서 선형 층의 풀 파인튜닝(FFT)도 η ∝ n^(-1) 이라는 것입니다(부록 A.6, 정리 A.23). 폭 스케일링이 일치한다 — 이게 LoRA와 FFT 사이 학습률 전이의 필요조건입니다.

한 가지 덜 알려진 부산물도 있습니다. Init[A]에서는 rank가 커질수록 A의 기여분이 사라지고 학습이 사실상 B를 통해서만 일어납니다. 논문 표현으로는 어댑터가 점점 "A를 초기값에 고정한 랜덤 사영"처럼 행동하며, 이 불균형은 Init[A]의 모든 표준 α 선택에서 사라지지 않습니다. Init[B]에서는 정반대로, r이 n보다 훨씬 작으면 B의 업데이트가 무시할 만해지고 학습이 주로 A를 통해 일어납니다.

왜 "학습률 10배" 민담이 계속 살아남았나

이제 앞의 모순이 풀립니다.

작년 9월 29일 Thinking Machines의 LoRA Without Regret(John Schulman 등)은 이렇게 적었습니다 — 자기들은 W' = W + (α/r)BA에 α = 32를 고정해서 썼고, "1/r 스케일링 인자가 최적 학습률을 rank에 대략 무관하게 만든다"고요. 학습 초반에는 rank가 달라도 학습 곡선이 정확히 같아서, 처음엔 rank 인자가 무시되는 버그를 의심했다고까지 씁니다.

μA 좌표로 옮기면 Schulman의 설정은 실효 α = 32/r, 즉 γ=1입니다. 따름정리 4.4가 rank 무관을 예측하는 바로 그 칸입니다. 두 통념 중 "rank 무관" 쪽은 참입니다 — 고전적인 1/r 규약을 쓴다는 조건 아래에서. 그리고 lora_alpha를 rank에 맞춰 키우기 시작하는 순간 당신은 γ=0 칸으로 이동했고, 거기서는 rank를 4배 올릴 때 학습률을 절반으로 내려야 합니다. 같은 사람이 같은 라이브러리로 정반대 경험을 하는 이유가 이것입니다.

그런데 μA가 풀지 못한 게 하나 남습니다. Schulman이 보고한 유명한 규칙 — "LoRA의 최적 학습률은 같은 응용에서 FullFT의 10배"입니다. 그 근거는 이렇습니다. Tulu3 데이터셋 위에서 Llama와 Qwen 계열 14개 모델에 대해 LoRA와 FullFT 학습률을 각각 쓸었고, 최적 학습률을 hidden size와 모델 계열(Llama/Qwen)로 예측하는 함수를 적합했습니다. 그 최적화가 찾아낸 LoRA 배수는 9.8이었고, LoRA의 hidden size 의존 지수는 FullFT와 같았습니다(적합 결과 LoRA pow = 0). 짧은 런에서는 배수가 더 크다는 예비 관찰(~15배, 각주에 "일화적 근거이며 대략 100스텝 이하에서 유효")도 함께 적어 두었습니다.

이 규칙에 대해 Schulman 본인이 붙인 문장이 중요합니다 — "우리는 이 관찰에 대한 적절한 이론적 설명을 아직 갖고 있지 않다." 실제로 블로그의 미해결 질문 목록 2번이 "LoRA와 FullFT 학습률의 비율을 설명하는 더 완전한 이론"입니다.

μA는 그 질문에 답하지 않습니다. 논문 2절은 Schulman의 결과를 "휴리스틱 규칙(예: LoRA 학습률을 10으로 나눠 FFT 학습률을 얻기)"이라고만 언급하고 지나갑니다. 대신 μA가 하는 일은 우회입니다 — 비율을 설명하는 대신, 비율이 1이 되는 설정을 찾아냅니다.

우회 — LoRA에서 FFT로 학습률을 그대로 옮기기

Init[B] + α = 1이 그 설정입니다. 논문의 논리는 이렇습니다. 이 설정의 필요 학습률은 η ∝ n^(-1), 선형 층 FFT의 필요 학습률도 η ∝ n^(-1). 폭 스케일링이 같으니 최적 학습률이 정렬될 수 있고, 그렇다면 LoRA에서 튜닝한 학습률을 FFT에 그대로 쓸 수 있습니다.

실험은 이 예측을 대체로 지지합니다. 논문 5.2절의 표현을 그대로 옮기면 — 대부분의 모델에서 Init[B] (α=1)의 최적 학습률이 FFT의 최적 학습률과 근접하게 정렬됩니다. 예외는 RoBERTa-large로, FFT가 Init[B]보다 약간 작은 학습률을 선호했습니다. 논문은 이를 추가된 분류 헤드 탓으로 돌립니다 — 헤드의 학습률은 10의 -3제곱으로 고정했지만, 어댑터와 함께 학습되면서 최적점을 흔들 수 있다는 것입니다.

저자들이 제안하는 실무 워크플로가 여기서 나옵니다. GRPO로 Llama-3.1-8B를 GSM8k에 맞춘 RLVR 실험에서 FFT는 LoRA(r=256)보다 GPU 메모리를 2배 넘게 썼고, 그 초과분 대부분이 그래디언트 버퍼와 옵티마이저 상태였습니다(같은 실험에서 스텝당 벽시계 시간은 둘이 비슷했습니다). 그러니 상대적으로 구하기 쉬운 중급 GPU에서 Init[B] (α=1)로 학습률을 쓸고, 그 값을 큰 하드웨어의 FFT로 옮기면 재튜닝 비용을 아낀다 — 이게 논문이 파는 물건입니다.

여기서 두 가지를 정직하게 짚어야 합니다.

첫째, 논문 6절 한계가 못 박습니다 — 이 분석은 학습률 전이의 필요조건을 세운 것이고, 충분조건을 찾아 증명하는 것은 향후 과제입니다. 폭 스케일링이 같다는 건 "정렬될 수 있다"이지 "정렬된다"가 아닙니다. 실험이 정렬을 보여 주지만, 실험은 실험입니다.

둘째, Init[B]는 PEFT의 기본값이 아닙니다. v0.17.0 소스의 reset_lora_parameters를 보면 기본 경로(init_lora_weights=True)는 lora_A에 kaiming_uniform_, lora_B에 zeros_를 넣습니다 — 즉 Init[A]입니다. 게다가 논문은 0이 아닌 쪽 인자에 Kaiming normal을 써서 Init[A]는 A 성분 분산 1/n, Init[B]는 B 성분 분산 1/r을 맞췄다고 밝힙니다. PEFT 기본은 Kaiming uniform입니다. 정리하면, 이 논문의 설정을 재현하려면 LoraConfig 플래그 몇 개로는 안 되고 초기화 코드를 직접 건드려야 합니다.

실험이 실제로 잰 것, 그리고 안 잰 것

이 부분이 이 글에서 제일 중요합니다.

무엇을 돌렸나. 다섯 개 SFT 설정 — Llama-3.2-1B / Tulu-3 SFT 혼합(학습 320k, 검증 32k, 최대 1024토큰), Qwen2.5-3B-Instruct / OpenThoughts-114k(71k / 6k, 8192토큰 패킹), RoBERTa-large / ANLI(163k / 3k), ViT-Huge/14 / ImageNet-1K(1.28M / 50k), Qwen3-VL-2B-Instruct / LLaVA-Instruct-Mix(198k / 17k). 여기에 RLVR로 Llama-3.1-8B / GSM8k(GRPO의 DAPO 변형), 그리고 확산 모델로 Stable Diffusion v1.5 / Naruto-BLIP-Captions(1.2k쌍, 10,000스텝). 하드웨어는 H200 4장 노드. 언어·비전·비전언어·이미지 생성·강화학습을 모두 훑는다는 점에서 커버리지는 확실히 넓습니다.

그런데 통계는 이렇습니다.

  • 논문 부록 B.1: "랜덤 시드는 모든 실험에서 42로 설정한다." 시드는 하나입니다. 신뢰구간도, 오차 막대도, 시드 간 분산도 보고되지 않습니다.
  • 학습률 격자는 log2 스케일에 정수 지수만, 즉 인접점이 2배 차이입니다. 보고된 "최적점"은 이 이산 격자 위의 최선값입니다.
  • rank는 설정당 5개뿐입니다. Init[A]는 4, 16, 64, 256, 1024. Init[B]는 SFT에서 16, 32, 64, 128, 256. RLVR과 확산 모델의 Init[A]는 1, 4, 16, 64, 256.
  • RLVR 학습은 GSM8k에서 문제 500개(테스트 50개)를 뽑아 씁니다.

논문 5.1절이 이 한계를 스스로 적어 둡니다. 스케일링 규칙은 (n, r) → ∞의 선행항 의존성이고, 유한한 폭과 rank에서는 상수항과 저차항이 최적점을 밀 수 있으며 그 영향은 작은 rank에서 더 큽니다. 그리고 "손실 지형이 최적점 근처에서 평평하면 인접 격자점의 성능이 비슷해서, 어느 쪽이 최선으로 보이는지를 학습 노이즈가 결정할 수 있다." 그래서 저자들은 정확한 수치 일치가 아니라 정성적 경향으로 평가한다고 선언합니다 — rank 무관이 예측되는 설정은 최적점들이 격자 한 칸(2배) 안에 모이면 합격, rank 의존 설정은 최적점이 rank에 따라 단조롭게 움직이고 여러 격자점에 걸치면 합격.

즉 이 논문의 "rank 무관"은 "시드 하나에서, 2배 간격 격자의 한 칸 안"이라는 뜻입니다. 유용한 주장이지만, 정밀한 주장은 아닙니다. 그리고 논문은 이걸 숨기지 않습니다 — 숨기지 않는 게 이 논문의 미덕입니다.

논문이 스스로 보고한 어긋남도 있습니다. Qwen2.5-3B-Instruct의 Init[A] (α=1)에서 r=16과 r=64가 같은 학습률에서 최소 손실을 냈습니다(예측은 서로 달라야 함). 논문은 격자 이산화 탓으로 돌립니다. 그리고 Init[A] (α=r의 -1제곱)에서는 작은 rank(r=4)가 큰 rank보다 약간 작은 학습률을 선호했는데, 이건 α=1에서 관찰된 경향과 반대 방향입니다. 논문은 유한 크기 효과로 설명합니다. 두 경우 모두 설명이 사후적이라는 점은 짚어 둘 만합니다.

그리고 이 논문이 재지 않은 것. 이건 "LoRA가 FFT만큼 잘한다"는 논문이 아닙니다. 재는 대상은 최적 학습률이 어디에 놓이는지이지, LoRA가 FFT의 최종 손실에 도달하는지가 아닙니다. 학습률 스윕의 U자 곡선에서 바닥의 위치를 다루지, 바닥의 깊이를 주장하지 않습니다. RLVR 부록 D.1에서 "rank가 달라도 최고 성능이 비슷하다"고 관찰하며 Schulman과 일치한다고 적은 대목 정도가 예외인데, 이건 부수 관찰이지 이 논문의 주장이 아닙니다. LoRA가 언제 FFT에 못 미치는지는 여전히 LoRA Learns Less and Forgets Less(Biderman 등, TMLR 2024) 같은 별도 근거를 봐야 합니다 — 그쪽은 프로그래밍과 수학 도메인에서 표준 저랭크 설정의 LoRA가 풀 파인튜닝에 상당히 못 미치되, 대상 도메인 밖 성능은 더 잘 지킨다고 보고합니다.

또 하나. 디코더 전용 LM에서 LoRA를 MLP에만(gate_proj, up_proj, down_proj) 붙였습니다. 이건 결함이라기보다 현재 최선 관행과 맞습니다 — Schulman의 블로그는 어텐션 전용 LoRA가 MLP 전용보다 확연히 못하고 MLP 위에 어텐션을 더해도 이득이 없다고 보고했고, Biderman 등도 같은 결과를 얻었다고 적습니다. 다만 스케일링 규칙이 다른 배치 전략에서도 성립하는지는 이 실험이 답하지 않습니다.

폭 스케일링에서 두 결과가 갈린다

여기는 제가 두 출처를 나란히 놓고 읽은 결과이고, 어느 논문도 상대를 이 지점에서 다루지 않는다는 걸 먼저 밝혀 둡니다.

Schulman의 설정은 μA 좌표로 Init[A], α ∝ r의 -1제곱입니다. μA의 표 1은 그 칸에서 η ∝ n^(-1/2)를 줍니다. 그리고 μA의 정리 A.23은 FFT가 η ∝ n^(-1)이라고 합니다. 두 개를 나누면 LoRA/FFT 학습률 비율이 n의 1/2제곱에 비례한다는 예측이 나옵니다 — 즉 모델이 넓어질수록 비율이 커져야 합니다.

그런데 Schulman의 적합 결과는 정반대입니다. 14개 모델에 대해 최적화가 찾은 값은 LoRA pow = 0, 즉 LoRA의 hidden size 의존이 FullFT와 동일하고 배수는 9.8로 고정입니다.

이 둘은 그대로는 맞지 않습니다. 다만 성급하게 "한쪽이 틀렸다"고 말하면 안 되는 이유가 있습니다.

  • μA의 이론은 점근적입니다. 논문 6절 한계가 "우리 이론은 점근적이고 유한한 (n, r)에서는 노이즈에 민감할 수 있다"고 직접 적어 둡니다.
  • 산수를 해 보면 n의 1/2제곱은 hidden size가 4배 벌어져야 비율이 2배 변합니다. 2배는 log2 격자에서 정확히 한 칸입니다. 즉 이 예측된 차이는 두 연구 어느 쪽의 측정 해상도로도 잡히지 않는 크기일 수 있습니다.
  • Schulman의 적합은 Llama/Qwen 계열마다 별도의 지수를 따로 두었으므로, 순수한 폭 스케일링 검정이라고 보기도 어렵습니다.

정직한 결론은 이겁니다 — 이 불일치를 정리한 숫자는 아직 발표되지 않았습니다. μA는 10배 규칙을 설명하지 않고, Schulman의 적합은 μA의 폭 지수를 검정하도록 설계되지 않았습니다. 누가 두 좌표계를 맞춰 놓고 넓은 hidden size 범위를 여러 시드로 쓸어야 답이 나옵니다. 그 실험은 제가 아는 한 없습니다.

그래서 실무에서 뭘 해야 하나

1. α 규약부터 확인하세요. 이게 이 글에서 가장 값싸고 가장 확실한 이득입니다.

lora_alpha 고정(32 등) + use_rslora=False   ->  실효 α ∝ r^(-1)
   => rank를 바꿔도 학습률 유지. (Schulman이 본 그림)

lora_alpha = r 또는 2r                       ->  실효 α = 상수
   => μA 예측: rank 4배마다 학습률 절반.

논문은 α가 2일 때와 4일 때도 같은 스케일링이 유지되는지 부록 C.1에서 확인했습니다. 즉 "lora_alpha를 rank에 맞춰 키워라"는 조언을 따르는 순간, 함께 따라와야 하는 학습률 규칙이 있는데 그 조언에는 대개 빠져 있습니다.

2. FFT 학습률을 싸게 찾고 싶다면 Init[B] + α=1이 후보입니다. 다만 (a) 필요조건일 뿐이고, (b) PEFT 기본값이 아니라 초기화 코드를 직접 써야 하고, (c) 근거는 시드 하나입니다. 분류 헤드가 붙는 모델에서는 논문 스스로 어긋남을 보고했습니다. 시작점으로 쓰되 검증은 하십시오.

3. RL에서는 학습률 실수가 두 번 비쌉니다. 논문 5.3절이 관찰한 게 이겁니다 — SFT에서는 학습률이 너무 작으면 그냥 수렴이 느려지지만, RLVR에서는 너무 크든 너무 작든 학습 보상이 크게 망가집니다. 게다가 벽시계 시간까지 물립니다. 부록 D.2의 사례 연구를 보면, 최적 학습률(2의 -18제곱)에서는 모델이 초기 탐색 구간(완성 길이가 상한 1024토큰에 붙음)을 100스텝쯤에 빠져나와 200토큰 안팎의 간결한 풀이로 넘어가고 스텝당 4~5초가 걸립니다. 반면 준최적 학습률(2의 -16제곱)에서는 탐색 구간에 갇혀 계속 최대 길이를 뽑아내며 스텝당 15~22초 — 3~5배입니다. 보상은 0 근처로 붕괴합니다. 저자들은 반대 방향 실패도 하나 적어 뒀습니다: Init[B], α=1에 더 높은 학습률(2의 -15제곱)을 주면 모델이 2토큰쯤 만들고 생성을 멈춰 버려서 역시 스텝이 빨라집니다. 스텝이 빨라졌다고 좋아할 일이 아니라는 뜻입니다.

언제 이게 필요 없나. rank를 바꿀 일이 없고 지금 레시피가 돌고 있다면 이 논문은 당신에게 아무것도 주지 않습니다. 모델과 태스크가 하나로 고정돼 있다면, n, r → ∞의 점근 규칙보다 이미 돌려 놓은 스윕이 낫습니다. 그리고 규칙들은 전부 Θ(·)입니다 — 지수를 알려 줄 뿐 상수는 알려 주지 않습니다. 어느 경우든 기준점을 잡는 스윕 한 번은 여전히 당신 몫입니다. μA가 줄여 주는 건 그 스윕을 몇 번 반복하느냐이지, 스윕 자체가 아닙니다.

마치며

정리하면 이렇습니다. "LoRA rank를 바꾸면 학습률을 다시 찾아야 하나"에 대한 2026년 2월 시점의 답은 "당신의 α 규약에 달렸다"입니다. 고전적인 1/r 규약이면 안 바꿔도 되고, lora_alpha를 rank에 맞춰 키우는 요즘 방식이면 rank 4배마다 절반으로 내려야 합니다. 그리고 Init[B] + α = 1이라는 덜 쓰이는 설정에서는 최적 학습률이 풀 파인튜닝과 같은 폭 스케일링을 가져서, LoRA에서 튜닝한 값을 FFT로 옮기는 게 원리적으로 가능합니다.

동시에 이 근거의 크기도 정확히 알아야 합니다. 시드 42 하나, 2배 간격 격자, 설정당 rank 5개, 점근 이론, 그리고 저자들이 명시한 "필요조건일 뿐"이라는 단서. 저자들은 정확한 수치 일치가 아니라 정성적 경향으로 평가한다고 스스로 선언했고, 그 기준을 통과했습니다. 그 이상을 이 논문에서 읽어 내면 안 됩니다.

그리고 아직 아무도 모르는 게 하나 남아 있습니다. Schulman이 관찰한 "LoRA 학습률은 FullFT의 10배"는 여전히 설명되지 않았습니다. μA는 그 비율을 설명하는 대신 비율이 1이 되는 좌표계로 옮겨 갔습니다. 실용적으로는 충분히 영리한 우회지만, Schulman의 미해결 질문은 그대로 열려 있습니다. LoRA는 2021년부터 우리가 매일 쓰는 도구인데, 그 학습률이 왜 그 값이어야 하는지는 2026년 중반에도 아직 완전히 설명되지 않았습니다.

참고 자료

Do You Need a New Learning Rate When You Change LoRA Rank? — The Two Regimes μA (2026) Splits, and the Limits of That Evidence

Introduction — I Raised the Rank and Had to Re-Find the Learning Rate

Anyone who has actually run LoRA in production has hit this. A recipe that worked fine at rank 16 starts spiking the loss or stalling training once you bump it to rank 64. You have to re-sweep the learning rate. But talk to another team and you hear the opposite — "You can just raise the rank, no need to touch the learning rate."

Both are genuinely observed phenomena. And this isn't a contradiction born from practitioners being sloppy. Learning Rate Scaling across LoRA Ranks and Transfer to Full Finetuning (Nan Chen, Soledad Villar, Soufiane Hayou, arXiv:2602.06204), posted to arXiv on February 5, 2026, says the two beliefs are true statements about different setups. Which one applies to you is decided by the α convention and the initialization you use.

This post lays out exactly what the paper derived, what its experiments measured, and what they didn't. The short version: a useful rule falls out of it. But the evidence behind it is a single seed (42) on a 2x-spaced grid, and the authors themselves spell out the limits. Carrying those limits along too is the point of this post.

The Shape of the Problem — α, Initialization, Rank, and Learning Rate Are Tangled Together

Let's align on the paper's notation first. LoRA adds a low-rank term to frozen pretrained weights.

W  ←  W + α·B·A

  A ∈ R^(r×n)   (down-projection)
  B ∈ R^(n×r)   (up-projection)
  n = model width,  r = LoRA rank,  α = LoRA multiplier

There are four knobs a practitioner turns here — rank r, multiplier α, learning rate η, and initialization. To make the adapter a no-op at the start, one factor is set to zero and only the other is filled with random values; the paper names these two choices as follows.

  • Init[A] — A is random, B = 0. This is what the original LoRA uses, and it's the default in most implementations.
  • Init[B] — B is random, A = 0. The flipped version.

The multiplier α isn't singular either. Per the paper's Section 2 summary, the original LoRA (Hu et al., 2022) uses α = r^(-1) to keep the update size down; rsLoRA (Kalajdzievski, 2023) proposed α = r^(-1/2) for stability at large rank; and more recent work increasingly uses α = 1.

This is where practitioners get confused. Hugging Face PEFT doesn't take α directly. Open the PEFT v0.17.0 source (the version the paper actually used) and you find this.

# peft/tuners/lora/layer.py — update_layer()
if use_rslora:
    self.scaling[adapter_name] = lora_alpha / math.sqrt(r)
else:
    self.scaling[adapter_name] = lora_alpha / r

That is, when use_rslora=False, the effective multiplier is lora_alpha / r. Converted into the paper's α, that gives:

lora_alpha = 32 (a constant, independent of rank)  ->  effective α = 32/r   ∝ r^(-1)
lora_alpha = r  (scaled up together with rank)      ->  effective α = 1      (constant)
lora_alpha = 2r                                     ->  effective α = 2      (constant)

That means the fixed lora_alpha=32 common in tutorials, and the increasingly common advice to "match lora_alpha to rank (or double it)," are different mathematical regimes. As the paper's Section 1 puts it, the LoRA update is bilinear in A and B, so initialization, α, rank, and η are entangled and jointly determine the effective update size. That's why hyperparameter tuning breaks so easily.

μA — Where the Two Regimes Split

The paper computes the size of a single-step feature update for LoRA in the limit where width and rank go to infinity simultaneously (n, r → ∞). It's named μA (Maximal-Update Adaptation) because it carries pretraining's μP (Maximal-Update Parametrization) over to fine-tuning. The goal is to find the learning rate at which the feature update neither blows up nor vanishes — stays Θ(1).

The assumptions have to come first. Section 4 of the paper spells out three.

  1. At every step, the forward-pass inputs and backward-pass gradients are bounded at Θ(1) (Assumption 4.1)
  2. The optimizer is approximated as momentum-free Adam = SignSGD (Assumption 4.2). The experiments themselves actually run on AdamW.
  3. The loss is computed on a single sample basis (following Hayou et al., 2024b)

Two results fall out on top of this.

Init[A] (Corollary 4.4). Set α = r^(-γ) with γ between 0 and 1, and the learning rate required for stable feature learning is

η = Θ( n^(-1/2) · r^(-(1-γ)/2) )

  γ=0   (α = 1)          ->  η ∝ n^(-1/2) · r^(-1/2)     rank-dependent
  γ=1/2 (α = r^(-1/2))   ->  η ∝ n^(-1/2) · r^(-1/4)     weakly rank-dependent
  γ=1   (α = r^(-1))     ->  η ∝ n^(-1/2)                rank-independent

Carrying over the paper's own reading: at α = 1, quadrupling the rank means you have to halve the learning rate; at α = r^(-1), the rank dependence gets absorbed into the multiplier and the learning rate becomes rank-independent.

Init[B], α = 1 (Corollary 4.6).

η = Θ( n^(-1) )      rank-independent, depends only on width

This is where the paper's central observation lands. Under the same SignSGD approximation, full fine-tuning (FFT) of a linear layer also gives η ∝ n^(-1) (Appendix A.6, Theorem A.23). The width scaling matches — this is the necessary condition for transferring a learning rate between LoRA and FFT.

There's a lesser-known byproduct too. In Init[A], as rank grows, A's contribution vanishes and learning effectively happens through B alone. In the paper's phrasing, the adapter increasingly behaves like "a random projection with A frozen at its initial value," and this imbalance doesn't disappear for any of Init[A]'s standard α choices. In Init[B], it's the reverse — when r is much smaller than n, B's update becomes negligible and learning happens mainly through A.

Why the "10x Learning Rate" Folklore Kept Surviving

Now the earlier contradiction resolves.

Thinking Machines' LoRA Without Regret (John Schulman et al.), posted last year on September 29, wrote this — they used W' = W + (α/r)BA with α fixed at 32, and found that "the 1/r scaling factor makes the optimal learning rate roughly independent of rank." Early in training, the loss curves were identical across different ranks, to the point that they even write they initially suspected a bug where the rank factor was being ignored.

Translated into μA coordinates, Schulman's setup is effective α = 32/r, i.e., γ=1 — exactly the cell where Corollary 4.4 predicts rank-independence. Of the two competing beliefs, the "rank-independent" one is true — under the condition that you use the classic 1/r convention. And the moment you start scaling lora_alpha with rank, you've moved into the γ=0 cell, where quadrupling the rank means halving the learning rate. This is why the same person, using the same library, can have opposite experiences.

But there's one thing μA doesn't resolve. The famous rule Schulman reported — "LoRA's optimal learning rate is 10x FullFT's, for the same application." Here's the evidence behind it. They swept LoRA and FullFT learning rates separately across 14 models in the Llama and Qwen families on the Tulu3 dataset, and fit a function predicting the optimal learning rate from hidden size and model family (Llama/Qwen). That fit found a LoRA multiplier of 9.8, and LoRA's hidden-size dependence exponent matched FullFT's (the fit gave LoRA pow = 0). They also noted a preliminary observation that the multiplier is larger on short runs (~15x, with a footnote saying "this is anecdotal evidence and holds for roughly under 100 steps").

What Schulman himself attached to this rule matters — "we don't yet have a satisfying theoretical explanation for this observation." In fact, item 2 on the blog's list of open questions is "a more complete theory explaining the ratio of LoRA to FullFT learning rates."

μA does not answer that question. The paper's Section 2 mentions Schulman's result only in passing, as a "heuristic rule (e.g., dividing the LoRA learning rate by 10 to get the FFT learning rate)." Instead, what μA does is a workaround — instead of explaining the ratio, it finds a setup where the ratio is 1.

The Workaround — Carrying a Learning Rate Straight from LoRA to FFT

Init[B] + α = 1 is that setup. The paper's logic goes like this: the required learning rate for this setup is η ∝ n^(-1), and the required learning rate for FFT of a linear layer is also η ∝ n^(-1). Since the width scaling matches, the optimal learning rates can align, and if they do, a learning rate tuned on LoRA can be used as-is on FFT.

The experiments largely support this prediction. Carrying over Section 5.2's own wording — for most models, the optimal learning rate for Init[B] (α=1) aligns closely with FFT's optimal learning rate. The exception is RoBERTa-large, where FFT preferred a slightly smaller learning rate than Init[B]. The paper attributes this to the added classification head — its learning rate was fixed at 10^(-3), but training it alongside the adapter can shift the optimum.

This is where the authors' proposed practical workflow comes from. In the RLVR experiment fine-tuning Llama-3.1-8B on GSM8k with GRPO, FFT used more than 2x the GPU memory of LoRA (r=256), with most of the excess going to gradient buffers and optimizer state (wall-clock time per step was similar between the two in the same experiment). So the pitch is: sweep the learning rate with Init[B] (α=1) on a relatively accessible mid-tier GPU, then carry that value over to FFT on bigger hardware, saving the cost of re-tuning.

Two things need to be flagged honestly here.

First, the paper's Section 6 limitations nail this down — this analysis establishes a necessary condition for learning-rate transfer, and finding and proving a sufficient condition is left as future work. Matching width scaling means "can align," not "aligns." The experiments show alignment, but experiments are experiments.

Second, Init[B] is not PEFT's default. Look at reset_lora_parameters in the v0.17.0 source, and the default path (init_lora_weights=True) puts kaiming_uniform_ on lora_A and zeros_ on lora_B — that's Init[A]. What's more, the paper states it used Kaiming normal on the non-zero factor, matching variance 1/n for A's components in Init[A] and variance 1/r for B's components in Init[B]. PEFT's default is Kaiming uniform. In short, reproducing this paper's setup takes more than flipping a few LoraConfig flags — you have to touch the initialization code directly.

What the Experiments Actually Measured, and What They Didn't

This is the most important part of this post.

What they ran. Five SFT setups — Llama-3.2-1B / Tulu-3 SFT mixture (320k train, 32k validation, max 1024 tokens), Qwen2.5-3B-Instruct / OpenThoughts-114k (71k / 6k, 8192-token packing), RoBERTa-large / ANLI (163k / 3k), ViT-Huge/14 / ImageNet-1K (1.28M / 50k), Qwen3-VL-2B-Instruct / LLaVA-Instruct-Mix (198k / 17k). On top of that, RLVR with Llama-3.1-8B / GSM8k (a DAPO variant of GRPO), and a diffusion model, Stable Diffusion v1.5 / Naruto-BLIP-Captions (1.2k pairs, 10,000 steps). Hardware was a 4x H200 node. Coverage is genuinely broad, sweeping language, vision, vision-language, image generation, and reinforcement learning.

But here's the statistics.

  • Paper Appendix B.1: "We set the random seed to 42 for all experiments." One seed. No confidence intervals, no error bars, no seed-to-seed variance reported.
  • The learning-rate grid is on a log2 scale with integer exponents only, meaning adjacent points differ by 2x. The reported "optimum" is the best value on this discrete grid.
  • Only 5 ranks per setup. Init[A] uses 4, 16, 64, 256, 1024. Init[B] uses 16, 32, 64, 128, 256 for SFT. Init[A] for RLVR and the diffusion model uses 1, 4, 16, 64, 256.
  • RLVR training draws 500 problems from GSM8k (50 for test).

The paper's own Section 5.1 writes this limitation down. The scaling rule is a leading-order dependence as (n, r) → ∞, and at finite width and rank, constant and lower-order terms can shift the optimum, with the effect larger at small rank. And "if the loss landscape is flat near the optimum, nearby grid points perform similarly, so training noise can determine which one looks best." So the authors declare they evaluate by qualitative trend, not exact numerical agreement — a setup predicted to be rank-independent passes if the optima cluster within one grid step (2x); a rank-dependent setup passes if the optima move monotonically with rank and span multiple grid points.

In other words, this paper's "rank-independent" means "within one step of a 2x-spaced grid, on a single seed." A useful claim, but not a precise one. And the paper doesn't hide this — not hiding it is this paper's virtue.

The paper also self-reports mismatches. For Qwen2.5-3B-Instruct's Init[A] (α=1), r=16 and r=64 hit minimum loss at the same learning rate (the prediction says they should differ). The paper blames grid discretization. And for Init[A] (α = r^(-1)), small rank (r=4) preferred a slightly smaller learning rate than large rank — the opposite direction from what was observed at α=1. The paper explains this as a finite-size effect. Worth noting that both explanations are post hoc.

And what this paper didn't measure. This is not a "LoRA does as well as FFT" paper. What's measured is where the optimal learning rate sits, not whether LoRA reaches FFT's final loss. It's about the location of the bottom of the U-shaped learning-rate-sweep curve, not a claim about the depth of that bottom. The one exception is Appendix D.1 for RLVR, which observes "peak performance is similar across ranks" and notes agreement with Schulman — but that's a side observation, not this paper's claim. Where LoRA falls short of FFT is still a question for separate evidence like LoRA Learns Less and Forgets Less (Biderman et al., TMLR 2024) — which reports that in programming and math domains, LoRA with standard low-rank settings falls substantially short of full fine-tuning, while preserving out-of-domain performance better.

One more thing. On decoder-only LMs, LoRA was attached only to the MLP (gate_proj, up_proj, down_proj). This isn't so much a flaw as alignment with current best practice — Schulman's blog reported that attention-only LoRA is markedly worse than MLP-only, and that adding attention on top of MLP brings no gain, and it notes Biderman et al. got the same result. But whether the scaling rule holds under other placement strategies is not something these experiments answer.

Where the Two Results Diverge on Width Scaling

This section is what I found by reading the two sources side by side, and I want to flag upfront that neither paper addresses the other at this specific point.

In μA coordinates, Schulman's setup is Init[A], α ∝ r^(-1). μA's Table 1 gives η ∝ n^(-1/2) for that cell. And μA's Theorem A.23 says FFT gives η ∝ n^(-1). Dividing the two yields the prediction that the LoRA/FFT learning-rate ratio is proportional to n^(1/2) — meaning the ratio should grow as the model gets wider.

But Schulman's fit result is the opposite. Across 14 models, the optimization found LoRA pow = 0 — meaning LoRA's hidden-size dependence is identical to FullFT's, with the multiplier fixed at 9.8.

These two don't line up as they stand. But there's a reason not to hastily say "one of them is wrong."

  • μA's theory is asymptotic. The paper's Section 6 limitations state directly that "our theory is asymptotic, and at finite (n, r) it may be sensitive to noise."
  • Doing the arithmetic, n^(1/2) means hidden size has to grow 4x for the ratio to change 2x. And 2x is exactly one step on a log2 grid. In other words, this predicted difference could be a size that neither study's measurement resolution can catch.
  • Schulman's fit assigns a separate exponent per Llama/Qwen family, so it's hard to call it a pure test of width scaling either.

The honest conclusion is this — no number that resolves this discrepancy has been published yet. μA doesn't explain the 10x rule, and Schulman's fit wasn't designed to test μA's width exponent. Someone needs to align the two coordinate systems and sweep a wide range of hidden sizes across multiple seeds to get an answer. As far as I know, that experiment doesn't exist.

So What Should You Actually Do

1. Check your α convention first. This is the cheapest, most reliable win in this post.

fixed lora_alpha (e.g. 32) + use_rslora=False   ->  effective α ∝ r^(-1)
   => keep the learning rate when you change rank. (what Schulman saw)

lora_alpha = r or 2r                             ->  effective α = constant
   => μA prediction: halve the learning rate every 4x in rank.

The paper checks in Appendix C.1 that the same scaling holds when α is 2 or 4 as well. In other words, the moment you follow the advice to "scale lora_alpha with rank," there's a learning-rate rule that's supposed to come with it — and that rule is usually missing from the advice.

2. If you want to find an FFT learning rate cheaply, Init[B] + α=1 is a candidate. But (a) it's only a necessary condition, (b) it's not PEFT's default, so you have to write the initialization code yourself, and (c) the evidence is a single seed. On models with a classification head, the paper itself reported a mismatch. Use it as a starting point, but verify it.

3. In RL, a learning-rate mistake costs you twice. This is what Section 5.3 of the paper observes — in SFT, too small a learning rate just slows convergence, but in RLVR, either too large or too small badly damages the training reward. And it costs you wall-clock time on top of that. In the Appendix D.2 case study, at the optimal learning rate (2^(-18)), the model exits the initial exploration phase (where completion length pins to the 1024-token cap) around step 100 and moves to concise ~200-token solutions, taking 4-5 seconds per step. At a suboptimal learning rate (2^(-16)), it instead gets stuck in the exploration phase, keeps producing max-length completions, and takes 15-22 seconds per step — 3-5x slower. The reward collapses toward zero. The authors also note a failure in the opposite direction: give Init[B], α=1 a higher learning rate (2^(-15)) and the model produces about 2 tokens and stops generating — which also speeds up the steps. The point being: faster steps aren't automatically good news.

When you don't need any of this. If you never change rank and your current recipe already works, this paper gives you nothing. If your model and task are fixed, a sweep you've already run beats the asymptotic n, r → ∞ rule. And every rule here is Θ(·) — it tells you the exponent, not the constant. Either way, running one baseline sweep is still on you. What μA cuts down is how many times you repeat that sweep, not the sweep itself.

Closing

To sum up: as of February 2026, the answer to "do you need to re-find the learning rate when you change LoRA rank" is "it depends on your α convention." With the classic 1/r convention, you don't need to change it; with the increasingly common practice of scaling lora_alpha with rank, you need to halve it every 4x in rank. And in the less-common setup of Init[B] + α = 1, the optimal learning rate has the same width scaling as full fine-tuning, so carrying a value tuned on LoRA over to FFT is possible in principle.

At the same time, you need to know the exact size of that evidence. A single seed (42), a 2x-spaced grid, five ranks per setup, asymptotic theory, and the authors' own caveat that it's "only a necessary condition." The authors themselves declared they evaluate by qualitative trend rather than exact numerical agreement, and they cleared that bar. You shouldn't read more than that into this paper.

And there's one thing nobody knows yet. Schulman's observation that "LoRA's learning rate is 10x FullFT's" remains unexplained. Instead of explaining that ratio, μA moved to a coordinate system where the ratio becomes 1. That's a clever enough workaround in practice, but Schulman's open question is still exactly that — open. LoRA has been a tool we've used every day since 2021, and even in mid-2026, why its learning rate has to be what it is still isn't fully explained.

References