0. Abstract
- LoRA에서 구현된 영향을 분석
- 분석 결과 : LoRA는 새로운 지식을 효과적으로 학습하고 기억하는 능력에 제한이 있음을 의미함
- MoRA라는 새로운 방법을 제안 : 이는 같은 수의 학습 가능한 파라미터를 유지하면서 고랭크(<-> 저랭크(LoRA)) 업데이트를 달성하기 위해 정사각형 행렬을 사용, 정사각형 행렬의 입력 차원을 줄이고 출력 차원을 늘리는 비파라미터 연산자를 도입
- 메모리 집약적 작업에서 LoRA를 능가하고 다른 작업에서 견줄만한 성능을 달성
1. 서론
전체 튜닝(FFT)과 비교할 때, PEFT는 파라미터의 작은 부분만 수정한다. 예를 들어, 일부 작업에서는 파라미터의 1% 미만을 업데이트하여 FFT와 유사한 성능을 달성할 수 있다.
기존 PEFT 방법 중에서 LoRA(Low-Rank Adaptation)는 LLM에 특히 널리 사용된다. LoRA는 저랭크 행렬을 통해 파라미터를 업데이트함으로써 프롬프트 튜닝이나 어댑터와 같은 다른 PEFT 방법보다 성능을 향상시킨다.
(Prompt Tuning, Prefix Tuning, Adaptor Tuning과 같은 방법론 들이 있다. 궁금하면 한번 찾아보라.
짧게 설명하자면 Prompt Tuning, Prefix Tuning은 Sequence Embedding앞에 특수 토큰들을 집어넣어, 파인튜닝을 하여 특정 다운스트림 테스크를 맞추도록 함. Adaptor Tuning은 트랜스포머 맨 위, 맨 아래에 Layer를 하나 쌓아 파인튜닝을 진행함)
본 논문에서는 다양한 작업에 걸쳐 LoRA에 대한 포괄적인 평가를 수행한다.
- Intruction Tuning에서는 FFT와 견줄만한 성능을 보이지만 수학적 추론 및 continual pretraining에서는 부족함을 발견했다. 이러한 작업 중 Instruction Tuning은 주로 LLM의 지식과 능력 향상보다는 포맷과의 상호 작용에 초점
(Human Preference에 초점을 맞춘다는 이야기 같음.)을 맞추며, 대부분 지식 및 능력 향상은 사전 학습 동안 학습된다.
따라서, LoRA가 Instruction Tuning에서는 응답 형식을 쉽게 따르지만, 미세 튜닝을 통해 지식과 능력을 향상시켜야 하는 다른 작업에서는 어려움을 겪는다는 것을 관찰했다.
-> 정리하자면, 대부분의 지식은 Pretrain과정에서 얻어지고 학습되니 LoRA를 통한 특정 도메인에 대한 학습은 유용하지 않을 수 있다.
LoRA에서 관찰된 이러한 한계에 대한 타당한 설명 중 하나는 저랭크 업데이트에 대한 의존일 수 있다.
- 저랭크 업데이트 행렬 ∆W는 특히 도메인 특정 지식을 기억해야 하는 continual pretraining과 같은 메모리 집약적 작업에서 FFT의 전체 랭크 업데이트를 추정하는 데 어려움을 겪는다.
- ∆W의 랭크가 전체 랭크보다 훨씬 작기 때문에, 이러한 제한은 미세 튜닝을 통해 새로운 정보를 저장하는것이 어렵다.
- 이를 검증하기 위해, pseudo-data를 사용하여 새로운 지식을 기억하는지 LoRA의 성능을 평가했다. LoRA에서 256과 같은 큰 랭크에서도 LoRA가 FFT보다 훨씬 나쁜 성능을 보인다는 것을 발견함
-> 정리하자면새로운 지식은 Low Rank만으로 학습하긴 힘들 수 있다.
MoRA의 소개
- 훈련 가능한 파라미터의 수는 동일하게 유지하면서 ∆W의 순위를 최대화하는 것을 목표로 낮은 순위 행렬이 아닌 정사각형 행렬을 사용하는 MoRA라는 방법을 소개
- 예를 들어, hidden dim이 4096인 8랭크를 사용할 경우, LoRA는 랭크(∆W) ≤ 8인 두 개의 낮은 랭크 행렬 A ∈ R(4096×8)과 B ∈ R(8×4096)을 사용
- MoRA는 랭크(∆W) ≤ 256인 R256×256의 정사각형 행렬 M을 사용한다. 입력 차원을 줄이고 M의 출력 차원을 늘리기 위해 상관관계가 있는 비파라미터 연산자를 개발. 또한, 이러한 연산자와 M은 ∆W로 대체할 수 있으므로 LoRA와 같은 LLM으로 다시 병합할 수 있다.
Contributions
- 학습 가능한 파라미터의 수를 동일하게 유지며, 높은 수준의 업데이트를 달성하기 위해 LowRank 대신 정사각형 행렬을 사용하는 새로운 방법인 MoRA를 소개
- 입력 차원을 줄이고, 사각 행렬의 출력 차원을 늘리면서 가중치를 다시 LLM으로 병합할 수 있도록 하는 MoRA의 네 가지 비파라미터 연산자에 대해 설명
- 기억, 명령어 튜닝, 수학적 추론, 지속적인 사전 훈련, 사전 훈련의 다섯 가지 작업에 걸쳐 MoRA를 평가. 이 방법은 메모리 집약적인 작업에서 LoRA보다 성능이 뛰어나고 다른 작업에서도 비슷한 성능을 달성하여 효과 입증
2. 관련 연구
2.1 LoRA
LoRA에 대한 설명은 생략
LoRA를 추가로 개선하기 위한 많은 방법들이 있으며, 특히 LLM에 적용하기 위한 방법들이 있다.
- DoRA는 원래 가중치를 크기와 방향 구성 요소로 추가로 분해하고 LoRA를 사용하여 방향 구성 요소를 업데이트한다.
- LoRA+는 학습 효율을 높이기 위해 두 개의 저랭크 행렬에 대해 다른 Learning Rate을 사용한다.
- ReLoRA는 LoRA를 학습 중에 LLM에 통합하여 최종 ∆W의 랭크를 높인다.
2.2 LLM을 사용한 파인 튜닝
LLM의 컨텍스트 내 학습의 인상적인 성능에도 불구하고 특정 시나리오에서는 여전히 미세 튜닝이 필요하며, 이는 크게 세 가지 유형으로 분류할 수 있다.
- Instruction Tuning : LLM의 지식과 능력을 크게 향상시키지 않고 LLM을 최종 작업 및 사용자 선호도와 더 잘 일치시키는 것을 목표로 한다. 이 접근 방식은 다양한 작업을 다루고 복잡한 명령을 이해하는 과정을 단순화한다.
- 추론 작업 : 수학적 문제 해결과 같은 복잡한 추론 작업을 포함하며, 일반적인 instruction tuning은 복잡하고 상징적이며 다단계 추론 작업을 처리하는 데 종종 어려움을 겪는다. LLM의 추론 능력을 향상시키기 위해 대부분의 연구는 GPT-4와 같은 큰 모델을 활용하여 학습 데이터셋을 생성하는 데 초점을 맞추고 있다.
- Continual Pretraining : LLM의 도메인 특정 능력을 향상시키는 것을 목표로 한다. 해당 도메인 특정 지식과 능력을 증대시키기 위해 미세 튜닝이 필요하다.
그러나 대부분의 LoRA 변형들은 주로 instruction tuning또는 GLUE의 텍스트 분류 작업을 사용하여 LLM에 대한 효과를 검증한다. 또는 벤치마크 데이터 셋에서 제공하는 트레이닝 데이터 셋이 너무 작다.
-> 해당 방법론으로는 여러 방법론의 효과성을 입증하기에 부족함
3 Analysis the Influence of Low-rank Updating
LoRA의 핵심 아이디어 : 저랭크 업데이트를 사용
LoRA에 대한 설명
사전 학습된 파라미터 행렬 W0 ∈ R(d×k)가 주어지면, LoRA는 두 개의 저랭크 행렬을 사용하여 가중치 업데이트 ∆W를 다음과 같이 계산한다h = W0(x) + ∆W(x) = W0(x) + BA(x)
여기서 A ∈ R(r×k)와 B ∈ R(d×r)는 LoRA의 저랭크 행렬을 나타낸다. ∆W가 학습 초기에 0이 되도록 하기 위해, LoRA는 A를 가우시안 분포로 초기화하고 B는 0으로 초기화한다. ∆W를 BA로 저랭크 분해하기 때문에, rank(∆W) ≤ r이다. LoRA의 가중치 업데이트는 FFT의 전체 랭크 업데이트와 비교할 때 r ≪ min(d, k)로 현저히 낮은 랭크를 보인다.
LoRA에 의한 저랭크 업데이트는 텍스트 분류나 명령 튜닝과 같은 일부 작업에서 전체 랭크 업데이트와 동등한 성능을 보인다. 그러나 복잡한 추론이나 continual pretraining과 같은 작업에서는 LoRA가 더 나쁜 성능을 보이는 경향이 있다.
가설 : 저랭크 업데이트에서 LLM의 원래 지식과 능력을 활용하기 쉽지만, LLM의 지식과 능력을 향상시켜야 하는 작업을 처리하는 데 어려움을 겪는다는 가설을 제안한다.
LoRA와 FFT의 차이점을 조사
- LLM의 원래 지식 활용을 피하기 위해, 우리는 32개의 16진수 값을 가진 두 개의 UUID로 구성된 10K 쌍의 UUID(Universally Unique Identifier)를 무작위로 생성한다. 이 작업에서는 LLM이 입력 UUID를 기반으로 해당 UUID를 생성해야 한다.
- 예를 들어, "205f3777-52b6-4270-9f67-c5125867d358"와 같은 UUID가 주어지면, 모델은 10K 학습 쌍을 기반으로 해당 UUID를 생성해야 한다. 이 작업은 질문-답변 task으로 볼 수도 있으며, 이를 수행하는 데 필수적인 지식은 사전훈련된 과거 데이터가 아니라, 이번에 훈련한 10K 학습 데이터셋에서 얻어진다.
- 학습 설정 :
- 기본 모델로 LLaMA-2 7B를 사용
- 배치당 1,000 쌍을 활용하며, 100 에포크를 수행
- 모든 레이어에 저랭크 행렬을 적용하고 {1e-4,2e-4,3e-4}에서 learning rate을 탐색
- 랭크 : r ∈ {8, 16, 32, 64, 128, 256}를 사용
- FFT의 경우, 우리는 3e-5의 learning rate사용
그림 2에 따르면, LoRA는 FFT에 비해 새로운 지식을 기억하기 어렵다는 것을 알 수 있다. LoRA의 랭크를 지속적으로 증가시키면 이 문제를 완화할 수 있지만, 그 차이는 여전히 존재한다.
메모리 작업과는 달리, 우리는 또한 새로운 지식을 도입하지 않는 Instruction Tuning에서 LoRA와 FFT 간의 성능 차이를 평가한다. 이전 결과와 유사하게, 우리는 또한 표 1에서 보는 바와 같이 LoRA가 작은 랭크 r = 8에서 FFT와 유사한 성능을 달성한다는 것을 발견했다. 이는 LoRA가 FFT와 같이 미세 튜닝을 통해 LLM의 원래 지식을 쉽게 활용할 수 있음을 나타낸다.
-> Instruction Tuning을 통한 Preference를 높이는 것에서는 FFT와 LoRA 차이가 없다.
4. Method
위 분석들을 바탕으로 low rank update의 부정적인 부분을 완화하기 위한 새로운 방법을 제안한다.
주요 아이디어 : 동일한 학습 가능한 파라미터를 사용하며, Rank를 높이는 것
- 사전 학습된 파라미터 : W0 ∈ R(d×k)
- LoRA 학습 파라미터 : 랭크 r에 대해 총 (d + k)r개의 학습 가능한 파라미터로 두 개의 행렬 A와 B를 사용
-> 정사각행렬 만들기 : 동일한 파라미터이면서 정사각 행렬로 되기 위해서는 R(r x r)로 만들어야 함. 여기서 r은 sqrt((d+k)r)이다.
comp와 decomp를 사용해 축소, 복원을 하는데 여기서 이 함수들은 non parametric하다.
decomp와 comp과정을 한 것을 ∆W로 정의한다.
4.1. 가장 쉬운 아이디어
해당 논문에서 comp, decomp를 정의하기 위해서 여러가지 방법들을 생각하고, 가장 직관적인 방법은 왼쪽과 같다.
근데 저렇게 봐서는 무슨 뜻인지 직관적으로 보이지 않으니(?) 예시를 통해서 블로그 주인장 나름대로 설명해보겠다. (<- 오류가 있을 수도 있음)
하지만 이렇게 할경우, comp과정에서 많은 정보들을 잃어 버리게 되고, decomp과정에서 0을 붙이면서, 정보 일부분만 사용하게 되는 단점이 있다.
4.2. 두번째 아이디어( 수정 필요 )
허나 여기서도 식(6)에서 comp과정에서 정보 손실이 크다.
예를들어) r = 8d이고 r^ = 256이면 16개의 그룹으로 나눠서 더해야 함.
4.3. 세번째 아이디어( 소스코드 살펴보기 )

