본문 바로가기
Dcase Task2

[소개]LORA: LOW-RANK ADAPTATION

by 배현규 2024. 7. 21.

LORA는 PEFT(Parameter Efficietnt Finetunning)기법 중 하나입니다.

 

PEFT(Prameter Efficient Finetunning)

PEFT는 Large Model에 추가적인 Layer를 삽입하여Finetunnig 시 Large Model의 가중치는 얼리고 추가한 Layer의 가중치들만을 학습해서 학습의 연산량을 줄이는 방법입니다. Data의 수가 적을 파라미터가 많은 모델을 전체적으로 학습하게 되면 Overfitting이 일어날 수 있는데 이를 방지해 주는 역할도 하게 됩니다.

 

LORA의 가정은 이렇습니다.  “change in weights during model adaptation also has a low intrinsic rank”

파인튜닝(adaptation)시에 실제 모델에 학습되는 정보는 매우 적다(low intrinsic rank)

** intrinsic rank는 실질적인 정보를 의미

'학습 중 파라미터의 변화에 담긴 실제 학습되는 정보의 차원이 낮으니 정보를 추출하여 학습해도 무방하다.' 는  결론에 이르게 된 것입니다. 

 

LoRA에서 필요한 정보를 추출하는 방법은 학습 시 업데이트되는 Gradient Matrix를  Decomposition 하자는 것입니다.

 

이미지를 살펴보면 한 Layer에는 원래 가중치 Matrix : W(dxd)가 Input x에 Wx의 형태로 곱해져 Output : h가 만들어지게 됩니다. 원래는 W의 가중치들이 모두 학습이 되어서 dxd개의 가중치가 모두 업데이드 되게 됩니다. 

LoRA는 이 업데이트 되는 값에 dxd Matrix를 A(rxd), B(dxr)의 곱으로 나타내서 원래 가중치 행렬 W에 더해주는 형식으로 Finetunning 시 학습되는 정보를 W에 업데이트 하는 방법입니다. 이때 r이 d보다 당연히 더 작은 수여야 합니다. 그렇지 안으면 원래 W를 업데이트 하던 가중치보다 더 많은 가중치를 얻게 되어 W를 업데이트 하게 되는 것인데 의미가 없어지기 때문이죠.

 

원래 Fintunning 후 h의 값이 (W+ ΔW)x    (Gradient가 W에 업데이트 되는 것을 의미) LoRA는 ΔW의 값을 BA로 보고 원래 Layer의 W를 얼린 후 B의 값을 B + ΔB, A의 값은 A + ΔA로 업데이트 하여 (W + BA)x로 h를 만드는 것입니다.

 

 

연산량 비교를 위한 예시

W0: 250*300 = 75000 r=3 

B (250x3) + A(3x300) = 1650 로 더 적은 파라미터에 실질적인 정보를 담게 됨.

 

 

 

대부분의 성능 평가에서 LoRA를 사용해서 Fintunning한 모델들이 가장 높은 성능을 보이는 걸 볼 수 있습니다. 

성능 지표에서 FT는 (Fine Tunning)을 의미하는데 FT보다 성능이 높을 때가 더 많은 것도 확인할 수 있습니다.

 

 

참고로 LoRA는 Library가 존재해서 쉽게 적용해볼 수 있습니다.

Dcase Task 2의 1등 팀이 BEATs Model에 LoRA를 적용했길래 한 번 따라서 적용해 본 코드입니다.