반응형

LoRA 배경 설명

  • LoRA는 2021년 ICLR에 발표된 논문이다. 
  • 당시에는 GPT2, GPT3 등 LLM을 혁신하는 모델들이 등장하고 있던 시기이지만, 새로운 downstream task 학습을 위해서는 pretrained model에 대한 fine-tuning이 필요하다는 고정관념(?)이 자리 잡고 있던 시기이다.
  • 이 논문에서는 fine-tuning 과정에서 전체 parameter를 학습하는 것이 연산 cost가 매우 크다는 점을 지적하면서, 적은 양의 parameter 학습만으로 fine-tuning을 진행할 수 있는 방법을 제시한다.
  • LLM들의 parameter가 비대해지면서 소규모 computing 자원에서는 거의 학습이 불가능했는데, 이 부분을 가능하게 만든 논문이기도 하다.
  • 또한, 단순 LLM 뿐아니라, 모든 neural network에 적용되기 때문에, 다양한 분야에서 많이 사용되고 있는 논문이기도 하다. 

Abstract

  • NLP 분야의 패러다임은 많은 양의 데이터에서 pretraining 한 후, 특정 task나 domain 처리를 위해 fine-tuning 하는 것이다.
  • 하지만, Fine Tuning 과정에서 전체 모델을 다시 학습하는 것은 매우 비효율적이다. 
  • 이 논문에서는 LoRA(Low-Rank Adaptaion)라는 pretrained model의 weight를 고정해 놓고, Transformer의 각 층에 학습 가능한 rank decomposition matrices를 추가하는 방법을 제시한다. 
  • LoRA의 도입으로 인해, downstream task 학습 시, 학습 parameter 수를 매우 크게 줄일 수 있다. (GPT-3 기준 10000배) 
  • LoRA는 매우 적은 학습 parameter와 추가적인 inference latency 없이도, 최신 LLM 모델과 비슷하거나 그 이상의 performance를 낸다. 

 

Introduction

[Fine-Tuning 방법의 문제]

  • NLP 분야에서 많은 양의 데이터로 학습한 pre-trained model을 활용해, 다양한 task에서 fine-tuning하여 사용하는 방법이 많이 주로 사용된다.
  • 하지만, Fine-tuning에는 단점이 존재하는데, task 별 학습을 위해, 매우 많은 양의 parameter를 학습해야한다는 것이다. (일반적으로 pre-trained model 전체를 활용하여 학습하기 때문에)
  • 이 같은 문제는 LLM의 model parameter 수가 점점 많아지면서 더 크게 부각된다.

[parameter 일부를 학습하는 모델]

  • 많은 연구들이 이를 완화하기 위해, downstream task 학습을 위해, 일부 parameter만 학습하거나, 추가적인 module을 달아서 학습하는 방법을 사용하기도 한다.
  • 이런 방법들은 학습해야하는 parameter의 수를 크게 줄여, 학습의 속도 측면에서는 유리하지만, inference latency가 생기거나, model이 처리 가능한 sequence length를 줄이기도 한다.
  • 특히, 이런 방법들은 model의 성능을 악화하는 단점이 존재한다.

[소개]

  • 앞선 연구들에 영향을 받아, 논문에서는 model adaptation 과정에서 weight의 변화가 낮은 intrinsic rank를 가진다고 가정한다.(즉, fine-tuning  과정에서 weight 변화가 크게 복잡하지 않은 저 차원에서 변화이다.)
  • LoRA는 pre-trained weight를 고정해놓고, weight 변화의 rank decomposition matrics를 최적화하여, 모델을 간접적으로 습한다. (즉, fine-tuning 과정에서 pretrained model의 weight를 직접적으로 건드리지 않고, rank decomposition matrics를 최적화하기 위한 학습을 진행하여, 간접 학습 효과를 내는 것)
  • GPT-3의 경우 1~2 정도의 매우 낮은 rank를 통해서도 충분히 효과적이다. 

 

  • LoRA는 몇가지 강점을 가진다.
    1. pre-traned model을 공유하면서 각기 다른 task를 위한 LoRA module을 만들 수 있다. 이로 인해, storage를 크게 절감할 수 있고, task 변경에 따른 overhead를 줄일 수 있다.
    2. LoRA는 효율적이고, 낮은 Hardware 환경에서도 동작한다. 전체 parameter의 gradient를 구할 필요 없이, 추가된 매우 적은 양의 low-rank matrices만 학습하면 되기 때문이다. 
    3. LoRA의 단순한 선형 디자인이 추가적인 inference latency 없이 동작가능하게 한다.
    4. LoRA는 기존 연구들과 연관성이 없어, prefix-tuning과 같은 기존 연구들과 쉽게 결합 가능하다.

 

