[논문리뷰] What is LoRA? : Low-Rank Adaptation of Large Language Models
LoRA에 관해서. 읽고 간단하게 작성 논문 : https://arxiv.org/abs/2106.09685
Aug 05, 2023
Low-RANK Adaptation
파인튜닝으로 사전학습 모델의 모든 가중치를 업데이트하면 낭비다. 왜냐하면 업데이트하는 파라미터는 극히 일부이기 때문에.
따라서 downstream task를 위해서 1) 추가적인 external module을 학습하거나, 2) 몇몇 파라미터만 업데이트 하는 방식이 제안되어 왔다.
하지만, 기존의 방식으로는 model depth를 늘림으로써 inference latency가 유도되거나(external module), 모델의 입력 가능한 문장 길이(prompt tuning을 의미하는듯?)를 줄여야 한다.
따라서 본 논문에서는 over-parameterized model이 실제로 낮은 고유 차원에 있다는 논문(Li et al. (2018a); Aghajanyan et al. (2020))에 입각하여 모델 adaptation(= 파인튜닝이라고 보는듯?)할 때 변하는 가중치 또한 low instrinsic rank를 가지고 있다고 가정하고 LoRA를 제안.
= 파인튜닝과정에서 가중치가 변화하는데 이걸 기존 매트릭스에 새로운 매트릭스가 추가되는 작업으로 봤을 때 추가되는 매트릭스(= 복잡)를 low rank decomposition해서 두개의 분해된 매트릭스로 표현할 수 있다(= 단순)
→ 추가된 low-rank 행렬을 최적화시킨다.
rank의 정의가 뭐더라
Column rank : 선형 독립적인 열 벡터의 최대 개수. (column rank와 row rank는 항상 동일하다.)
= 행 또는 열로 표현가능한 벡터 공간의 차원 = 매트릭스의 표현력?
LoRA는 사전 훈련된 가중치를 고정시키는 대신, adaptation 동안 dense layer 변화의 rank 분해 행렬을 최적화 하여 신경망에서 dense layer(매트릭스 곱을 수행하는 부분이 여기기 때문에)를 간접적으로 학습시킨다.
이해가 되지 않네. rank 분해 행렬이 내가 생각하는게 맞나?
분해 = Decomposition
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F873e84c2-aa63-426e-8b7a-53bea8933acb%252FScreen_Shot_2023-07-22_at_12.30.42_PM.png%3Ftable%3Dblock%26id%3D94faa69e-8953-4a4a-9c39-2f1c2623102d%26cache%3Dv2&w=3840&q=75)
특이값분해를 통해 얻은 행렬에서는 특이값이 큰 축 (그에 대응하는 특이벡터)이 상대적으로 중요하다.
특이값이 작은(행렬에 미치는 영향력이 작은) 특이벡터들을 날려 matrix의 중요한 표현 (image의 경우 contents, edge에 해당)을 보존하면서 상대적으로 덜 중요한 표현 (image의 경우 잡음, texture에 해당)을 제거할 수 있다. 이러한 점을 이용하여 잡음 제거에도 많이 사용된다.
즉, 그냥 행렬 분해로 생각하면됨. 새로운 용어인가 생각하지말고
- Filter / Kernel / Matrix decompostion
- Matrix / Tensor / Low-rank Factorization
- Low-rank Approximation
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fee4be3de-1bce-46db-ac8f-978b7d79ad04%252FScreen_Shot_2023-07-21_at_6.39.02_PM.png%3Ftable%3Dblock%26id%3D196415b6-37ad-47d4-a1b6-d469f233f709%26cache%3Dv2&w=3840&q=75)
, , where
rank r << min(d,k). W_0는 학습되지 않고 B,A만 학습됨.
원래 output h = 였다면 수정된 forward pass h = . 출력값은 coordinate-wise하게 합한 값.
실제로 학습할 때는 위에서처럼 A는 가우시안으로 초기화, B는 0으로 초기화
확실히 수식을 이해하기만하면 이해 개념을 이해하기 편하다.
트랜스포머 아키텍처에서는 forward layer말고 attention layer에만 적용한다고함.
LoRA의 장점
- 사전학습 모델을 고정하고 LoRA 모듈만 바꿔서 서로 다른 task를 할 수 있다. 오버헤드가 크게 줄어든다. 각각으로 파인튜닝할 필요 없으니까! 하나의 태스크 파인튜닝과 비교해도 훨씬 리소스가 적게 든다.
- inference latency가 없다.
- 기존에 존재하는 많은 방식들과 같이 사용될 수 있다.
실험 결과
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fba307683-6658-4970-9ea7-7ef90e9dd006%252FScreen_Shot_2023-07-22_at_1.09.47_PM.png%3Ftable%3Dblock%26id%3Dca0eb256-e34b-46bc-b1e6-a7a47acb55cf%26cache%3Dv2&w=3840&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F760ae229-5512-4c43-be0b-95cd27306c5f%252FScreen_Shot_2023-07-22_at_1.09.54_PM.png%3Ftable%3Dblock%26id%3Dd097a540-72fe-4a5a-995e-806426a3ea68%26cache%3Dv2&w=3840&q=75)
필요한 VRAM 용량도 줄어든다.
→ 그럼 Diffusion LoRA도 동일한건가?
맞는 것 같다.
Share article
Subscribe to our newsletter