처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.05.21 79

LoRA와 Weight Decay, 작은 모델 파인튜닝의 숨은 함정

Hacker News 원문 보기

LoRA가 표준이 된 지금, 다시 짚어볼 디테일

LLM(거대 언어 모델)을 직접 파인튜닝(fine-tuning, 자기 데이터로 추가 학습시키기)해본 분들이라면 LoRA(Low-Rank Adaptation, 저차원 적응) 라는 단어를 한 번쯤 들어보셨을 거예요. 거의 모든 오픈소스 파인튜닝 워크플로의 기본값이 됐을 정도로 표준이 됐거든요. 그런데 막상 LoRA를 쓸 때 weight decay(가중치 감쇠) 를 어떻게 설정해야 하는지에 대해서는 의외로 명확한 가이드가 부족해요. 2023년에 공개된 한 블로그 글이 이 주제를 깊이 파고든 적이 있는데, 시간이 지나도 여전히 실무에 유용한 통찰을 담고 있어서 다시 살펴볼 가치가 있어요.

LoRA가 뭐였더라

잠깐 복습부터 할게요. LLM은 보통 수십억 개의 파라미터(가중치)를 가지고 있어요. 이걸 전부 학습시키려면 GPU 메모리가 어마어마하게 필요해요. LoRA는 이걸 영리하게 우회하는 방법이에요.

원래 모델의 가중치를 W라고 하면, 파인튜닝은 W를 W + ΔW로 업데이트하는 작업이거든요. LoRA의 아이디어는 "ΔW를 통째로 학습시키지 말고, ΔW = A × B 처럼 두 개의 훨씬 작은 행렬의 곱으로 근사하자" 는 거예요. 예를 들어 W가 4096×4096 행렬이면 파라미터가 약 1600만 개인데, A를 4096×8, B를 8×4096으로 두면 학습할 파라미터가 약 6만 5천 개로 줄어들어요. 250배 가까이 작아지는 거죠. 그래서 일반 그래픽카드로도 큰 모델을 튜닝할 수 있게 됐어요.

Weight Decay가 LoRA에서 다르게 동작하는 이유

Weight decay가 뭐냐면, 학습 중에 가중치가 너무 커지지 않도록 매 스텝마다 조금씩 0 쪽으로 끌어당기는 정규화 기법이에요. 과적합(overfitting, 학습 데이터엔 잘 맞지만 새 데이터엔 못 맞추는 현상)을 줄이는 데 효과적이라 거의 모든 딥러닝 학습에서 쓰여요. 보통 Adam 옵티마이저랑 같이 AdamW라는 형태로 적용해요.

그런데 LoRA에선 이게 묘하게 작동해요. 왜냐하면 우리가 학습하는 건 A와 B라는 작은 행렬이고, 모델이 실제로 보는 변화량은 A × B 거든요. Weight decay는 A와 B 각각을 0 쪽으로 끌어당기는데, 이게 곱셈으로 결합되면 효과가 비선형적으로 증폭돼요. A가 절반이 되고 B도 절반이 되면, 곱은 1/4이 되는 식이에요. 그래서 같은 weight decay 값이라도 LoRA에선 풀 파인튜닝보다 훨씬 강한 정규화 효과를 내요.

블로그에서 다룬 핵심 통찰은 이거예요. LoRA에 weight decay를 그냥 기본값(보통 0.01)으로 두면 학습이 제대로 안 되는 경우가 생긴다. A × B가 너무 작게 유지돼서 모델이 새 데이터를 충분히 학습하지 못하는 거예요. 그래서 LoRA를 쓸 때는 weight decay를 0으로 두거나, 훨씬 작은 값(예: 1e-4 수준)으로 두는 게 안전할 때가 많아요.

어댑터 초기화와도 얽혀 있어요

LoRA의 또 다른 특징은 초기화 방식이에요. 보통 A는 가우시안 분포로 작게 초기화하고, B는 0으로 초기화해요. 그러면 학습 시작 시점에 A × B = 0이 돼서, 원래 모델의 동작을 그대로 유지한 채로 학습이 시작돼요. 여기에 weight decay가 강하게 걸리면, B는 0에서 출발해서 0 쪽으로 다시 끌려가는 셈이 되니까 학습이 잘 진행되지 않을 수 있어요. 이런 미묘한 상호작용을 모르고 "왜 LoRA가 학습이 안 되지?" 하고 헤매는 분들이 꽤 많아요.

업계 흐름 속에서

LoRA 이후로 QLoRA(4비트 양자화 + LoRA), DoRA(가중치를 방향과 크기로 분해해서 LoRA 적용), LoRA+ (A와 B에 서로 다른 학습률 적용) 같은 변종들이 계속 나오고 있어요. 이들도 모두 weight decay와의 상호작용 문제를 갖고 있어요. 특히 LoRA+는 A와 B의 학습 속도 차이를 명시적으로 다루는데, 거기에 weight decay까지 합쳐지면 하이퍼파라미터 튜닝이 더 복잡해져요.

Hugging Face의 PEFT(Parameter-Efficient Fine-Tuning) 라이브러리나 Axolotl, Unsloth 같은 도구들은 기본적으로 weight decay를 작게 설정하거나 끌 수 있게 해놨어요. 하지만 직접 학습 스크립트를 짤 때는 이런 기본 설정을 그냥 가져오면 안 되고, 자기 데이터와 모델에 맞게 검증해봐야 해요.

한국 개발자가 실무에 적용한다면

첫째, 자기 데이터로 LoRA 파인튜닝을 한 번이라도 해봤다면, weight decay 값을 의식적으로 확인해보세요. 학습이 잘 안 되거나 loss가 잘 안 떨어진다면, weight decay를 줄이거나 0으로 두고 다시 돌려보는 게 좋은 첫 디버깅 단계예요.

둘째, 하이퍼파라미터 탐색에 weight decay를 꼭 포함시키세요. 보통 learning rate, batch size, rank(LoRA의 차원 수) 정도만 탐색하는데, weight decay도 결과에 큰 영향을 줘요. 특히 데이터가 작을 때 더 그래요.

셋째, 사내 LLM을 튜닝하는 프로젝트라면 이런 디테일이 실제 서비스 품질에 직결돼요. 한국어 데이터로 Llama, Qwen, Mistral 같은 모델을 튜닝하는 경우가 점점 늘고 있는데, 영어 환경에서 검증된 기본값이 한국어 데이터에선 다르게 동작할 수 있어요. 자기 환경에서 직접 실험해보는 게 결국 답이에요.

마무리

LoRA는 표면적으로는 단순한 기법이지만, 그 안에 숨어 있는 weight decay 같은 디테일이 실제 학습 결과를 크게 좌우해요. "왜 안 되지?" 하기 전에, 옵티마이저 설정과 정규화 설정을 한 번 더 들여다보는 습관이 필요해요.

여러분은 LoRA 파인튜닝을 할 때 weight decay를 어떻게 설정하고 있나요? 혹시 "기본값 그대로 뒀더니 결과가 이상하더라" 같은 경험이 있으시면, 어떤 식으로 해결하셨는지 궁금해요.


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.