x에서 comp과정을 통해서 n*r개로 정보를 나눈다.
x = [1,2,3,4,5,6]이고 r이 2이면 n은 3일테니
-> [[1,2], [3,4], [5,6]]으로 comp할 수 있다.
4.3.1 세번째 아이디어 + RoPE아이디어 응용하기 ( 내재적인 의미를 살펴보기 )
5. Experiment
UUID에 대한 암기(?)부분을 살펴보면, FFT과 MoRA(256)은 500 iteration만에 정확도 100을 달성함.
반면 rank가 낮거나 LoRA의 경우 같은 rank의 MoRA보다 iteration이 오래 걸림을 볼 수 있음.
UUID외에도, Instruction, 수학 추론, Continual Pretraining부분에 실험을 진행하였음.
MoRA
- Instruction Tuning 및 수학적 추론에서 LoRA와 동등한 성능을 보임.
- MoRA는 연속적 사전 훈련(생물의학 및 금융) 모두에서 LoRA를 능가함.
LoRA 계열들의 방법론들은 파인튜닝에서 LoRA와 유사한 성능을 보이는 것을 발견함.
AsyLoRA가 Instructino Tuning에서 가장 좋은 성능을 달성하지만, 수학적 추론에서는 성능이 낮다.
ReLoRA의 경우, 훈련 중 저랭크 행렬 병합이 성능을 저하시킬 수 있으며, 특히 256과 같은 고랭크에서 그러한 현상이 두드러진다.
Instruction Tuning
- 새로운 지식을 학습하지 않는 instructino tuning의 경우 랭크 8만으로도 FFT과 유사한 성능 달성
수학적 추론
- 랭크 8로 FFT의 성능을 따라가기 어려움. 하지만 256으로 높이면 성능차이를 좁힐 수 있다.
연속 사전 훈련
- 256의 LoRA로도 FFT를 따라가기 어렵다.
High Rank의 영향도 분석
트랜스포머를 처음부터 훈련
-> 논문에서 구체적으로 나와 있진 않으나, Self Attention Block 대신 LoRA, 혹은 MoRA를 사용하여 비교를 한것으로 보인다.
같은 파라미터로 훈련을해도 Rank가 높은 방법론인 MoRA방법론이 더 좋은 성능을 보였다.
6. Analysis
6.1 고랭크 업데이팅
고랭크 업데이팅이 ∆W의 랭크에 미치는 영향을 보여주기 위해 250M 사전 훈련 모델에서 학습된 ∆W의 특이값 스펙트럼을 분석했다.
그림 5에서 Lialin 등(2023)을 따라 ∆Wq, ∆Wk, ∆Wv, ∆Wo, ∆Wup, ∆Wdown 및 ∆Wgate에 대해 모든 레이어에 걸쳐 0.1을 초과하는 특이값의 평균 개수를 보여준다.
MoRA와 ReMoRA는 LoRA 및 ReLoRA에 비해 상당히 많은 수의 유의미한 특이값을 보여주어 ∆W의 랭크를 높이는 우리 방법의 효과를 강조한다.
6.2 Influence of Decompression and Compression
MoRA의 Decompression and Compression을 분석하기 위해 표 4에서 다양한 방법을 사용한 성능을 실험한다.
- truncation :압축 중 상당한 정보 손실로 인해 가장 나쁜 성능을 보인다.
- sharing : 입력 정보를 보존하기 위해 공유된 행이나 열을 활용함으로써 truncation보다 나은 성능을 달성하나 r=8의 경우, 4절에서 논의한 대로 공유된 행이나 열의 수가 많아 decouple, rotation보다 성능이 낮다.
- rotation : 회전 정보가 정사각 행렬이 입력 정보를 구별하는 데 도움이 되므로 truncation보다 효율적이다.