ᐧ༚̮ᐧ Data Science | AI/논문 리뷰

[논문리뷰 | 딥러닝, 미세조정] LoRA: Low-Rank Adaptation of Large Language Models

Letter_B 2024. 11. 8. 07:21
728x90
반응형

읽기 편하도록 추가 설명은 접은 글로 정리해 두었습니다.

 

GPT와 같은 대규모 사전 학습 언어 모델은 다양한 다운스트림 작업에 활용된다. 예를 들어, GPT 모델을 의료 데이터를 사용해 추가로 훈련하여 의료 데이터를 분석하거나, 챗봇에 특화된 대화 능력을 강화하는 등 여러 방식으로 활용할 수 있다. 하지만 모델의 크기가 워낙 커서 기존의 훈련 방식으로는 효율적으로 학습시키기 어렵다. 이를 해결하기 위한 접근 중 하나인 LoRA는 모델의 파라미터를 고정한 채 빠르게 학습을 진행할 수 있게 한다.

 

 

🔗 [arxiv 링크]

👨‍👩‍👧 Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen

📅 2021/10/16


🔖 논문 요약

  • 문제 정의: 언어 모델의 크기가 커지면서, GPT와 같이 1750억 개의 파라미터를 가진 모델을 기존의 방식으로 전체 재학습하는 것은 많은 자원이 필요해 효율적이지 않다.
  • 제안된 방법: 사전 학습된 모델의 가중치를 고정한 상태에서, 계수가 낮은 (Low-Rank) 행렬을 삽입하여, 학습 파라미터 수를 줄이는 방법을 소개.
  • 핵심 결과: LoRA는 기존의 방법과 비교해 성능을 유지하거나 더 좋은 성능을 달성하면서도 학습할 파라미터 수를 크게 줄였다.
    다른 어댑터를 사용하는 방식은 모델의 깊이를 늘리거나 모델 구조를 변경하며 추론 (Inference) 시간이 길어지는 경우가 있지만 LoRA는 추론 속도에 영향을 거의 주지 않는다.
  • 사용된 데이터셋: GLUE - NLP 모델의 언어 이해 능력을 평가하기 위한 대표적인 벤치마크 데이터셋

 

더보기

📝 가중치 (weights): 모델이 학습하는 값. neural network 연결 중요도를 나타내는 값

📝 파라미터 (parameters): 모델의 성능을 조절하는 값 - 가중치를 포함한 모든 학습 가능한 값.

 

📝 계수/랭크 (Rank): 행렬의 계수는 그 행렬에서 선형 독립인 행 또는 열 벡터의 최대 기수를 의미한다. 아래 행렬을 보면 두 번째 열 벡터 [1, 0, 0]는 독립적이고, 두 번째 열 벡터는 첫 번째 열과 독립적이다. 세 번째 열 벡터는 첫 번째와 두 번째열의 선형 결합으로 표현할 수 있어 (첫 번째 열 + 두 번째 열 = 세 번째 열) 독립적이지 않다. 총 선형 독립인 열. 벡터가 2개이며 이 행렬의 랭크는 2이다.

위키피디아 Rank 페이지

 

랭크가 높으면 더 많은 독립적인 정보를 포함하고 있으며, 더 많은 정보나 차원을 표현한다. 낮으면 그만큼 압축된 정보를 표현한다.

 

📝 어댑터 (adapter): 사전 학습된 모델에 새로운 작업을 적용할 때 기존 모델에 추가된 작은 네트워크를 어댑터라고 부른다. 기존 모델의 가중치를 조정하지 않고 이 어댑터의 가중치만 학습한다.

 

예를 들면, 사전 학습된 Transformer 레이어에 작은 모듈 (adapter)을 삽입하여 이 모듈만 학습한다. 기존 모델의 지식을 보존하며 작업에 맞게 모델을 미세 조정한다.

Houlsby et al., 2019

 

📝 parameter-efficient fine-tuning (PEFT): 위 어댑터, LoRA 같이, 대규모 모델을 전체 재훈련하지 않고 일부 파라미터만 조정하는 방법을 peft라 부른다.

📝 추론 (inference): 훈련된 모델을 사용하여 새로운 데이터에 대한 예측을 생성하는 과정


