AL,ML 학부연구생/공부 기록

LoRa (Low-Rank Adaptation)란 무엇인가?

김형준 2026. 3. 23. 18:47
반응형

1. LoRA의 정의

LoRA는 Low-Rank Adaptation의 약자이며, 대규모 사전학습 모델을 전부 다시 학습하지 않고, 아주 적은 수의 추가 파라미터만 학습하여 특정 작업이나 도메인에 맞게 적응시키는 방법이다. 원 논문은 사전학습된 가중치는 고정한 채, 각 층에 학습 가능한 저랭크 분해 행렬을 삽입하는 방식으로 LoRA를 제안했다.

즉, LoRA의 핵심은 다음과 같다.

  • 기존 거대 모델의 원본 가중치는 그대로 둔다.
  • 전체 모델을 full fine-tuning 하지 않는다.
  • 대신 작은 보정값만 따로 학습한다.
  • 그 보정값을 기존 가중치에 더해 새로운 작업에 적응시킨다.

2. 왜 LoRA가 필요한가

대형 언어모델이나 대형 비전 모델을 일반적인 방식으로 fine-tuning 하려면, 모델 전체 파라미터를 모두 업데이트해야 한다. 이 방식은 다음 문제가 있다.

첫째, 학습 비용이 매우 크다.
둘째, GPU 메모리 사용량이 매우 크다.
셋째, 작업(task)마다 전체 모델 복사본을 별도로 저장해야 하므로 저장 비용도 커진다.
넷째, 여러 도메인에 맞춘 모델을 동시에 운영하기가 비효율적이다.

LoRA는 이 문제를 해결하기 위해 등장했다. 원 논문은 GPT-3 175B 사례에서 full fine-tuning 대비 학습 가능한 파라미터 수를 크게 줄이고, GPU 메모리 요구량도 줄일 수 있음을 보고했다.


3. LoRA를 한 문장으로 설명하면

LoRA는
**“기존 모델 전체를 다시 배우지 않고, 기존 가중치에 더해질 작은 저차원 보정 행렬만 학습하는 파라미터 효율적 미세조정 기법”**이다.


4. 핵심 아이디어

일반적인 신경망의 어떤 선형층 가중치를 WW라고 하자.
full fine-tuning은 이 WW 전체를 직접 업데이트한다.

반면 LoRA는 다음처럼 생각한다.

  • 원래 가중치 WW는 유지한다.
  • 새 작업에 맞는 변화량 ΔW\Delta W만 추가로 표현한다.
  • 그런데 ΔW\Delta W를 큰 행렬 그대로 학습하지 않고, 두 개의 작은 행렬 곱으로 분해한다.

개념적으로는 다음 형태이다.

W′=W+ΔWW' = W + \Delta W

그리고 LoRA는 ΔW\Delta W를 저랭크 형태로 근사한다.

ΔW=BA\Delta W = BA

여기서 AA와 BB는 원래 큰 가중치보다 훨씬 작은 차원의 행렬이다. 이 방식 때문에 학습해야 하는 파라미터 수가 크게 줄어든다.


5. “Low-Rank”가 의미하는 것

여기서 low-rank는 선형대수 관점의 개념이다.
큰 행렬의 변화를 완전히 자유롭게 표현하지 않고, 낮은 차원의 잠재 공간에서만 변화시키겠다는 뜻이다.

직관적으로 보면 다음과 같다.

  • full fine-tuning: “모든 방향으로 자유롭게 수정”
  • LoRA: “정말 필요한 소수의 방향으로만 수정”

이 가정이 잘 맞으면, 전체를 다 학습하지 않아도 상당한 성능을 낼 수 있다. 원 논문은 언어모델 적응이 본질적으로 낮은 유효 랭크 구조를 가질 수 있다고 보고했다.


6. LoRA의 동작 원리

LoRA는 보통 Transformer의 선형 변환 계층, 특히 attention 관련 projection에 많이 적용된다. Hugging Face PEFT 문서도 attention layer의 행렬을 저랭크 행렬로 분해하는 방식으로 설명한다.

대표적으로 다음 위치에 자주 적용된다.

  • Query projection
  • Key projection
  • Value projection
  • Output projection
  • 경우에 따라 MLP의 선형층

