Ssul's Blog
[NLP, Fine-Tuning] LoRA로 도메인 특화 챗봇 만들기 본문
0. 배경
Pretrained 모델과 downstream task를 통해서 등장한 수 많은 AI언어 모델들.
OpenAI는 gpt라는 pretrained된 모델에 파인튜닝(instruct, RLHF, PPO)을 통해 ChatGPT를 만들었고,
스탠퍼드 대학은 페북이 공개한 Llama라는 pretrained된 모델을 파인튜닝해서, Alpaca라는 모델을 만들었다.
그리고, 그 성능을 확인했다. 확실히 그전까지 챗봇과는 다른 ai스러움을 느낄수 있었다.
이러면서, 이제 가장 큰 화두는 Domain 특화 챗봇.
의료영역은 의료데이터를 학습한, 의료부문에 특화된 챗봇을,
금융영역은 금융데이터를 학습한, 금융부분에 특화된 챗봇을...
교육, 게임... 모든 영역이 자신의 분야에 특화된 모델을 만들고 싶어하고 있다.
그럼, 우리 도메인에 특화된 모델을 어떻게 만들수 있을까?
1. 도메인 특화 AI모델 개발의 어려움
ChatGPT 모델의 성공이 보여주는 중요 포인트는,
다음 단어를 예측하는 Pretrained-LM(gpt)를 잘 만들어 놓으니,
이걸 기반으로 다양한 Downstream task(대화, 분류, 감정분석, 번역 등)를 파인튜닝을 통해 성공적으로 가능하게 하는 모델을 만들수 있다는 것이다.
(*ChatGPT 역시, 다음단어를 예측잘하는 gpt라는 pretrained-LM을 챗봇형태로 파인튜닝해서 만들어진것)
이 사실을 알게된 많은 사람들이 자신들의 도메인데이터를 가지고, 다양한 파인튜닝에 도전하고 있다.
물론, 자금과 데이터가 많은 거대기업들은 자신들만의 기반(Pretrained)모델을 개발하기도 하지만, 대부분은 잘 개발된 거대모델을 기반으로 파인튜닝을 통해 우리도메인 특화모델을 만들고자 한다.
그런데 여기서 문제가 몇개 발생한다.
우선 기반모델을 만드는 거대기업들이 모델의 파라미터를 공개하지 않기 시작했다. 이 이야기는 파인튜닝을 할수 없다는 이야기. 물론 api로 튜닝을 할수 있게는 해주지만... 많은 제약사항이 있을 것으로 예상된다. 그래서 이 방법은 당분간 빠이~~
그럼 파라미터가 공개된 오픈소스형 기반모델은 Llama2를 활용하는 방안이다. 라마2의 파라미터 사이즈는 70억개(7B)에서 700억개(70B). 이론적으로 파인튜닝은 가능하지만, 학습을 하려면... 필요한 그래픽카드 인프라가 감당할 수 있는 수준이 되는 곳이 많지 않다. 결국 full-finetuning은 빠이~~
(gpt3가 vram을 1.2TB사용한다고 하는데, 1300만원짜리 a100그래픽카드가 80G라고하니..a100이 150개 있어야 하니...기본 20억정도의 인프라가 필요...)
그래서 막상 좋은 모델들은 계속 등장하지만, 돈과 인프라 데이터를 가지고 있는 쪽에서만 거대모델을 만질수 밖에 없는 상황...
2. PEFT(Parameter Efficient Fine Tuning)의 등장
풀파인튜닝의 비현실성(?)을 확인한 수많은 연구자들이 다양한 파인튜닝 방법론을 연구한다.
개념은 간단하다. 기존에 Pretrained된 거대모델의 파라미터는 고정(프리징), 그리고 학습가능한 다른 신경망(또는 구조)을 추가해서, 해당 부분만 업데이트를 하는 것이다.
prefix는 입력데이터에 학습가능한 것을 추가해서 같이 입력을 하는 형태.
adapter는 기존 모델 사이에 끼워넣는 구조.
그리고, LoRA는 병렬적인 구조로 기존 모델의 옆에 붙이는 구조.
이런 형태들을 PEFT(Parameter Efficient Fine Tuning)라고 한다.
그리고 그 중 가장 인기가 많은 것이 LoRA(Low-Rank Adaptation)이다.
구조는 간단한다. 기존에 Pretrained된 모델의 파라미터는 고정하고, 옆에 오토인코더 구조의 신경망 셋팅. A의 파라미터는 정규분포로 초기화, B는 0으로 초기화. 이렇게 모델을 셋팅하고, 파인튜닝을 실행.
당연히 오른쪽만 파라미터가 조정되고, 이를 통해서 파인튜닝 모델이 완성되는 것이다.
조금 더 이론적으로 설명하면,
예를들어 기존의 거대모델의 파라미터 구조가 10,000*10,000이면...파인튜닝시에도 엄청난 연산이 요구된다.
하지만 이건 프리징하고, 오른쪽에 10,000x4, 4x10,000의 오토인코더형태의 모델을 추가해서 파인튜닝하면, 연산량은 2*(10,000x4)로 대폭 줄어든다. 그래서 기존에 풀파인튜닝이 말도 안되는 형태였다면, LoRA는 중소기업도 가능한 형태가 되는 것이다.
논문의 저자들은 파인튜닝이 원래파라미터 + 조정된파라미터효과 = 파인튜닝이라면,
이 조정된 파라미터효과를 거대모델의 파라미터를 조정하는 것이 아닌, LoRA 구조를 통해서 그 효과를 발생하게 하는 것이라고 한다.
3. LoRA를 이용해 등장한 모델들
Alpaca-LoRA가 언어모델에서 LoRA사용한 사례이다.
Llama의 변형인 알파카를 LoRA를 통해서 파인튜닝한 모델으로 볼수 있다.
풀파인튜닝에 필요한 리소스보다 훨씬 적은 리소스를 활용하여 거대언어모델을 튜닝한 사례이다.
비전쪽에서도 LoRA 구조를 활용한 파인튜닝 모델이 가능하다.
기존 stable-diffusion모델에 LoRA로 파인튜닝하여, 원하는 느낌의 이미지 생성이 가능한 모델
4. LoRA를 이용한 나만의 파인튜닝 전략
- Gradual fine-tuning적용. 파인튜닝시, in-domain데이터만 활용하는 것이 아닌, out-domain(원모델 학습시 사용데이터)데이터를 섞어서, 점진적 비율조정을 통한 학습방법 결합
- 거대모델에 LoRA붙여서, 기존 모델의 파라미터는 프리징, 붙인 어댑터만 업데이트
5. 나만의 챗봇을 위한 기타 참고: DANN(Domain Adversarial training of Neural Network)을 통한 전이학습
- Pretrained모델을 기반으로 out-domain, in-domain 데이터를 구분하지 못하게 학습(Gradient Reversal)
- 동시에 올바른 응답을 답변하도록 학습
다음 글은 LoRA를 활용한 파인튜닝 실습!
'AI & ML > 학습하기' 카테고리의 다른 글
AI-LLM 파인튜닝 한방에 끝내기(gemma-2B) (2) | 2024.04.16 |
---|---|
[NLP, embedding] FAISS 사용하기 (0) | 2024.03.19 |
[AI, NLP] LSTM으로 스팸분류기 만들기 (1) | 2024.03.18 |
[NLP, Fine-Tuning] 우리 도메인 특화 챗봇 만들기 전략 (1) | 2023.12.21 |
chatgpt3 파인튜닝(fine-tuning)하기 (0) | 2023.05.02 |