본문 바로가기

논문 리뷰/Language Model

LoRA+: Efficient Low Rank Adaptation of Large Models

 

Abstract

LoRA의 A, B 행렬에 각각 다른 학습률을 적용하여 더 효율적으로 훈련

 

[Github]

[arXiv](2024/02/19 version v1)

 

 

 

An Intuitive Analysis of LoRA

Low-Rank Adaptation (LoRA)

 

Initialization

일반적으로 a, b 중 하나를 0으로 초기화하며 b를 0으로 초기화할 경우 a는 많이 쓰이는 초기화 방식에 따라 입력 활성화의 크기 n에 반비례하는 분산을 가진다. 이는 큰 활성화의 생성을 방지해 학습을 안정화시킨다.

y = Θ(x)는 y가 x에 대한 linear scale을 가진다는 것을 의미한다. y = k*x

 

Learning rate

분석의 단순화를 위해 W* = 0으로 가정하면 gradients는 다음과 같이 작성할 수 있다.

b는 ax와 loss에 영향을 받고 a는 b, x와 loss에 영향을 받는다.

 

한 차례 학습이 진행된 후 입력 x에 대한 출력 f(x)의 변화율은 다음과 같다.

순서대로 a의 업데이트에 의한 변화, b의 업데이트에 의한 변화, a&b의 업데이트에 의한 변화

 

우리의 목표는 n의 크기에 상관없이, 특히 n → ∞일 때 안정된 학습을 가능하게 하는 학습률 η를 찾는 것이다. 

(최근 LLM 모델들의 너비가 매우 커지는 상황이므로)

즉, δ1, 2, 3 = Θ(1)을 만족하게 하는 특정 η를 찾아야 한다.

 

δ1 = Θ(1)을 만족하려면 η = Θ(n-1) 이어야 하는데, 그러면 δ2 = Θ(n-1)이 되고

δ2 = Θ(1)을 만족하려면 η = Θ(1) 이어야 하며, 그러면 δ1 = Θ(n)이 된다.

 

쉽게 설명하자면, 큰 n에서 a의 불안정한 학습을 막기 위해 학습률을 낮추면 b의 학습이 비효율적이게 된다.

 

한 가지 쉬운 해결책은 a와 b에 다른 학습률을 적용하고 a의 학습률만 낮추는 것이다.


Abstract의 언급에 따르면 최대 2배까지 더 빠르게 학습 가능하며 1~2%의 성능 향상이 있다고 하긴 하는데 그 정도면 의미는 없는 거 같고 아무튼 빠르긴 하다.