Finetuning LLMs Efficiently with Adapters
Why Finetuning LLMs?
BERT, GPT-3, GPT-4, LLaMA 등과 같은 대규모 언어 모델(LLM)은 대규모 데이터를 가진 기업에서 교육(Pre-trained)을 받고 보편적인 지식을 가지고 있습니다. 그러나 미세 조정(Finetunning) 없이는 특정 작업에서 잘 수행되지 않을 수 있습니다.
예를 들어, 사전 훈련된 LLM을 사용하여 법률 또는 의료 문서를 분석하려는 경우, 법률 또는 의료 기업에서 이를 미세 조정하면 모델의 성능이 크게 향상될 수 있습니다. (관심 있는 독자는 이전 기사인 대규모 언어 모델 미세 조정: 핵심 아이디어 및 접근 방식 소개에서 다양한 LLM 미세 조정 방법에 대한 개요를 찾을 수 있습니다.)
그러나 LLM의 미세 조정은 연산 리소스와 시간 측면에서 매우 비쌀 수 있기에, 이것이 연구자들이 매개변수 효율 중심의 미세조정 방법(parameter-efficient finetuning methods)을 개발하기 시작한 이유입니다.
Parameter-Efficient Finetuning Methods
이전 기사에서 논의한 바와 같이 다양한 유형의 매개변수 효율적인 방법이 있습니다. 이전 게시물에서 프롬프트 및 접두사 튜닝(prompt and prefix tuning)에 대해 썼습니다. (기술적인 내용이 다소 있지만, 어댑터에 대한 본 기사를 읽기 전에 접두사 조정에 대해 알거나 읽을 필요는 없습니다.)
간단히 말해서 프롬프트 조정(prompt tuning, 단 prompting 과는 다름)은, 사전 훈련된 LLM의 내장된 입력에 텐서(tensor)를 추가합니다. 텐서의 역할은, LLM 내부의 다른 모든 매개변수가 동결된 상태로 유지되는 동안, 미세조정 작업 및 데이터에 대한 손실 함수(loss function)를 최적화하도록 조정됩니다. 예를 들어, 텍스트를 생성하기 위해 일반 데이터 세트에서 사전 훈련된 LLM을 상상해 보십시오. 프롬프트 (미세)조정은 이 사전 훈련된 LLM을 가져오고, 내장된 입력에 프롬프트 토큰을 추가한 다음, LLM을 미세 조정- 예를 들어 미세 조정 데이터 세트에 대한 감정 분류를 수행하는 것 등 -하여 수행하도록 합니다.
'프롬프트 조정' 및 일반적인 '매개변수 효율 중심의 미세 조정 방법'의 기본 아이디어는, 미리 훈련된 LLM에 적은 수의 새 매개변수를 추가하고, 새로 추가된 매개변수만 미세 조정하여 LLM이,
(a) 대상 데이터 세트에서, 예를 들어 의료 또는 법률 문서와 같은 도메인별 데이터 세트에서,
(b) 감정분류(sentiment classification)와 같은 대상 작업을,
더 잘 수행되도록 하는 것입니다.
매개변수 효율적인 미세 조정 기술(예: 프롬프트, 접두사 및 어댑터 조정)의 아이디어는 미리 훈련된 LLM에 작은 매개변수 집합을 추가하는 것입니다. 미리 훈련된 LLM의 모든 매개변수가 고정된 상태로 유지되는 동안 새로 추가된 매개변수만 미세 조정됩니다.
이 기사 에서는, 입력 프롬프트만 수정하는 방법이 아니라,, LLM의 다양한 변환기 블록에 조정 가능한 레이어를 계층을 추가한다는 아이디어를 중심으로 하는 adapters라는 관련 메서드에 대해 논의하고 있습니다 .
Adapters
원래 어댑터 방법(Houlsby et al. 2019)은, 각 Transfomer 블록에 추가 매개변수를 추가하기 때문에, 앞서 언급한 접두사 튜닝 방법과 어느 정도 관련이 있습니다. 그러나 접두사 튜닝은 임베딩에 조정 가능한 텐서를 추가하는 반면, 어댑터 방법은 아래 그림과 같이 두 위치에 어댑터 계층을 추가하는 것이 다릅니다.
그리고 파이썬 의사 코드(Python pseudo-code)를 선호하는 독자들은, 어댑터 계층 수정을 다음과 같이 작성할 수 있습니다.
어댑터 레이어로 수정된 트랜스포머 블록의 그림
어댑터에 완전히 연결된 레이어는 일반적으로 상대적으로 작고, 자동 인코더와 유사한 병목 현상 구조를 가집니다. 각 어댑터 블록의 첫번째 완전히 연결된 레이어는 입력을 저차원 표현( low-dimensional representation)으로 투영(전개)합니다. 두 번째 완전 연결 계층은 입력을 다시 입력 차원으로 투영합니다.
이 매개변수는 어떻게 효율적입니까? 예를 들어 첫 번째 완전 연결 계층이 1024차원 입력을 24차원으로 투영하고 두 번째 완전 연결 계층이 다시 1024차원으로 투영한다고 가정합니다. 이는 1,024 x 24 + 24 x 1,024 = 49,152개의 가중치 매개변수를 도입했음을 의미합니다.
대조적으로, 1024차원 입력을 1024차원 공간으로 재투영하는 단일 완전 연결 레이어는 1,024 x 1024 = 1,048,576 매개변수를 갖습니다.
원래 어댑터 논문 adapter paper에 따르면, 어댑터 방법으로 훈련된 BERT 모델은, 완전히 미세 조정된 BERT 모델과 비슷한 모델링 성능에 도달하면서도 매개변수의 3.6%만 훈련하면 됩니다. 또한 연구원들은 ‘어댑터 방법을 비교한 그림’을 하나 제시 했는데, BERT 모델의 최상위 출력 레이어만 미세 조정(Finetuning)하기 위해 어댑터를 사용하면, ‘최상위 레이어 미세조정’의 미세조정 성능을 훨씬 적은 수로 일치시킬 수 있음을 발견했습니다.
어댑터 논문(https://arxiv.org/abs/1902.00751)의 주석이 달린 그림.
Annotated figure from the adapter paper, https://arxiv.org/abs/1902.00751.
결론 Conclusion
사전 학습된 대규모 언어 모델(LLM)을 미세 조정하는 것은 이러한 모델을 특정 비즈니스 요구 사항에 맞게 조정하고 대상 도메인 데이터에 맞추는 효과적인 방법입니다. 이 프로세스에는 모델이 도메인별 지식과 어휘를 학습할 수 있도록 원하는 도메인과 관련된 더 작은 데이터 세트를 사용하여 모델 매개변수를 조정하는 작업이 포함됩니다.
그러나 LLM은 "대형"이므로 Transformer 모델의 여러 계층을 업데이트하는 데 비용이 많이 들 수 있으므로 연구자들은 매개변수 효율적인 대안을 개발하기 시작했습니다.
이 기사에서는 기존 LLM 미세 조정 메커니즘에 더해서, 몇 가지 매개 변수 효율적인 대안에 대해 논의했습니다. 특히 원래 모델 매개변수 훈련과 비교하여 LLM의 예측 성능을 개선하기 위해 추가 (매개변수) 어댑터 계층을 삽입하고 미세 조정하는 방법에 대해 논의했습니다.
Thanks again for supporting this newsletter! Whether it’s via a nice comment, sharing the word, or a paid subscription. It means a lot!
Additional Experiments
Additional Code Examples and Adapter Experiment
Below are additional experiments where I implemented the adapter method and ran a comparison to finetune a DistilBERT model for sentiment classification:
finetuning only the last two layers as a performance baseline;
inserting and finetuning adapter layers;
finetuning all layers of the original model;
inserting adapter layers and finetuning all layers as a control experiment.
All code examples are available here on GitHub.
Finetuning LLMs Efficiently with Adapters 원문 링크
[함께 보면 좋은…]
Understanding Parameter-Efficient Finetuning of Large Language Models: From Prefix Tuning to LLaMA-Adapters
https://lightning.ai/pages/community/article/understanding-llama-adapters/