오늘은 수식에 대한 내용은 제쳐두고, LoRA의 핵심 내용에 대해서 간단히 리뷰한다.
배경
우리는 때로 LLM을 우리의 도메인에 대해 더 잘 답변을 하는 것을 원한다. 특정 도메인에 맞게 LLM을 튜닝하기 위해서는 LLM을 학습시켜야 하는데, Fully하게 LLM을 Fine-Tuning하는 것은 매우 리소스가 많이 필요하다. (LLM의 파라미터 수는 굉장히 많기에)
또한 Base Model을 Fully Fine-Tuning 하는 것이 때로는 Pretraining에서 학습된 기본 성능을 저하 시킬 수도 있다. 왜냐하면 파라미터 수가 많기에 Pretraining에서 성능을 올려놓은 것을 잘못하면 떨어뜨리게 할 수 있게 될 수 있기 때문이다.
그래서 위와 같은 문제들을 극복하기 위해 탄생한 학습 방법이 바로 LoRA다.
LoRA는 PEFT(Parameter Efficient Fine Tuning) 기술 중 하나로, 학습을 효율적이고 저렴한 비용으로 하고 싶을 때 사용하는 방법이다. (PEFT 중에는 많은 방법론이 존재하는데 그 중 가장 많이 쓰이는 사례가 바로 LoRA다.)
개선 방법

위 그림의 Notation은 다음과 같다.
- x: 의 input (은 집합기호 실수체, 여기서는 1행 d열의 Matrix)
- h: output
- (blue color): pretrained weights (사전학습된 파라미터)
- : 는 x 인 실수체 에 속함 (여기서는 d행 d열의 Matrix)
- (orange color): LoRA Adaptor (Fine tuning 학습되는 파라미터, LoRA의 핵심)
- : 의 초기값은 정규분포 (Gaussian noise)
- : 의 초기값은 0
위의 그림에서 W는 학습되지 않고 A, B만 학습을 시킨다는게 LoRA의 핵심이다.
W는 Pretrained Weights로 매우 많은 파라미터이며 이것을 Fine Tuning하기에는 많은 리소스가 필요하다. 때문에, Adaptor라고 불리는 A와 B를 추가 시켜서 이 부분만 학습하는 것이 LoRA의 핵심이다. 이때 W는 Freeze해서 학습되지 않도록 하기 때문에, Base Model의 기본 성능을 유지할 수가 있다.
A, B의 파라미터 수는 W에 비하여 매우 적으며(보통 1% 미만이라고 한다), 또한 A, B는 Model의 각 Layer에 선택적으로 추가시킬 수 있다.
계산 과정

Adaptor를 이용해서 h라는 Output을 가져오는 것이 어떤 의미를 가질까?
원래는 Input 가 Pretrained Weights를 만나서 그 가 Vector Space의 어딘가에 위치하게 된다. 그런데, LoRA는 Adaptor를 추가해서 Vector Space에서 위치하고 있는 임베딩 된 벡터의 위치를 조정할 수 있게 된다. 때문에, Adaptor 부분만 학습을 했지만, Vector Space에 위치하는 벡터들의 위치를 재조정하면서 Fine Tuning의 효과를 가져올 수 있게 되어 모델의 결과를 다르게 만들어낼 수 있게 된다.
LoRA Hyper 파라미터 꿀팁
LoRA 기법을 사용할 때, SEMONAN 님의 파라미터 설정 꿀팁에 대해 소개하고 글을 마친다.
- 일반적으로 r의 값은 16에서 시작하여 키우는 경우가 많다.
- Epoch를 너무 크게하면 Over fitting 되기 쉽기 때문에, r, alpha, dataset의 수 등을 고려하여 적절히 설정한다.
- Training Dataset의 Loss를 Saturation 될때까지 학습하게되면 Over fitting이 될 수있다. 때문에 Validation set을 함께 확인하는 것이 좋다.
- Batch size는 너무 작지 않게 하는 것이 좋다.
- 메모리가 부족하면 Loss를 몇번 누적했다가 학습시키는 방법도 있다.
Reference
[LoRA] 논문 쉽게 설명하기
21년 여름에 혜성처럼 등장해 최근 2년 동안 LLM 학습을 위해 사용되고 있는 LoRA 를 소개한다. LoRA 를 소개할 때 수식에 대한 내용은 최대한 제거하고 원리는 무엇인지, 모델 구조에서 학습을 위해
beeny-ds.tistory.com
https://www.youtube.com/watch?v=0lf3CUlUQtA
'Langchain' 카테고리의 다른 글
[VectorStore] FAISS(Faicbook AI Similarity Search) 사용법 (2) | 2025.02.09 |
---|---|
벡터 데이터베이스 (VectorDB) (1) | 2025.02.02 |