즉, Transformer 내부의 중요한 선형 변환들에 LoRA adapter를 삽입하는 식이다.


7. 수식 관점에서 본 LoRA

어떤 입력 xx에 대해 원래 선형층이 다음과 같다고 하자.

y=Wxy = Wx

LoRA를 적용하면 실제 출력은 다음처럼 바뀐다.

y=Wx+BAxy = Wx + BAx

또는 스케일링 항을 포함해

y=Wx+αrBAxy = Wx + \frac{\alpha}{r}BAx

처럼 구현되기도 한다. 여기서

  • WW: 사전학습된 기존 가중치
  • A,BA, B: 새로 학습하는 저랭크 행렬
  • rr: rank
  • α\alpha: scaling 계수

학습 시에는 보통 WW는 고정하고 A,BA, B만 업데이트한다.


8. LoRA 학습 과정

LoRA의 학습 절차는 다음 순서로 이해하면 된다.

8.1 사전학습 모델 준비

먼저 이미 잘 학습된 base model이 있어야 한다.
예를 들면 Llama, Mistral, GPT 계열, BERT 계열, Stable Diffusion 계열 등이다.

8.2 원본 가중치 고정

기존 모델 파라미터는 대부분 freeze 한다.
즉, 역전파는 되더라도 원래 가중치는 업데이트하지 않는다.

8.3 LoRA 모듈 삽입

특정 선형층에 대해 작은 A,BA, B 행렬을 추가한다.

8.4 학습 데이터로 미세조정

도메인 데이터, 지시문 데이터, 질의응답 데이터, 스타일 데이터 등으로 학습한다.
이때 실제로 업데이트되는 것은 거의 LoRA 파라미터뿐이다.

8.5 결과 저장

최종적으로는 전체 모델을 저장하지 않고, LoRA adapter 가중치만 별도로 저장할 수 있다. 이 점이 매우 중요하다. Hugging Face PEFT는 adapter 방식으로 이러한 저장과 로드를 지원한다.


9. 추론 시에는 어떻게 쓰는가

LoRA 적용 후 추론에는 보통 두 방식이 있다.

첫째, base model + LoRA adapter를 함께 불러와 동적으로 적용하는 방식이다.
둘째, LoRA를 base model에 merge하여 하나의 모델처럼 사용하는 방식이다.

LoRA 원 논문은 adapter 계열과 달리 적절히 병합하면 추가 추론 지연 없이 사용할 수 있다는 점도 장점으로 제시했다.

즉, 운영 환경에서는 필요에 따라 다음처럼 구성할 수 있다.

  • 공용 base model 하나 유지
  • 업무별 LoRA 여러 개 보유
  • 요청에 따라 특정 LoRA만 장착

이 구조는 저장 공간과 운영 효율 측면에서 매우 유리하다.


10. LoRA를 어떻게 활용하는가

LoRA는 “새 모델을 처음부터 만드는 기술”이라기보다, 기존 모델을 특정 목적에 맞게 저비용으로 튜닝하는 기술이다.

대표 활용 사례는 다음과 같다.

10.1 도메인 적응

법률, 의료, 금융, 제조, 논문 요약, 고객센터 등 특정 도메인 문체와 용어에 맞게 모델을 조정할 수 있다.

10.2 지시문 튜닝

모델이 사용자의 지시를 더 잘 따르도록 instruction tuning에 활용할 수 있다.

10.3 응답 스타일 조정

말투, 문서 양식, 답변 형식, 보고서 스타일 등을 맞추는 데 사용할 수 있다.

10.4 분류/추출/질의응답

텍스트 분류, 정보 추출, 질의응답, 요약, 번역 등 다양한 downstream task에 사용할 수 있다.

10.5 이미지 생성 분야

Diffusion 모델에서도 LoRA는 매우 널리 쓰인다. 특정 화풍, 인물 스타일, 캐릭터 특징, 특정 시각적 패턴을 적은 비용으로 학습시키는 데 활용된다. Hugging Face diffusers 문서도 PEFT 기반 LoRA 활용을 지원한다.


11. LoRA의 결과물은 무엇인가

LoRA의 결과물은 보통 전체 모델 파일이 아니라, 작은 adapter 가중치 파일이다.

