NLP 자연어처리

LoRA 기반 파인 튜닝

수진97 2025. 10. 30. 18:35

안녕하세요!

오늘은 LoRA 기반 파인튜닝에 대해 포스팅해보려고 합니다.

저번 포스팅에서 다루었던 파인튜닝 중에서도 LoRA 기반의 파인튜닝이 있는데, 관련 개념과 파인튜닝 과정에 대해서도 자세히 살펴보겠습니다.

 

1. LoRA(Low-Rank Adaptation) 란?

- 기존에 학습된 내용은 유지 + 새로운 데이터에만 필요한 변화 살짝 추가

- 파인튜닝 데이터에서 기존 가중치와 다른 '차이'만 반영  (고차원과 저차원의 차이를 학습 즉, 델타 학습)

출처 : https://bcho.tistory.com/1452

 

 

h = W * x

( x = 기존모델 입력값,  h = 출력값)

( W = 모델의 이미 학습된 가중치)

 

 

여기서 LoRA 파인튜닝을 하게 되면, 

ℎ = (𝑊 + 𝛼 / 𝑟 ∙ 𝐵𝐴) * 𝑥

 

 

위 그림에서 왼쪽에 있는 기존 모델의 가중치에 오른쪽에 있는 LoRA의 weight를 더해서 연산을 수행 

기존 모델의 일반화 성능은 그대로 살려 W는 고정, 새로운 데이터로 소량의 파라미터 ∆𝑊 업데이트

 

 

< LoRA 가중치 >

𝛼 / 𝑟 ∙ 𝐵𝐴 =∆𝑊 : 새 데이터에서 학습될 가중치

 

𝑟(랭크)  : 가중치의 차원을 조절하는 값

𝛼(알파)  : LoRA 가중치의 영향력 세기 조정

 

 

1 / 𝑟 의 경우, 가중치 값 정규화를 의미하며, 값이 너무 커지지 않게 조절해 줌.

𝛼의 경우, 𝛼가 크면, LoRA 가 원래 가중치보다 더 큰 영향을 주게 됨.

 

 

𝑟가 커지면 많은 파라미터로 학습하게 되며, 연산량은 커짐.(최대한 많은걸 학습 = 세밀한 튜닝)

반대로 𝑟가 작아지면 작은 파라미터로만 학습하게 되며, 연산량은 줄어듦.(핵심만 학습)       

 

 

 

정리하자면, LoRA 파인튜닝은 기존에 이미 학습된 대규모 모델의 가중치는 그대로 유지한 채, 새로운 데이터로부터 작은 보정 가중치(저차원 행렬)를 추가로 학습시키는 방법입니다.
이때 위 그림에서 오른쪽 가중치 이미지처럼, 새로운 데이터의 특징 중 불필요한 정보는 제거하고 핵심 정보만 압축(병목, Bottleneck) 하여 저차원 공간에서 효율적으로 표현한 뒤, 이를 다시 원래 차원으로 복원하는 과정을 거칩니다. 압축하는 이유는 모든 데이터를 다 학습시키기에 비용과 GPU 메모리 사용량이 너무 커지기 때문에 압축하여 학습시키고 다시 원래로 되돌립니다.
이러한 LoRA 기반 파인튜닝기존 파인튜닝에 비해 학습 속도와 메모리 효율이 매우 뛰어나지만, 상대적으로 성능은 약간 낮을 수 있다는 장단점을 가집니다.

 

 

 

 

2. 코드 상세

- task_type은 이 LoRA가 어떤 종류의 모델 아키텍처에 붙는지 모델의 forward 구조가 어떤 task를 처리하는지를 지정하는 역할

- 랭크 값알파 값을 적절히

- dropout의 경우 0 ~ 0.1 사이 값이 적절

- target_modules의 경우 LoRA 적용 대상을 말하는데, 모델마다 모듈 이름이 다름.

- lora_config 정의 후 마지막에 모델 선언 시, 기존에 다운로드한 모델(base_model)과 새로 추가한 설정인 lora_config를 함께 넘겨 모델 선언 

 

 

 

 

 

 

3. 일반 파인튜닝과 LoRA 파인튜닝의 차이

-  결론적으로 LoRA 파인튜닝을 사용함으로써 속도를 얻고, 대신 성능을 잃는 trade-off 가 존재함을 알 수 있음.

출처 : 우리의 친구 챗gpt