안녕하세요 Simon입니다.
NLP LLM 논문을 읽다 보면 방대한 양에 지칠 때가 있는데요. 과연 이 논문을 다 읽더라도 나에게 명확하게 인사이트를 줄 수 있을까? 란 생각이 항상 듭니다. 고효율은 아니라고 생각되어서, 이제 제가 필요한 인사이트가 아니라면? 과감하게 Abstrack 정도와 필수 개념만 보고 요약을 하려고 합니다. 아마 비슷하게 생각하실 거라고 생각합니다.
오늘 리뷰해 드릴 논문은 LoRA+ 튜닝의 기존의 방법론보다 더 성능을 개선시키는 LoRA+라는 논문입니다.
이 논문은 큰 네트워크 모델의 효율적인 파인튜닝을 위한 Low Rank Adaptation(LORA) 기법과 그 개선 버전인 LORA+에 대해 다룹니다. 기존 LORA 방식이 큰 네트워크의 임베딩 차원에서 비효율적인 파인튜닝 문제를 겪는다고 지적하며, 이를 A와 B 어댑터 행렬의 학습률을 다르게 설정함으로써 해결할 수 있음을 제시합니다. LORA+는 이러한 방식으로 성능 향상(1%-2% 개선)과 파인튜닝 속도(약 2배 가속)를 동일한 계산 비용으로 달성한다고 주장합니다. 또한, 다양한 언어 모델에 대한 실험을 통해 LORA+의 효과를 실증적으로 검증하고, 실제 애플리케이션에 LORA+를 적용하는 데 있어 실용적인 가이드라인을 제공합니다.
LoRA와 LoRA+ 사이의 주요 차이점은 A와 B 행렬에 설정된 학습률에 있습니다. 표준 LoRA에서는 A와 B 모두 동일한 학습률을 가지지만, 이는 임베딩 차원이 클 때 비효율적인 파인튜닝으로 이어질 수 있습니다. 반면 LoRA+에서는 B의 학습률을 A의 학습률보다 λ배 높게 설정합니다. 여기서 λ는 1보다 훨씬 큰 고정 비율입니다. 이러한 설정은 LoRA+의 효율성을 높이며, 논문은 λ를 선택하는 방법에 대한 지침도 제공합니다.
LoRA+는 어댑터 행렬의 학습 속도에 대한 차별화된 전략을 제안합니다. 행렬 B의 학습 속도를 행렬 A보다 훨씬 높게 설정하여 특성 학습 효율성을 향상합니다.
https://github.com/nikhil-ghosh-berkeley/loraplus
코드가 찾다 보니깐 Reddit에서 발췌해 왔습니다.
import torch
# LoRA model
model = ...
optimizer_cls = torch.optim.AdamW
optimizer_kwargs = {'lr': 5e-5, 'eps': 1e-6, 'betas': (0.9, 0.999), 'weight_decay': 0.0}
loraplus_lr_ratio = 20.0
optimizer = _create_optimizer(model, optimizer_cls, optimizer_kwargs, loraplus_ratio):
LoRA+ 인수:
- loraplus_lr_ratio: 학습률의 비율입니다. 이는 최적화기 학습률(예: learning_rate 또는 lr)로 전달됩니다. loraplus_lr_ratio는 모델과 작업에 따라 최적의 선택이 다르며, 일반적으로 작업이 더 어려울수록 이 비율을 더 크게 설정해야 합니다.
- loraplus_lr_embedding: (선택적) LoRA 모듈이 임베딩 레이어에 추가된 경우 다른 학습률을 지정할 수 있습니다. 기본값은 1e-6입니다.
LoRA의 주요 특징:
- LoRA 계층: 기존 모델의 특정 계층(예: 선형 계층, 임베딩 계층)에 LoRA 계층을 추가하여, 사전 학습된 가중치에 대한 수정 없이 모델의 표현력을 향상합니다.
- 가중치 동결: 사전 학습된 가중치는 동결되며, LoRA 계층의 가중치만 학습됩니다.
- 매개변수 r과 lora_alpha: LoRA 계층의 크기와 학습률 스케일링을 조정합니다.
LoRA+의 주요 특징:
- LoRA+ 학습 인자: LoRA+는 LoraPlusTrainingArguments를 통해 LoRA 학습 과정을 더 세밀하게 제어할 수 있는 추가적인 학습 인자를 제공합니다. 예를 들어, loraplus_lr_ratio와 loraplus_lr_embedding을 통해 LoRA 계층의 학습률을 조정할 수 있습니다.
- 최적화기 구성: LoRA+는 LoRA 계층에 대한 학습률 조정을 포함하여, 모델의 다양한 부분에 대해 서로 다른 학습률을 적용할 수 있는 맞춤형 최적화기 구성을 제공합니다.
- 모듈별 최적화: LoRA+는 모델의 특정 모듈(예: 임베딩 계층)에 대해 특별히 조정된 학습률을 적용할 수 있도록 합니다.
차이점 요약:
- 학습 인자와 최적화: LoRA+는 LoRA에 비해 더 세밀한 학습 인자와 최적화 옵션을 제공합니다. 이를 통해 사용자는 모델의 미세 조정 과정을 더 세밀하게 제어할 수 있습니다.
- 최적화기 구성: LoRA+는 특정 모델 구성 요소에 대한 학습률을 조정하는 등, 최적화 과정에서 더 많은 유연성을 제공합니다.
- 적용 범위: LoRA는 주로 가중치의 직접적인 수정 없이 모델의 표현력을 향상하는 데 초점을 맞추는 반면, LoRA+는 이러한 접근 방식을 확장하여 모델 학습 과정 전반에 걸쳐 더 많은 제어와 최적화 옵션을 제공합니다.
LoRA+는 LoRA의 기본 개념을 유지하면서도, 모델의 미세 조정 과정을 더욱 효과적으로 제어하고 최적화할 수 있는 추가적인 기능을 제공합니다.
아직은 그렇게 많이 쓰이진 않는 것 같은데 조만간 리더보드에도 LoRA+ 튜닝 이 나오지 않을까 조심스럽게 생각합니다.