PEFT (Parameter Efficient Fine-tuning)개념
대규모 사전 학습된 모델을 효율적으로 파인튜닝하기 위한 방법론입니다. 기본 개념은 모델 전체를 미세 조정하지 않고, 일부 파라미터만 조정하여 적은 리소스로도 원하는 작업에 맞게 모델 성능을 높이는 것입니다. PEFT는 특히 대규모 모델(GPT, BERT 등)을 파인튜닝할 때 메모리와 계산 자원을 절약하면서도 성능을 유지할 수 있는 장점을 제공합니다.
적은수의 파라미터로 학습 하도록 도와줌!
- 효율성: 파인튜닝할 때 모든 파라미터를 학습하지 않고, 필요한 부분만 미세 조정함으로써 모델을 훨씬 가볍게 만듭니다.
- 낮은 리소스: GPU 메모리나 계산 리소스가 제한된 환경에서 대규모 모델을 효율적으로 파인튜닝할 수 있습니다.
- 다양한 기법: PEFT에는 다양한 방법론이 포함되어 있어 작업 특성에 맞는 최적의 기법을 선택할 수 있습니다.
대규모 언어 모델에 특화된 PEFT
- 파라미터 효율성에 중점
- 모델의 특정 부분만 조정하거나 작은 레이어나 임베딩을 학습하는 방식으로 모델을 효율적으로 파인튜닝
1.Lora(Low-Rank Adaptation)
- 개념:
-- 모델의 파라미터를 저차원 공간에서 학습하여, 적은 메모리로도 대규모 모델을 파인튜닝할 수 있는 방법입니다.
-- 기존 파라미터를 직접 수정하는 대신, 새로운 저차원 파라미터를 추가합니다. 이를 통해 사전 학습된 모델의 주요 파라미터를 그대로 유지하면서, 부가적인 파라미터를 학습하게 됩니다.
-- LoRA는 저차원 행렬을 이용해 원래 파라미터 공간을 보완하는 방식으로, 이 저차원 행렬이 새로운 파라미터로 추가됩니다.(LoRA는 사전 학습된 모델의 변형 행렬을 학습하는 대신, 모델의 변형 행렬을 저차원 행렬 두 개로 분해하여 파라미터를 학습합니다. 즉, 기존의 큰 행렬을 직접 학습하지 않고, 이를 두 개의 작은 저차원 행렬 𝐴와 𝐵로 분해하여 학습합니다.저차원 행렬들은 모델의 아키텍처에 추가적으로 부착되며, 학습은 이 저차원 행렬에서만 일어나기 때문에 메모리와 계산 비용이 절약됩니다.)
- 특징: 모델의 주요 파라미터를 동결하고, 일부 파라미터만 저차원으로 분해하여 학습합니다.
- 장점: 메모리 사용량을 크게 줄일 수 있으며, 성능 저하 없이 빠르게 모델을 파인튜닝할 수 있습니다.
- 적용 사례: 대규모 언어 모델(GPT, BERT 등)을 훈련할 때 GPU 메모리를 절약하면서 빠르게 파인튜닝해야 하는 경우.
2.Adapter Tuning
- 개념: 기존의 모델에 어댑터 레이어를 추가하여, 해당 레이어만 학습시키는 방식입니다.
- 특징: 모델 전체를 수정하는 것이 아니라, 어댑터 레이어를 추가하고 해당 레이어만 학습합니다.
- 장점: 모델의 파라미터를 거의 변경하지 않으면서도 새로운 작업에 맞게 미세 조정할 수 있습니다.
- 적용 사례: 다양한 작업에 동일한 모델을 빠르게 적용해야 할 때. 어댑터 레이어만 조정하면 다른 작업에 쉽게 전환 가능합니다.
3.Prefix Tuning:
- 개념: 입력 토큰 앞에 프리픽스(임의의 텍스트) 를 추가하고, 프리픽스 부분만 학습하는 방식입니다.
- 특징: 전체 모델을 학습시키는 대신, 입력에 붙이는 프리픽스만 조정합니다.
- 장점: 기존 모델의 성능을 유지하면서도 프리픽스 부분만 학습하므로 리소스가 적게 소모됩니다.
- 적용 사례: 다중 작업에서 동일한 모델에 대해 프리픽스를 변경하는 방식으로 쉽게 파인튜닝을 적용할 수 있습니다.
4.Prompt Tuning
- 개념: 모델의 입력 앞에 학습 가능한 프롬프트를 추가하여 해당 프롬프트만 학습하는 방식입니다.
- 특징: 입력의 일부분만 조정하면서 모델이 특정 작업에 맞게 출력하도록 유도합니다.
- 장점: 기존 모델의 파라미터를 건드리지 않고도 다양한 태스크에 빠르게 적응할 수 있습니다.
- 적용 사례: 몇 가지 프롬프트 변형으로 다양한 자연어 처리 작업을 수행하는 데 유용합니다.
5.P-tuning:
- P-tuning은 입력에 프롬프트(입력 전처리 부분에 텍스트나 임베딩을 추가)를 사용하여 모델을 미세 조정하는 방법입니다.
- 기존 Prompt Tuning 기법과 달리, P-tuning은 프롬프트를 학습 가능한 임베딩으로 바꾸고, 해당 임베딩을 훈련 가능한 파라미터로 취급합니다.
- 이 임베딩은 모델의 입력으로 사용되며, 학습 가능한 프롬프트를 통해 대규모 사전 학습된 모델을 더 효율적으로 파인튜닝합니다.
P-tuning vs. Prompt Tuning
Prompt Tuning은 주로 텍스트 기반 프롬프트를 추가해 모델의 출력을 조정하는 방식입니다. 그러나 이 프롬프트는 고정된 프롬프트로, 학습을 하지 않는 경우가 많습니다.
P-tuning은 학습 가능한 프롬프트 임베딩을 생성하고, 이를 모델 입력에 추가합니다. 이 방식은 프롬프트가 동적으로 조정될 수 있어 더 강력한 파인튜닝이 가능합니다.
PEFT 방법론
- 모델의 크기를 줄이거나 모델을 경량화하는 기술
-
지식증류(Knowledge distillation)
개념: 큰 모델(교사)의 지식을 작은 모델(학생)로 전달하는 기술입니다.
설명:
- 큰 모델의 출력 확률을 작은 모델의 학습 목표로 사용합니다.
- 작은 모델이 큰 모델의 지식을 얻으면서도 더 나은 일반화 능력을 갖게 됩니다.
- 모델 크기를 줄이면서도 성능을 유지할 수 있습니다.
-
모델 가지치기(Pruning)
개념: 사전 학습된 모델에서 불필요한 가중치나 연결을 제거하는 기법입니다.
설명:
- 중요도가 낮은 매개변수를 식별하고 제거합니다.
- 크기 기반 가지치기, 구조적 가지치기 등 다양한 방법이 있습니다.
- 모델의 크기와 계산 요구사항을 줄이면서도 성능을 유지할 수 있습니다.
-
양자화 (Quantization)
개념: 모델 매개변수의 정밀도를 낮춰 메모리 및 계산 요구사항을 줄이는 기술입니다.
설명:
- 32비트 부동 소수점 숫자를 8비트 정수 등으로 변환합니다.
- 학습 후 양자화와 양자화를 고려한 학습 방식이 있습니다.
- 메모리 사용량을 줄이고 계산 속도를 높일 수 있습니다.
-
Low Rank Factorization
개념: 가중치 행렬을 저순위 행렬로 근사화하는 기술입니다.
설명:
- 가중치 행렬을 더 작은 구성 요소로 분해합니다.
- 단일 값 분해(SVD) 등의 방법을 사용합니다.
- 파라미터 수와 계산 복잡도를 줄이면서 중요 정보를 유지합니다.
-
지식 주입(Knowledge Injection)
개념: 원본 모델의 파라미터를 수정하지 않고 태스크별 정보를 주입하는 기술입니다.
설명:
- 태스크별 모듈을 추가하거나 기존 구조를 수정합니다.
- 사전 학습된 지식을 활용하면서 재학습 필요성을 최소화합니다.
- 원본 모델 수정을 최소화하면서 특정 태스크에 적응시킬 수 있습니다.
-
Adapter Modules(어댑터 모듈)
개념: 사전 학습된 모델에 추가되는 경량 모듈입니다.
설명:
- 원본 파라미터를 수정하지 않고 모델의 다양한 계층에 삽입됩니다.
- 태스크별로 관리되며, 쉽게 추가하거나 제거할 수 있습니다.
- 사전 학습된 파라미터를 유지하면서 태스크별 정보를 학습할 수 있습니다.
이 방법들은 모두 대규모 모델을 효율적으로 파인튜닝하거나 최적화하는 데 사용되며, 각각의 장단점과 적용 시나리오가 다릅니다. 실제 응용에서는 이러한 기법들을 단독으로 또는 조합하여 사용할 수 있습니다.