이것이 의미하는 바는 다음과 같다.

  • base model은 공통으로 유지
  • 작업별로 작은 LoRA만 교체
  • 저장 공간 절약
  • 배포 단순화
  • 동일 base model 위에 여러 버전 운영 가능

예를 들어 하나의 7B 모델을 기반으로,

  • 고객상담용 LoRA
  • 법률문서용 LoRA
  • 코드보조용 LoRA
  • 한국어 문체용 LoRA

를 각각 따로 붙여 사용할 수 있다.


12. LoRA의 장점

12.1 학습 파라미터 수 감소

가장 큰 장점이다. 전체 모델을 다 학습하지 않으므로 자원 요구량이 크게 줄어든다.

12.2 메모리 절감

학습 중 저장해야 할 optimizer state와 gradient 대상 파라미터가 적으므로 GPU 메모리 부담이 줄어든다.

12.3 빠른 실험

같은 base model로 여러 LoRA를 빠르게 만들어 비교할 수 있다.

12.4 저장과 배포 효율

전체 모델 복사 없이 adapter만 저장하면 된다. PEFT는 이런 adapter 기반 관리 기능을 제공한다.

12.5 성능 대비 효율 우수

원 논문은 여러 모델에서 full fine-tuning과 비슷하거나 더 나은 품질을 보였다고 보고했다.


13. LoRA의 한계

LoRA가 매우 유용하지만 모든 상황에서 만능은 아니다.

13.1 근본 모델 능력 한계는 못 넘는다

base model이 원래 못하던 것을 LoRA가 완전히 새로 창조하는 것은 어렵다.
LoRA는 “적응”에는 강하지만, base model 자체의 근본 역량 부족을 완전히 해결하지는 못한다.

13.2 rank 설정에 민감할 수 있다

rank rr가 너무 작으면 표현력이 부족하고, 너무 크면 파라미터 절감 효과가 줄어든다.

13.3 적용 위치 선택이 중요하다

attention의 q, v만 넣을지, q/k/v/o 전부 넣을지, MLP까지 넣을지에 따라 결과가 달라질 수 있다.

13.4 데이터 품질 영향을 크게 받는다

LoRA 자체가 좋은 데이터 없이 성능을 보장하지는 않는다.
적은 파라미터를 학습하더라도 데이터가 나쁘면 결과도 나빠진다.

13.5 작업에 따라 full fine-tuning이 더 적합할 수 있다

아주 큰 구조 변화가 필요한 경우나, 모델 전반의 표현을 넓게 수정해야 하는 경우에는 full fine-tuning이 더 나을 수 있다.


14. LoRA의 주요 하이퍼파라미터

LoRA를 실제로 쓸 때 자주 보는 값은 다음과 같다.

14.1 rank, r

저랭크 차원 크기이다.
작을수록 가볍고, 클수록 표현력은 증가하지만 비용도 증가한다.

14.2 alpha

LoRA 업데이트의 스케일을 조정한다.
실질적으로 BABA가 원래 경로에 어느 정도 강도로 반영될지에 영향을 준다.

14.3 dropout

LoRA 경로에 dropout을 걸어 과적합을 줄일 수 있다.

14.4 target modules

어떤 레이어에 LoRA를 삽입할지 정한다.
예를 들면 q_proj, v_proj, 또는 k_proj, o_proj까지 포함할 수 있다.

이 값들은 모델 종류와 작업 목적에 따라 달라진다.


15. LoRA와 full fine-tuning의 차이

둘의 차이는 매우 중요하다.

15.1 full fine-tuning

  • 모델 전체 파라미터 업데이트
  • 자원 많이 사용
  • 저장 공간 많이 필요
  • 유연성 높음

15.2 LoRA

  • 원본 가중치는 동결
  • 추가 저랭크 파라미터만 학습
  • 자원 적게 사용
  • 배포와 관리가 쉬움
  • 일부 상황에서는 표현력 한계 존재

즉, LoRA는 “효율”, full fine-tuning은 “자유도”에 더 가깝다.


16. LoRA와 Adapter의 관계

LoRA도 넓게 보면 PEFT, 즉 Parameter-Efficient Fine-Tuning 계열이다. Hugging Face PEFT 문서는 LoRA를 대표적인 PEFT 방법으로 다룬다.