기존 연구들

  • Fine-tuning 과정에서 parameter 수를 절감하거나, 연산을 효율화하는 등, 학습 효율성을 향상하기 위한 연구는 기존에도 존재했었다. 
  • 기존 연구들은 2가지 방향성으로 나눌수 있다. 1) adapter layer를 추가하거나,  2) input layer activations를 최적화하는 것이다. 
  • 하지만, 두 방법 모두 한계가 존재한다. 

Adapter Layers Inference Latency

  • Adapte를 구성하기 위한 다양한 방법이 존재했다.
  • Transformer block 마다, 2개의 adapter layer들을 추가하는 방법, LayerNorm을 추가한 하나의 layer만 추가하는 방법들이 존재했다.(이러한 방법들은 추가 layer들이 들어, inference latency가 생긴다.)
  • 한편, Layer를 pruning하여 연산을 줄여, adapter layer의 추가 연산을 우회하는 방법들이 존재했다. 이 방법들은 adaptation 과정에서 학습해야 하는 parameter의 수를 크게 줄였지만, 순차적으로 진행되어야 하기 때문에, 병렬을 활용하지 못해, 오히려 전체 처리 시간은 증가하게 된다.

 

Directly Optimizing the Prompt is Hard

  • 다른 방향으로는 prefix tuning과 같은 방법이 있다. 
  • prefixtuning은 optimize가 쉽지 않고, 학습에 따라 성능이 단조롭게 증가하지 않는다. (즉, 예측 or 컨트롤 불가능하다.)
  • 보다 근본적으로, adaptation을 위한 sequence length로 인해, downstream task에서 사용 가능한 sequence length가 줄게된다. 이는 오히려 성능 하락으로 이어지기도 한다.

 

LoRA

Low-Rank Parametrized Update Matrices

  • Neural Network는 matrix multiplication을 진행하는 많은 dense layer들을 포함한다.
  • 이 layer들의 weight matrices는 일반적으로 full-rank를 가진다. 
  • 특정 task에 adapting 할때, pre-trained language model들은 매우 낮은 "instrinsic dimension"을 가지고, 이로 인해, 작은 subsapce로 random projection을 하는 경우에도 효과적으로 학습 가능하다. (기존 논문 내용)
  • 이에 영감을 받아, 논문에서는 adaptation 과정에서 weights를 학습하는 것도 낮은 "intrinsic rank"를 가진다고 가정한다.
  • pre-trained weight matrix (W0, size : d X k)에 대해, low-rank decomposition을 통해 update를 제한한다. (rank는 min(d,k))
  • 학습 과정에서 pretrained weight W0는 고정해 놓고, 학습 가능한 A(r X k), B(d X r) matrix의 곱을 더해준다. (weight의 변화를 저 차원의 B, A matric으로 표현하겠다.) 

  • A와 B를 random Gaussian initialization, Zero initialization으로 초기화하여, 학습 초반에는 weight의 변화 값을 0으로 출발한다.  
  • △Wx를 채 constant 값을 이용하여 scale 한다.
  • optimizing에는 Adam을 이용한다. 

[A Generalization of Full Fine-tuning]

  • Fine-tuning의 일반화된 버전은 pre-trained parameters의 일부를 학습하는 것을 포함한다. 
  • LoRA는 adaptation 과정에서 weight matrices의 full-rank를 필요로 하지 않는다. LoRA를 모든 weight 행렬에 적용하고 biases를 훈련하면, LoRA의 rank를 미리 훈련된 가중치 rank와 맞춰 설정함으로써, 전체 fine-tuning의 표현력을 회복할 수 있다.
  • 즉, LoRA의 학습 parameter의 수를 늘리면, fine-tuning 성능과 거의 수렴한다.

 