📊 상세 분석

  • 방법론/아키텍처:
    • LoRA의 가설: 사전 학습된 언어 모델이 낮은 내재적 차원을 가지고 있다는 연구결과를 바탕으로,미세 조정 과정에서 가중치의 변화도 낮은 '내재적 랭크'를 가질 것이라고 가정했다.
    • 기존 미세 조정 과정:
      W_0는 사전 학습된 가중치임으로 대규묘 데이터로 학습된 가중치 행렬이다. 미세 조정 과정에서는 새로운 작업을 위해 새로운 시직을 더해주게 된다.
      ∆W는 미세 조정 과정에서 새롭게 학습되는 가중치의 변화량이다.
      미세 조정후 최종 가중치를 이렇게 표현할 수 있다 → W = W_0 + ∆W
    • LoRA:
      LoRA에서는 사전 학습된 가중치 W는 고정 (frozen) 상태로 유지하며 학습되지 않는다. 이 가중치에 추가적인 업데이트 ∆W를 더하는 대신 LoRA는 이 ∆W를 Low rank 행렬 B와 A로 표현한다.
      A와 B는 학습 가능한 행렬이며 미세 조정 중 학습된다.
      A (r x k)는 입력 벡터 x를 저차원 r로 압축한다. 큰 정보를 압축해서 핵심 정보만 표현하는 역할을 하는 거다. 정규 분포로 초기화된다.
      B (d x r)는 A의 저차원 정보를 다시 원래 차원으로 확장시켜 준다. 처음에는 0으로 초기화된다.

      Forward pass는 다음과 같이 수행된다.
      h = W0x + ∆W x = W0x + BAx    ←    ∆W 대신 BA로 나타내며, 가중치 행렬 ∆W를 직접 학습하는 것보다 파라미터 수가 훨씬 적기 때문에 메모리와 계산 효율성이 높아진다.
  • 실험 / 결과:
    • LoRA 방식을 언어 모델인 RoBERTa, DeBERTa, GPT-3에 적용하여 자연어 추론, 대화 요약, 질의응답 등 다양한 NLP 다운스트림 작업에서 실험했다.
      • 다운스트림 예제: WikiSQL (자연어 질문 → SQL 쿼리문 생성), MNLI-m (자연어 추론) SAMSum (대화 요약)
    • 비교 미세조정 방식:
      • FT (Full fine-tuning): 모든 파라미터 학습 (1750억 개의 파라미터)
      • BitFit: 편향 Bias 파라미터만 학습
      • PreEmbed: 학습 가능한 토큰을 입력 토큰과 추가하는 방법 (40~640만)
      • PreLayer: 각 transformer 레이어의 출력에 학습 가능한 임베딩을 추가 (510~7610만)
      • Adapter: 작은 신경망 모듈을 각 레이어에 추가 (710만-3억)
      • LoRA: 적게는 470만에서 6억 개의 파라미터를 학습
    • GPT-3 모델에 세 가지 다운스트림 작업 데이터셋을 적용해 실험한 결과, LoRA는 모든 데이터셋에서 베이스라인과 동등하거나 그 이상의 성능을 보였다.
      • BERT 모델들과 GPT-2 역시 베이스라인과 동등하거나 더 나은 성능을 보였다.

GPT-3 모델 학습 결과

 

 

  • 미래 연구 방향
    이 내용은 논문에서 저자들이 제시한 미래 연구 방향입니다. 최신 연구가 있을 수 있으니, 알고 계신 분은 댓글로 공유해 주세요!
    • 논문에서는 언어모델에만 집중했지만 저자들은 이 방법이 어떤 신경망에도 적용 가능하다고 언급했다. (실제로 저도 이미지 모델에서 사용 중이다.)
    • LoRA는 다른 미세 조정 방법들과 결합되어 상호 보완적으로 성능을 향상할 가능성이 있다고 한다.
    • 아직 작동 메커니즘이 완벽하게 밝혀지지 않은 상태라고 한다.
    • LoRA를 적용할 레이어들을 선택하는 데 있어 체계적으로 선택할 방법이 필요. 논문에서는 경험적 접근 (Heuristic)에 의존했다.

✏️ 개인적 노트

  • 다음 단계: (추가 읽기, 구현 계획 등)

✔️ LoRA와 다른 peft (Parameter-Efficient Fine-Tuning) 방식 비교해 보기 - Hugging Face PEFT 라이브러리 참고

✔️ LoRA(2021) 이후 PEFT와 관련한 최신 연구 동향을 조사해 보기

728x90
반응형