[논문리뷰] - LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS - 랭크를 줄여라 ! + X-LoRA !!

반응형

1. Introduction

LoRA paper: https://arxiv.org/abs/2106.09685

LoRA github: https://github.com/microsoft/LoRA

 

이전 트랜스포머 논문

https://minyoungxi.tistory.com/104

 

[논문리뷰] Attention is all you need - 트랜스포머를 모르면 취업을 못해요

Transformer의 탄생 배경 자연어 처리 분야에서 순환신경망(RNN)은 오랫동안 메인 모델로 사용되어 왔습니다. 하지만 RNN은 길이가 길어질수록 성능이 저하되는 단점이 있었습니다. 그래서 어텐션(Att

minyoungxi.tistory.com

논문이 다루는 task & 해당 task에서 기존 연구 한계점

이 논문은 자연어 처리(Natural Language Processing, NLP) 분야에서 널리 사용되는 대규모 사전 훈련된 언어 모델의 효율적인 태스크 및 도메인 특화적인 적응(adaptation) 방법에 대해 다룹니다. 

자연어 처리의 많은 애플리케이션은 하나의 대규모 pre trained 된 언어 모델을 여러 다운스트림 애플리케이션에 적용하는 데 의존합니다. 

이러한 방법은 주로 fine-tuning을 통해 이루어지는데, 이 방법은 단점은 새 모델에 원래 모델만큼 많은 파라미터가 포함된다는 것입니다. 더 큰 모델이 몇 달마다 학습되면서 GPT-3 와 같이 1,750억 개의 학습 가능한 파라미터가 있는 모델이 되는 것이죠. 

 

일부 파라미터만 조정하거나 새로운 task를 위한 외부 모듈을 학습하는 다양한 시도가 있엇습니다. 이런 방법은 각 task에 대해 사전 학습된 모델 외에 소수의 task 별 파라미터만 저장하고 로드하면 되므로 배포할 때 제약이 많이 줄어듭니다. 하지만 모델 깊이를 더 깊게하거나 모델의 사용 가능한 시퀀스의 길이를 줄여서 추론 대기 시간이 도입됩니다. 더 중요한 부분은 이러한 방법이 fine-tuning baseline과 일치하지 않는 경우가 많아서 효율성과 모델 품질 사이에 격차가 발생한다는 것입니다. 

 

저자들은 GPT-3 175B와 같은 매우 큰 모델들을 더 효율적으로 파인 튜닝하고, 모델의 특정 레이어에 저랭크(rank) 행렬을 삽입하여 적응성을 향상시키는 '저랭크 적응(Low-Rank Adaptation, LoRA)' 기법을 제안합니다. 이 방법은 기존의 전체 파라미터를 재학습하는 파인 튜닝에 비해 훨씬 적은 수의 훈련 가능한 파라미터를 사용함으로써, 계산 비용 및 메모리 요구사항을 크게 줄입니다.

 

2. Related Work

이 논문에서는 기존의 언어 모델 적응 방법들을 소개하고 LoRA와 비교합니다. 특히, 자연어 처리 분야에서 전이 학습을 위한 다양한 접근 방식이 소개되며, 이들 방법들은 주로 어댑터 레이어(Adapter Layers)를 사용하거나 입력 계층 활성화를 최적화하는 것에 초점을 맞추고 있습니다. 

 

그러나 이러한 방식은 추가적인 추론 지연을 발생시키거나 모델의 사용 가능한 시퀀스 길이를 줄이는 단점이 있습니다. 이러한 한계를 극복하기 위한 새로운 방법론으로 LoRA가 제안되었습니다.

3. 제안 방법론

Main Idea

 

What is Rank?

LoRA(Low-Rank Adaptation)를 설명하려면 먼저 '행렬에서의 Rank(랭크)'의 의미부터 이해해야 합니다. 행렬에서 랭크는 행렬을 구성하는 행 또는 열 벡터들 중 서로 독립적인 벡터의 최대 개수를 의미합니다. 이는 행렬이 정보를 얼마나 '밀도 있게' 담고 있는지를 나타내는 지표로 볼 수 있습니다.

랭크의 중요성
행렬의 랭크는 그 행렬이 연산될 때 계산 복잡성과 직결됩니다. 예를 들어, 랭크가 낮은 행렬은 많은 정보가 중첩되어 있거나 불필요한 정보가 적다는 것을 의미하며, 이는 계산을 더 효율적으로 만듭니다. 따라서 랭크가 낮을수록, 즉 정보가 간결할수록 파라미터 수가 적어져 계산 속도가 빨라집니다.

 

다음은 랭크가 2인 3 x 3 행렬의 예시입니다. 

아래의 행렬 A의 두 번째 및 세 번째 열은 첫 번째 열의 간단한 배수입니다. 즉, 모든 열벡터는 선형 족속 관계에 있으며, 실제로 독립적인 정보를 가진 열 벡터는 하나 뿐입니다. 따라서 이 행렬의 랭크는 1이 되는 것이죠 


\begin{bmatrix}
1 & 2 & 3 \\
2 & 4 & 6 \\
3 & 6 & 9
\end{bmatrix}
$

 

아래의 행렬을 보면 첫 번째와 두 번째 행은 선형 독립입니다. 그러나 세 번째 행은 0으로만 구성되어 있어서 어떠한 새로운 정보도 제공하지 않습니다. 따라서 이 행렬의 랭크는 2가 됩니다.

 


\begin{bmatrix}
1 & 0 & 3 \\
0 & 1 & 3 \\
0 & 0 & 0
\end{bmatrix}
$

 

Low-Rank-Parametrized Update Matrices

신경망에는 행렬 곱셈을 수행하는 많은 레이어가 포함되어 있죠. 이러한 레이어의 가중치 행렬은 일반적으로 full-rank를 갖습니다. 특정 task에 적응할 때, 사전 학습된 언어 모델은 더 작은 subspace로의 랜덤 projection에도 불구하고 여전히 효율적으로 학습할 수 있으며, 낮은 "내재 차원(instrisic dimension)" 을 갖습니다. 저자들은 이에 영감을 받아서 가중치에 대한 업데이트도 adpatation 중에 낮은 instrisic rank를 갖는다고 가정합니다. 사전 학습된 가중치 행렬 $W_0 \in \mathbb{R}^{d \times k} $ 의 경우 

 

$$ W_0 + \Delta W = W_0 + BA $$

$$ where B \in \mathbb{R}^{d \times k} , A \in \mathbb{R}^{r \times k} , r << min(d,k) $$

 

로 표현해서 업데이트를 제한합니다. 여기서 $r$은 rank를 뜻합니다. 학습하는 동안 $W_0$는 고정되고 기울기 업데이트를 받지 않는 반면 A와 B는 학습 가능한 파라미터를 포함합니다. $W_0$ 와 $\Delta W = BA $  는 모두 동일한 입력으로 곱해지고 각각의 출력 벡터는 좌표 방향으로 합산됩니다. 

 

 

추가 설명 

$$ W_0 + \Delta W = W_0 + BA $$ 이 식은 사전 훈련된 모델의 가중치 $W_0$에 저랭크 행렬의 곱 $BA$를 더하여 새로운 가중치 $W$를 형성합니다. 여기서 $\Delta W$는 $W_0$의 업데이트(변화량)를 나타내고 $BA$로 표현됩니다. 

$ B \in \mathbb{R}^{d \times k} , A \in \mathbb{R}^{r \times k} $ 는 $B$와 $A$는 저랭크 행렬 분해를 통해 나타내어지며, $B$는 $d$ x $r$ 차원이고 , A는 $r$ x $k$ 차원입니다. 이 행렬들은 $ \Delta W $를 저랭크 공간에서 표현하기 위한 기저를 형성합니다. 

해당 수식을 보면 전체 가중치 $W_0$ 의 크기를 변경하지 않고, 작은 크기의 $B$와 $A$만 업데이트하여 메모리 사용량을 크게 줄일 수 있습니다. $r$이 작기 때문에 $BA$의 계산과 역전파가 빠르게 수행될 수 있어서 전체적인 학습 및 추론 속도가 향상됩니다. 

$B$와 $A$만 조정되면 되므로, 다양한 테스크에 모델을 빠르게 적응시킬 수 있습니다. 이러한 수식은 대규모 언어 모델을 다양한 NLP task에 효과적으로 적용하는 데 있어서 기존의 전체 파인 튜닝 방식에 비해 상당한 계산 및 저장 공산의 이점을 제공합니다. 

 

 

위 그림은 reparameterization을 설명하고 있습니다. 

$A$에는 랜덤 가우시안 초기화를 사용하고 $B$에는 0을 사용하므로 학습 시작 시 $BA$ = 0 입니다. 

논문의 세부사항을 보시면 알파를 순위로 나눈 값으로 스케일링 된다는 것을 확인할 수 있는데요,

$r$은 고유 차원에 해당합니다. 1부터 64까지의 행렬을 어느 정도로 분해하고 가중치에 대한 압축 정도를 표현하고 싶은지 정할 수 있습니다. 

여기서 $\alpha$는 스케일링 요소입니다. 단순히 원래 모델 가중치에 추가되는 변화의 양을 제어하므로 지식의 균형을 유지합니다. 

사전 훈련된 모델과 새로운 task에 대한 적응의 간극을 줄여주는 것이죠. 

$r$ 과 $\alpha$는 모두 하이퍼 파라미터 입니다. 값들을 조정하면서 출력의 변화를 관찰할 수 있습니다.

 

 

  • LoRA는 가중치 행렬에 low-rank 행렬을 추가하여 파라미터 효율적인 fine-tuning을 가능하게 합니다. 이를 통해 학습 가능한 파라미터 수를 크게 줄일 수 있습니다.
  • LoRA 기반 학습은 파라미터 수 증가에 따라 전체 fine-tuning에 근접하게 수렴합니다.
  • 배포 시 업데이트된 파라미터를 사전 학습된 가중치에 병합할 수 있어 inference 시 추가 지연 시간이 발생하지 않습니다.
  • Transformer 아키텍처에서는 self-attention 모듈의 가중치 행렬에 LoRA를 적용할 수 있습니다.
  • LoRA의 주요 이점은 메모리 및 저장 공간 사용량 감소, 작업 간 전환의 용이성, 학습 속도 향상 등입니다.
  • 그러나 단일 forward pass에서 여러 작업을 위한 LoRA 모듈을 동적으로 선택하는 것은 쉽지 않다는 한계도 있습니다.

Contribution

LoRA로 인해 하드웨어의 요구사항의 부담이 많이 줄었습니다.

파라미터의 수가 훨씬 적어졌고, 훈련 시간이 감소했으며 RAM usage도 많이 줄어들었죠.

또한 $\Delta W$ 가중치를 간단히 병합할 수 있게 되었습니다. 

4. 실험 및 결과

Baseline

  • FT: Fine-Tuning
  • FTTop2: 마지막 두 레이어만 튜닝
  • BitFit
  • AdapH: 오리지널 adapter tuning
  • AdapL: MLP 모듈 뒤와 LayerNorm 뒤에만 adapter layer 적용 (논문)
  • AdapP: AdapterFusion (AdapL과 유사)
  • AdapD: AdapterDrop (몇몇 adapter layer를 drop)

Results

다양한 adaptation 방법을 적용한 GLUE 벤치 마크

 

다양한 adaptation 방법을 적용한 GPT-3 175B의 성능 비교 결과

 

다양한 adaptation 방법을 적용한 GPT-3 175B의 정확도와 파라미터 개수에 대한 그래프

 

 

LoRA를 위한 최적의 rank $r$은 무엇일까? 

아래의 표에서 볼 수 있듯이 rank를 높인다고 성능이 반드시 향상되는 것은 아닙니다. 

데이터셋에 따라서 다른 성능을 보여주고 있습니다. 랭크를 선택할 때 물어봐야 할 좋은 질문은 pre trained 모델이 유사한 데이터를 보았는지 입니다. 또는 나의 데이터 세트가 다르면 더 높은 랭크를 선택해야 할 수도 있습니다. 

 

Conclusion

https://arxiv.org/abs/2402.07148

 

X-LoRA: Mixture of Low-Rank Adapter Experts, a Flexible Framework for Large Language Models with Applications in Protein Mechani

We report a mixture of expert strategy to create fine-tuned large language models using a deep layer-wise token-level approach based on low-rank adaptation (LoRA). Starting with a set of pre-trained LoRA adapters, our gating strategy uses the hidden states

arxiv.org

 

최근에 X-LoRA 라는 최신 논문을 읽다가 LoRA도 다시 정리해야겠다고 생각해서 리뷰를 진행했습니다. 

 

 

X-LoRA는 여러 LoRA 어댑터를 동적으로 혼합하여 사용하는 새로운 접근 방식을 제안합니다. 이는 토큰 수준에서 각각 다른 어댑터들을 조합하여 사용하며, 이를 통해 모델이 더 다양하고 복잡한 테스크를 효율적으로 해결할 수 있도록 합니다. 

기존의 LoRA가 특정 테스크에 맞춰 저차원의 파라미터만을 학습하는 방식과 차이가 있죠. 이는 모델의 전반적인 가중치는 그대로 유지한 채로, 특정 레이어에만 저랭크 행렬을 추가하여 조정합니다. 

 

 

또한 동적 게이팅 메커니즘을 도입하여, 모델의 히든 스테이트에 기반하여 실시간으로 어댑터들의 활성화를 결정합니다. 이는 특정 입력에 대해 가장 적합한 어댑터를 선택하고 조합함으로써 보다 정교한 출력을 가능하게 합니다. 

 

LoRA의 경우 어댑터가 활성화되는 것은 주로 고정된 매개변수에 의존하죠. 

 

X-LoRA는 과학적 데이터와 복잡한 기술적 문제를 해결하는 데 특화된 어댑터를 개발하고, 이를 통합하여 사용함으로써 보다 전문적인 영역에서도 뛰어난 성능을 발휘할 수 있습니다. 특히, 단백질 역학, 분자 설계 등 생명 과학 분야에서의 응용을 강조합니다.

 

또한 X-LoRA는 개별 토큰과 레이어 수준에서 어댑터를 동적으로 혼합하며, 이를 통해 훨씬 더 세밀하고 유동적인 모델 조정이 가능해집니다.

 

논문을 직접 보시면 분량이 굉장히 많은데요, 다양한 전문 분야에서 기존의 LoRA 보다 더 높은 정확도와 간결한 답변을 제공하는 예시가 많습니다. 저는 도메인에 확실히 특화되었다고 느꼈습니다. 예를 들어, 단백질의 나노역학적 성질 예측과 같은 고도의 과학적인 테스크에서 예상치 못한 인사이트를 도출하기도 합니다. 

 

 

반응형