PEFT: Parameter-Efficient Fine-Tuning

PEFT(Parameter-Efficient Fine-Tuning)는 대규모 사전 학습된 모델을 조금만 수정해서 특정 작업에 적합하도록 만드는 기법이다.
요즘 AI 모델은 매우 크고 복잡해서, 모든 파라미터를 다시 학습하는 것은 시간과 자원이 너무 많이 들기 때문에, PEFT는 전체 모델을 다시 학습하지 않고, 필요한 부분만 효율적으로 조정하는 것을 목표로 한다.

 
PEFT에는 여러 가지 기법이 있는데, 여기서는 대표적인 Adapter, LoRA, Prefix Tuning, Prompt Tuning에 대해 알아볼 것이다.

 
추가적으로, 나는 예시를 들어 이해하는 것이 편리했기 때문에, 예시 문구도 함께 추가했다.


PEFT

1. Adapter

Adapter는 사전 학습된 모델의 각 층에 작은 모듈을 추가하는 방식이다.
이 추가된 모듈만 학습을 하고, 원래의 큰 모델 파라미터는 그대로 유지된다.
이렇게 하면 전체 모델을 다시 학습하지 않고도 새로운 작업에 적응할 수 있다.

  • 동작 방식: 모델 사이에 어댑터 모듈을 추가해서, 이 모듈에서 데이터 처리를 한다. 어댑터만 학습하므로 연산량이 적고, 새로운 작업에 쉽게 적응할 수 있다.
  • 예시: 큰 건물(모델)에 작은 방(어댑터)을 하나 추가하고, 그 방만 꾸미는 것과 같다. 전체 건물을 다시 만들 필요 없이, 새로운 방만 조정해서 필요한 기능을 추가하는 것이다.

 

2. LoRA (Low-Rank Adaptation)

LoRA는 모델의 가중치 행렬을 작은 두 개의 행렬로 분해해서 학습하는 방식이다.
이 방식으로 가중치를 효율적으로 학습할 수 있으며, 메모리와 연산 자원을 절약할 수 있다.

  • 동작 방식: 큰 가중치 행렬을 ( A )와 ( B )라는 작은 두 행렬로 나누어 학습한다. 이 두 행렬을 학습하는 것만으로도 원래의 가중치 행렬을 비슷하게 근사할 수 있다.
  • 예시: 큰 퍼즐을 다시 맞추지 않고, 중요한 퍼즐 조각들만 맞춰서 전체 퍼즐을 완성하는 방식이다. 즉, 작은 조각들만 학습해서 전체 모델과 비슷한 성능을 낸다.

 

3. Prefix Tuning

Prefix Tuning은 입력 앞에 추가적인 벡터를 붙여서 학습하는 기법이다.
이 Prefix 벡터만 학습하고, 모델의 나머지 파라미터는 고정된 상태로 둔다.
이렇게 하면 모델을 크게 수정하지 않고도 새로운 작업에 적응시킬 수 있다.

  • 동작 방식: 모델의 입력 앞에 Prefix 벡터를 추가한다. 이 벡터들만 학습되고, 나머지 파라미터는 그대로 유지된다. 프리픽스는 마치 "힌트" 같은 역할을 해서 모델이 특정 작업을 더 잘하게 만든다.
  • 예시: 시험 문제를 풀기 전에 힌트를 받는 것과 비슷하다. 힌트를 통해 문제를 풀기 쉬워지는 것처럼, Prefix 벡터가 추가되면 모델이 작업을 더 잘 수행할 수 있다.

 

4. Prompt Tuning

Prompt Tuning은 입력에 특별한 프롬프트를 추가해서 학습하는 방식이다.
Prompt는 특정 작업을 수행하는 데 필요한 지시 사항을 제공하는 역할을 한다.
Prompt Tuning은 이 추가된 프롬프트 토큰만 학습하고, 나머지 모델은 그대로 유지한다.

  • 동작 방식: 입력에 프롬프트를 추가하고, 이 프롬프트만 학습한다. 모델의 나머지 파라미터는 수정되지 않고, 프롬프트가 모델이 작업을 잘 수행하도록 도와준다.
  • 예시: 시험 문제 앞에 중요한 키워드를 추가하는 것처럼, 입력 앞에 프롬프트를 추가해서 모델이 더 쉽게 답을 찾을 수 있도록 한다.

Feed Forward Down -> Up 구조: Adapter와 LoRA에서의 사용

AdapterLoRA는 Feed Forward 구조를 조금 다르게 사용한다.
일반적으로 Feed Forward Up -> Down이 아니라, Down -> Up 방식이다.
이 방식이 사용되는 이유는 매우 간단하다: 효율성을 높이기 위해 먼저 차원을 축소하고, 나중에 확장하는 방식이다.

  • Feed Forward Down -> Up은 데이터를 먼저 작은 차원으로 압축한 뒤, 다시 확장한다. 이렇게 하면 학습해야 할 파라미터가 적어지므로, 더 적은 메모리와 연산 자원으로도 중요한 정보를 학습할 수 있다.
  • LoRA에서는 가중치 행렬을 저차원으로 분해한 후, 작은 행렬만 학습하고 다시 확장함으로써 원래의 가중치 행렬을 비슷하게 근사한다.
  • Adapter는 기존의 모델에 작은 모듈을 추가해서, 이 모듈에서 데이터를 먼저 축소한 후 다시 확장한다. 이 방법으로 전체 모델을 학습하지 않고도 특정 작업에 적응할 수 있다.

결론

PEFT 기법은 대규모 모델을 학습할 때 메모리와 계산량을 절약하면서도 효율적으로 새로운 작업에 적응할 수 있는 기술이다.
Adapter, LoRA, Prefix Tuning, Prompt Tuning 같은 다양한 방법이 있으며, 이들은 모델의 전체 파라미터를 수정하지 않고 필요한 부분만 학습해서 성능을 높인다.
특히 Down -> Up 구조는 저차원에서 중요한 정보를 먼저 학습하고, 다시 확장해서 전체 모델을 학습하는 것과 유사한 성능을 낼 수 있는 매우 효율적인 방법이다.


참고

https://www.leewayhertz.com/parameter-efficient-fine-tuning/#Use-cases-of-parameter-efficient-fine-tuning