빅데이타 & 머신러닝/생성형 AI (ChatGPT etc)

LLM 파인튜닝 기법 LoRA에 대한 개념 이해

Terry Cho 2025. 1. 24. 16:36

 

LoRA 파인튜닝 개념의 이해

조대협 (http://bcho.tistory.com)

 

LLM 모델에 대한 Fine tuning시에, 가장 기본적인 방법은 모델을 학습데이터로 새롭게 처음부터 학습하는 방법인데, 이 방법은 (GPU)비용이 너무 많이 들고 시간도 많이 걸린다. 그래서 대안으로 등장한것이 PEFT (Parameter-Efficient Fine-Tuning) 이라는 개념으로 , 원본 모델의 패러미터(Weight)값은 고정 시키고 작은 수의 파라미터만 훈련하거나 작은 모듈을 추가하여 학습 하는 방법으로, 과적합 (Overfitting)을 방지하고 연산량을 줄이 는 방식이다. 

Adapter

PEFT 방법으로는 오늘 살펴볼 LoRA나 Adapter 등의 방식이 있다.

Adapter 방식은 기존 모델 아키텍처에 레이어를 추가하는 방식으로, 아래 그림을 보면 Transformer 아키텍처에서 두개의 Adapter 계층이 추가된것을 볼 수 있다. 이 계층의 Weight값을 학습함으로써 특정 시나리오에 맞도록 모델을 튜닝 하는 방식이다. 

출처 : https://arxiv.org/pdf/2202.07962.pdf

 

이 방식의 경우 모델 아키텍처의 수정이 불가피하고 또한, 레이어가 추가된만큼 Inference 성능이 저하된다는 단점을 가지고 있다. (초기에는 Adapter Layer를 이용한 Finetuning이 많았던 것으로 기억한다. )

LoRa (Low-Rank Adaptation)

LoRa는 한마디로 이야기 하자면 기존의 Weight 값에 알파값을 더해서 모델을 튜닝하는 기법이다.  현재  LLM fine tuning에 가장 널리 사용되는 방법이다. 

아래 그림이 LoRA의 개념을 설명하는 그림이다. 

 

입력값이 x이고 출력값이 h라고 했을때, 튜닝이 없는 상태에서 

 

h = x * W (모델의 이미 학습된 weight값)

 

이 되는데, LoRA를 적용하면 아래와 같이 h 값은 기존 weight 연산 값에 LoRA의 weight 값을 더해서 연산하게 되는 것이다. 

 

h = (x * W) + (x * A * B )

 

이렇게 해서 기존의 벡터 공간을 학습 데이터에 편향되는 형태로 튜닝을 할 수 있는 것이다. 

 

LoRA가 효율 적인 이유

아래 공식을 다시 보자. 

h = (x * W) + (x * A * B )

 

만약 x가 1*4096 차원이라고 하고, W의 차원이 4096 * 4096 이라고 하면 W는 16,777,216 (16백만) 패러미터를 가지게 된다. 

LoRA에서 사용되는 Weight인 A는, 예를 들어서  차원을 맞춰야 하기 때문에, 일단 입력 차원은 4096 * 16, B는 16*4096이라고 하면, 전체 패러미터수는 2*16*4096=131072 으로 16777216 패러미터 대비 0.8%의 패러미터 사이즈가 된다.

즉 0.8%의 패러미터만 학습을 하면되기 때문에 학습 효율이 뛰어나다. 

Rank

여기서 4096은 입력값 x가 차원이기 때문에 고정값이지만 16은 rank로 튜닝이 가능한 값이다.  Rank 값이 높을 수 록 보다 세밀한 튜닝이 가능하지만, 반대로 학습에 드는 비용이 높아지고, Rank가 낮을 수 록 학습 비용은 낮아지지만 세밀한 튜닝이 어렵다. 보통 하나의 도메인으로 최적화된 모델로 튜닝하기 위해서는 sLLM 기준으로 64 rank 부터 시작해서 낮추어가지만, 제네럴한 도메인에 대한 학습이나, 멀티 도메인 (여행, 요리 같이)에 대한 튜닝은 64 rank에서 부터 올려가는 방법을 취할 수 있다.