본 게시글은 충남대 정상근 교수님의 강의자료를 바탕으로 작성한 글입니다.
일단 LLM은 크고 연산 비용이 많이 들기에 전체를 파인튜닝하기엔 어렵다.
예를 들어.. GPT3는 1750억 파라미터인데.. 이걸 어떻게 일반 장비로 학습/튜닝하겠음!
그렇다면 PEFT가 뭐길래 이거로 위 문제를 해결할 수 있다는 걸까?
PEFT란?
전체 모델을 다 바꾸지 않고 일부 파라미터만 선택적으로 튜닝하는 방식!
이렇게 하면 계산 자원이 절약되고, 기존 학습 내용이 보존된다.
그 대표 기법으로 Adapter, Prompt Tuning, Sparse Updating이 있다.
원래 구조는 프롬프트를 LLM 모델에 넣고, 답을 받는 형식이었다.
근데 이 LLM Model이 너무 커서 fine-tuning을 하기 어렵다.
1. Prompt Approach
일단 프롬프트를 조정하는 방법이 있다. 'Steering Handler를 바꾼다'라고 한다.
모델은 그대로 두고, 프롬프트만 바꿔서 원하는 답을 얻는 것이다.
이 기법에는 P-tuning, Prefix-Tuning, Prompt-Tuning 등이 있다.
이 prompt approach는 '입력 텍스트만 바꾸기'가 아니라, '입력과 관련된 학습 가능한 구조를 덧붙이는 것'이다.
모델의 파라미터를 수정하지만 않으면 된다는 것이다.
2. Additive Approach
모델 중간에 새로운 층을 추가하는 방법이 있다.
여기서 아이디어는 Additional Layer를 넣는 것이다.
이렇게 하면 좋은 게, 새로운 도메인에서 잘 작동하도록 돕는 것도 있고,
딱 이 layer만 훈련하면 돼서 좋다.
이 기법은 Adapter 등이 있다.
3. Reparameterization
Fine-Tuning용 파라미터를 '작게' 관리하는 것이다.
원래 가중치(파라미터)인 W의 shape가 [D, K] 였다면, 어떤 작은 r이 있을 때, W를 [D, r] 형태의 행렬과 [r, K] 형태의 행렬로 분리하는 것이다.
이 기법 중에 LoRA가 있다.
Hard Prompt VS Soft Prompt
Hard Prompt
사람이 만든 '텍스트'. 사람이 특정 방향, task에 대해 프롬프트를 작성하는 것! 예를 들어, '프랑스 수도가 어디야?' 같은.
Soft Prompt
학습 가능한 벡터(숫자 형태)로, 모델 내부에서 튜닝된다.
모델 training 과정에서 특정 task에 대해 모델 성능이 향상되도록 최적화된다.
즉, 하드는 내가 읽고 쓸 수 있는 거고, 소프트는 모델이 그 내부에서 답변 생성을 위해 쓰는 것이다.
Prompt Approach
P-Tuning
기존 모델의 파라미터는 전부 고정(frozen)하고,
프롬프트 임베딩을 학습해서 모델 입력 앞에 붙이는 것이다. 즉, 프롬프트를 수정하는 것이다.
다른 요소는 고정된 채로 주어진 프롬프트의 임베딩만 수정해서 작업을 정확히 하기에
이렇게 하면 full Fine-tuning 수준의 성능이 나올 수 있다.
심지어, 대부분 테스트에서 P-Tuning이 Full fine-tuning보다 우수하다는 것이 입증되었다.
프롬프트를 벡터로 바꿔서, 학습 가능한 continuous prompt로 바꿔 입력에 붙인다.
내가 질문을 했을 때, 이걸 살짝 말을 바꿔서 모델이 더 잘 알아듣도록!
Prefix-Tuning
fine-tuning의 가벼운 대안, 접두사 튜닝
언어 모델 매개변수를 고정하면서도 작은 연속 task-specific vector(접두사)를 최적화한다.
P-tuning에서는 학습 가능한 매개변수가 '입력 임베딩에만' 통합됐는데,
접두사 튜닝에서는 이런 매개변수가 네트워크의 모든 계층에 추가된다.
이러면 모델 자체가 fine-tuning 작업에 대해 더 깊은 이해를 얻을 수 있도록 보장한다.
성공하려면 입력 시퀀스를 넘어서게 확장해야 한다. 그리고 각 레이어에 학습 가능한 매개변수를 도입해서 유연성을 향상시킬 수 있다.
입력 뿐만 아니라 모델의 모든 층에 학습 가능한 접두사 벡터 추가.
모델 전체에 힌트를 심어주는 거!
Prompt Tuning
tunable(조정 가능한) 소프트 프롬프트를 사용해 frozen model을 조건화하는 효율적인 방법.
핵심 모델을 frozen한 채로, 새로운 학습 가능한 벡터에 gradient update를 적용한다.
만약 모델 튜닝을 한다면, 각 task에 대한 여러 모델이 생기는 것. 즉, 데이터가 들어오면 그게 알맞는 모델에 가게 됨.
프롬프트 튜닝을 한다면, 다양한 task의 예제와 프롬프트가 하나의 고정된 모델에 전달되어 서비스 자원을 더 잘 활용할 수 있다.
대규모 모델에서 신속한 튜닝의 효과가 중요한 이유는, 복사본을 제공하기에는 계산 오버헤드가 발생하기 때문이다.
규모가 커질수록, 프롬프트 튜닝이 25,000배 적게 매개변수를 조정함에도 전체 모델 튜닝과 일치한다.
입력 앞에 soft prompt 벡터만 추가해서 학습한다.
질문 때 힌트를 약간 붙여주는 거!
Additive Approach
Adapters
어댑터는 사전학습된 모델 레이어 사이에 삽입되는 '학습 가능한 작은 모듈'이다.
전체 모델의 매개변수는 frozen하고, 어댑터의 매개변수만 fine-tuning 중에 학습하는 것이다.
Reparameterization Approach
LoRA
이건 다음 글에서 설명하겠다.
'AI > 자연어처리' 카테고리의 다른 글
| Big Neural Network Training Tricks (1) | 2025.06.12 |
|---|---|
| LoRA(Low-Rank Adaption) (3) | 2025.06.12 |
| 언어모델 (0) | 2025.04.29 |
| BERT와 GPT, 트랜스포머의 변형 모델 (1) | 2025.04.29 |
| Transformer (0) | 2025.04.29 |