Adapter 계열과 비교할 때 LoRA의 특징은 다음과 같다.

  • 기존 층 사이에 별도 네트워크를 크게 추가하는 방식보다 단순하다.
  • 원 논문은 적절히 합칠 경우 추가 inference latency가 없다는 점을 장점으로 제시했다.

17. 실제 사용 흐름 예시

언어모델 기준으로 실제 흐름을 직관적으로 정리하면 다음과 같다.

  1. 사전학습 모델을 선택한다.
  2. 전체 모델을 freeze 한다.
  3. attention 선형층에 LoRA를 삽입한다.
  4. 특정 작업 데이터셋으로 학습한다.
  5. 학습이 끝나면 adapter만 저장한다.
  6. 추론 시 base model 위에 adapter를 붙여 실행한다.

Hugging Face PEFT는 LoraConfig와 get_peft_model()을 통해 이런 흐름을 지원한다.


18. 결과는 보통 어떤 식으로 나타나는가

LoRA 적용 결과는 보통 다음 측면에서 평가한다.

18.1 성능

  • 정확도
  • F1
  • BLEU/ROUGE
  • perplexity
  • 사용자 평가

18.2 자원 효율

  • trainable parameter 수
  • GPU memory 사용량
  • 학습 시간
  • 저장 용량

18.3 운영 효율

  • task별 adapter 교체 가능성
  • 배포 편의성
  • 다중 도메인 관리 용이성

실무에서는 “성능이 조금 덜 좋아도 비용 절감이 훨씬 크면 LoRA가 더 낫다”는 판단이 자주 나온다.


19. LoRA가 특히 잘 맞는 상황

다음 상황에서는 LoRA가 특히 유리하다.

  • GPU 자원이 제한적일 때
  • 여러 업무용 모델을 빠르게 만들고 싶을 때
  • base model 하나를 유지하며 adapter만 바꾸고 싶을 때
  • full fine-tuning 비용이 과도할 때
  • 실험을 많이 돌려야 할 때

반대로, base model 자체를 깊게 개조해야 하거나 매우 큰 구조적 적응이 필요하면 full fine-tuning 또는 다른 방법을 고려할 수 있다.


20. 오해하기 쉬운 부분

20.1 LoRA는 모델 압축 기법인가

정확히는 모델 자체를 압축하는 기법이라기보다,
모델 적응 비용을 줄이는 미세조정 기법이다.

20.2 LoRA는 추론 전용 기술인가

아니다. 핵심은 학습 효율화에 있다. 다만 학습 후 배포와 운영도 매우 편해진다.

20.3 LoRA를 쓰면 원본 모델이 바뀌는가

기본 형태에서는 원본 모델은 그대로이고, LoRA adapter가 추가되는 구조다. 필요하면 merge하여 하나처럼 만들 수 있다.


21. 한 번에 정리하는 핵심 흐름

LoRA의 전체 논리를 한 번에 정리하면 다음과 같다.

대형 모델을 특정 작업에 맞추고 싶다.
그런데 전체 모델을 다시 학습하는 것은 너무 비싸다.
그래서 원래 가중치는 동결한다.
대신 각 핵심 선형층에 작은 저랭크 보정 행렬을 추가한다.
학습은 그 작은 행렬만 수행한다.
학습 후에는 작은 adapter 파일만 저장한다.
필요할 때 base model 위에 붙여 사용한다.
이 방식으로 적은 자원으로도 실용적인 튜닝이 가능해진다.


22. 최종 정리

LoRA는 대규모 사전학습 모델을 효율적으로 미세조정하기 위한 대표적 PEFT 기법이다. 핵심은 기존 가중치를 고정하고, 각 층의 변화량을 저랭크 행렬 두 개의 곱으로 표현하여 작은 수의 파라미터만 학습하는 데 있다. 이 방식은 full fine-tuning에 비해 학습 가능한 파라미터 수, GPU 메모리 사용량, 저장 비용을 크게 줄일 수 있으며, 원 논문은 여러 모델에서 full fine-tuning과 비슷하거나 더 나은 성능을 보고했다. 또한 adapter만 별도로 저장하고 교체할 수 있어 다중 업무 운영에도 적합하다.

반응형