일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- geocoding
- 개체명 인식
- 블루 아카이브
- 구글 스토어 리뷰
- 자연어 모델
- 트위치
- 문맥을 반영한 토픽모델링
- Optimizer
- 데이터넥스트레벨챌린지
- 포아송분포
- KeyBert
- 원신
- Roberta
- 붕괴 스타레일
- 데이터리안
- BERTopic
- SBERT
- 다항분포
- 코사인 유사도
- 데벨챌
- 블루아카이브 토픽모델링
- LDA
- 조축회
- 피파온라인 API
- Tableu
- CTM
- NLP
- 클래스 분류
- 옵티마이저
- 토픽 모델링
- Today
- Total
분석하고싶은코코
LoRA(Low-Rank Adaptation of LLM) 본문
오늘은 LoRA(Low-Rank Adaptation of LLM of Large Language Model)에 대한 이야기를 해보겠습니다.
LoRA는 마이크로소프트에서 Finf-tuning에 대한 새로운 접근법을 제안한 것입니다. LoRA가 등장하게 된 배경에는 많은 배경들이 있지만 그 중 하나가 바로 거대한 자연어 모델(LLM)들이 속속히 등장한 것이 가장 큰 이유입니다. LLM 그 전에는 없었는가? 그렇지는 않습니다. 그런데 OpenAI의 GPT-3의 발표로 인해 그 성장 폭이 엄청났죠. LoRA 논문이 발표된 해는 2021년입니다. 아래 그림을 보면 이 방법이 왜 등장했는지에 이해할 수 있습니다. 왼쪽 그림에서 GPT-3의 파라미터 증가량이 얼마나 큰 변화량이었는지 알 수 있습니다. 그런데 지금 2024년 이에 맞추어 대부분의 LLM들이 기본적으로 100B(Billion) 근처의 파라미터들을 갖고 있습니다.
다양하고 복잡한 자연어 처리를 위한 많은 파라미터들은 모델의 성능과도 연결이 됩니다. 그런데 모든 기업에서 이 모델의 모든 파라미터들이 필요하지는 않습니다. 그런데 일반적으로 Fine-tuning을 한다고 하면 순전파와 역전파 과정을 거치는 과정에서 이 파라미터들의 가중치들이 모두 업데이트가 이뤄집니다. 가령, GPT-3모델을 예로 들어보면 150B이면 한 번의 업데이트 과정에서 1500억개의 파라미터들의 계산이 이뤄져야합니다. 서비스를 위해 이 계산량을 감당하기란 쉽지 않습니다. 그런데 그래프를 보시면 아시겠지만 파라미터들은 점점 우상향 하고 있습니다. 물론 하드웨어의 발전으로 처리속도가 증가하고 있지만 그만큼 고가의 장비들일수밖에 없습니다. 이에 대한 해결방법들이 많이 연구되었고 그 중 하나가 LoRA입니다.
LoRA는 PDA 혹은 요약(Summarize)를 떠올리시면 조금 이해가 쉽게 됩니다. PDA는 고차원의 데이터를 저차원으로 축소 시켜 데이터 처리를 좀 더 쉽게 하고 그럼에도 데이터에 대한 중요 정보를 잃지 않는다는 것이 장점입니다. 요약 역시 똑같습니다. 물론 PDA를 활용도 하기는 하지만 다양한 방법들이 있긴합니다만 결국 요약 역시 많은 문장들로 구성되어 있는 글에서 핵심이 되는 문장을 뽑아내거나 혹은 그 안에서 또 키워드를 찾아 요약의 문장을 만들어 내는 것입니다. 이것 역시 똑같이 많은 글에서 적은 글로 축소하는 것이죠. LoRA의 접근은 이러한 접근에서 시작되었고 파라미터도 저차원으로도 충분히 표현이 가능하다는 다른 논문들을 통해 영감을 받아 시작되었습니다.
그런데 이런 문제는 이야기했지만 LoRA가 등장하기 전에도 많은 방법이 있었지만 그 중 하나가 Adapter를 사용해 Fine-tuning을 하고 있었습니다. 그런데 LoRA도 논문에 보면 같은 Adaptation이라는 단어를 사용합니다. Adapter와 다른점이 무엇인지 알아보겠습니다.
Adapter는 아래 그림과 같은 구조로 설계했습니다. Fine-tuning에서 너무 많은 파라미터들을 훈련시키기 어려우니 중간에 Adapter층을 넣어서 그 수를 감소시켜 이득을 취하자라는 접근법입니다. 오른쪽 그림의 Adapter내부를 보면 입력을 축소 시키고 출력에서는 원래대로 다시 돌려서 내보냅니다.
논문에서는 현재의 솔루션들이 만족하는가에대한 공격적인 의문을 던지며 Adapter와 Prefix tuning방법에 대한 단점들을 이야기하고 있고 이를 LoRA에서는 해소가 된다라고 이야가힙니다. Adapter에서는 앞서 이야기한 Inference Latency를 이야기하고 Prefix에서는 sequence_length에 대한 점을 이야기하고 있습니다.
그렇다면 LoRA에서는 어떻게 이러한 부분을 해결했을까요? 아래 그림은 더 효율적인 Fine-tuning을 위해 제시한 LoRA의 접근 방법입니다. 그림만 보더라도 훨씬 간단해 보입니다. 그런데 흐름은 위에서 본 Adapter와 비슷합니다. 파란삭 사각형에는 기존 모델의 weights들이 존재합니다. 그리고 A와 B Matrix가 존재하는데 이는 훈련된 모델의 가중치 과정에 존재하는게 아니라 따로 존재합니다. 기존 Adapter와 다른점이 바로 이부분입니다. 이를 통해서 inference latency를 크게 상승시킬 수 있다는 것입니다. 이게 무슨 이야기냐하면 기존의 Adapter 역시 파라미터를 줄이는 접근법은 같아 fine-tuning과정에서 연산량이 같이 적어질 수 있지만 이후 inference 과정에서 기존 모델에 층을 삽입했기 때문에 그만큼 연산량이 증가할 수 밖에 없습니다. 그런데 LoRA는 기존 모델의 가중치와 별개로 연산이 이뤄지는 A와 B가 존재하고 이를 계산하여 그냥 기존 모델의 가중치에 더해주기만 하면 결과가 나오게 됩니다. 그래서 연산량이 당연히 훨씬 적을 수 밖에 없습니다. 이게 LoRA가 기존 Adapter와 다른점입니다.
아래 두 식은 Fully Fine-tuning과 LoRA에서 제안하는 Fine-tuning 수식입니다. 왼쪽 식은 모든 파라미터를 업데이트하여 Φ 최대화 하는 것이 목표입니다. 오른쪽은 그와 다르게 Θ를 최대화 하는 것이 목표입니다. 이게 위에서 쭉 확인하면서 내려온 Adapter층을 삽입한 것과 A와 B를 추가하여 따로 파라미터만을 계산한 LoRA의 다른점을 식으로 표현한 것입니다.
LoRA를 통한 이점은 다음과 같다고 이야기합니다.
- Replace LoRA for each downstream task, not finetuning all parameters
사전 학습된 모델은 LoRA 모듈이 서로 다른 task에 빌드하도록 공유, 사용 가능. 사전 학습 모델의 매개변수를 동결시키고 이를 행렬 A와 B로 대체함으로써 스토리지 요구 사항과 작업 전환 오버헤드를 크게 줄일 수 있다. - no store gradient & just optimize low rank decomposition matrice
LoRA는 adaptation 옵티마이저를 사용해서 대부분의 매개변수에 대한 옵티마이저 상태를 유지하거나 그래디언트를 계산할 필요가 없기 때문에 학습을 보다 효율적으로 만들고 진입에 대한 하드웨어 장벽을 최대 3배까지 줄이는 대신 low-rank 행렬을 최적화시킨다. - no inference latency
간단한 선형 구조로 추가적인 inference latency없이 훈련 가능한 행렬을 동결시킨 가중치와 병합할 수 있다. - Combining LoRA with prefix tuning
LoRA는 기존에 존재하는 많은 방식들과 직교하기 때문에 prefix 기반 접근과 함께 사용될 수 있다.
실제로 이 방법을 사용해서 KoAlpaca 모델이 학습되었습니다. 마지막 이점인 완벽한 prefix는 아니지만 이 부분과 같이 함께 사용되어 해당 모델이 학습되었으니 궁금하신분은 참고하면 좋을 것 같습니다.
'머신러닝&딥러닝 > NLP' 카테고리의 다른 글
생성형 모델 옵션 설정_Transformer - GenerationConfig, (beam, greed search) (0) | 2024.01.16 |
---|---|
RLHF(Reinforcement Learning from Human Feedback)_(2) - RM(Reward Model) (2) | 2023.12.28 |
RLHF(Reinforcement Learning from Human Feedback)구현해보기_(1) - STF(Supervised Fine-tuning) (0) | 2023.12.25 |
XAI - LIME(Local Intcrprctablc Model-agnostic Explanations) (1) | 2023.12.19 |
여러 모델을 활용한 비속어 문장 탐지 (0) | 2023.12.18 |