[No Additional Inference Latency]

  • LoRA를 사용하면 연산 및 저장을 W= W0+BA를 통해 진행하고, inference는 평소처럼 진행할 수 있다. 
  • 다른 task에 적용할 때는 weight에 BA를 빼서, pretrained model의. weight를 복구할 수 있다. 
  • 매우 적은 memory overhead로 매우 빠른 연산을 통해 진행 가능하여, inference 과정에서 추가 latency가 거의 없다고 봐도 된다.

 

Applying LoRA to Transformers

  • 이론적으로 LoRA는 neural network의 어느 weight subset에든 적용 가능하다.
  • Transformer에는 self-attention module에 4개의 weight matrices(query, key, vector, output), MLP 단에 2개가 있다. 
  • 간단하게 query, key, vector를 d X d의 single matrix로 처리한다.(실제로는 attention head로 나뉘어 있지만), 또한 단순화를 위해, downstream 작업에서 attention weight만 조정하고, MLP attention은 고정한다.

 

[Practical Benefits and Limitatiosn]

  • 가장 큰 장점은 memory와 storage 사용을 절감한 것이다.
  • large Transformer를 Adam으로 학습할 때, VRAM의 사용을 2/3까지 줄일 수 있었다. (GPT 3 기준 1.2TB → 350GB)
  • 또한, r=4로 정하고, query와 value projection matrices만 adapt 했을 때, checkpoint size가 350GB에서 35MB로 10000배가량 줄었다. 
  • 이는 학습 과정에서 적은 GPU를 사용하게 하고, I/O bottleneck을 줄이게 한다. 
  • 또한, 다른 downstream task로 바꿀 때도, 단순 적은 양의 LoRA weights만 교체하면 되기 때문에 매우 효과적이다. 
  • LoRA도 한계가 있는데, 다른 A와 B를 사용하는 입력을 단일 forward pass에서 처리하는 것이 간단하지 않다는 것이다. 하지만, 이것은 동적으로 LoRA 모듈을 선택해서 해결할 수 있다. 

 

 

실험 결과

[Model 성능]

  • GLUE에서 RoBERTa와 DeBERT에 LoRA를 적용해 보았을 때, 적은 학습 parameter만으로 기존 adaptation 방법을 넘어 finetuning에 필적하거나 더 좋은 성능을 내는 것을 확인할 수 있다. (AdptH: transformer layer당 2개 layer 추가, AdptL : 1 MLP + Layernorm, AdptP: AdptL과 비슷, AdptD: AdapterDrop 방법, BitFit : Bias만 학습, LoRA는 query와 value weight에만 적용)

  • GPT 기반 모델에서 Prefix-layer tuning(PreLayer)보다도 좋은 성능을 보인다. 

 

 

[학습 parameter ]

  • accuracy와 학습해야 하는 parameter 수 관계를 보면, LoRA가 가장 효과적으로 적은 parameter 학습만으로 좋은 성능을 보임을 알 수 있다.

 

 

추가 실험

transformers에 어떤 weights에 LoRA를 적용해야 하는가?

  • query와 key 중 하나만 LoRA를 적용했을 때는 낮은 성능을 보인다. query와 value 둘다에 적용했을 때가 좋은 성능을 보인다. 
  • 아래 실험을 통해, query와 vector를 4 rank 정도만 사용해도 충분한 정보를 담고 있음을 보여준다. 

 

이상적인 r은 몇인가?

  • r이 매우 작더라도 좋은 성능을 보인다. 이것은 adaptation 과정에서 weight matrix의 변화가 매우 저 차원에서도 표현 가능한 정도라는 것을 의미한다. 

 

 

Reference 

Hu, Edward J., et al. "Lora: Low-rank adaptation of large language models." arXiv preprint arXiv:2106.09685 (2021).

+ Recent posts