AI/NLP

Meta의 LLaMA 2에 대해 알아보자

체봄 2023. 12. 24. 02:01

Meta에서 23년 7월 19일에 공개한 이후, 수많은 LLM들의 foundation model로 사용되고 있는 LLaMA 2에 대해 정리하려고 한다.

LLaMA 2 논문daewoo kim님의 블로그 를 참조하여 작성하였음을 밝힌다. 해당 블로그에 정리가 잘 되어 있어 도움을 많이 받았다.

(노션에 가볍게 정리하다가 꽤 길어져서 블로그에 옮기는 중. 티스토리에서 그림이 자꾸 깨진다ㅠ)

 

 

  • LLaMA 2 (23년 7월 공개)는 LLaMA 1 (23년 2월 공개)를 발전시킨 모델
    • self-supervised learning으로 학습
    • 사전학습 데이터 40% 증가 (1.4T tokens → 2T tokens)
    • Context length 2배 증가 (2K → 4K)
    • Grouped-query attention 사용
  • Foundation 버전과 fine-tuned Chat 버전 공개
  • 모델 크기: 7B, 13B, 70B (34B도 개발되었지만 아직 공개되지않음)
  • 성능 평가
    • open-source 모델과의 비교 => LLaMA 2가 가장 우수한 성능을 보였음
    • closed-source 모델과의 비교 => PaLM보다는 더 낫고 GPT-3.5와는 근접한 성능. but, GPT-4와 PaLM-2-L에는 크게 뒤쳐지는 성능

open-source 모델과의 비교
closed-source 모델과의 비교

  • Llama 2와 Llama-2-chat의 학습 과정

 

  • Chat 버전
    • Step 1: LLaMA 2를 supervised fine-tuning (SFT)
      • 처음에는 공개된 instruct 데이터로 SFT를 하였으나, 데이터의 다양성과 품질이 낮아 alignment가 어려움을 확인함
        → 적지만 고품질의 데이터(27k)를 수집함
        → 그 결과 성능이 향상되는 것을 확인

      • 학습 데이터는 Prompt - Response 로 구성됨
      • Prompt의 토큰들에 대한 loss를 0으로 만들고, Response의 토큰들에 대해서만 back-propagation을 진행

수집한 데이터 예시


    • Step 2: RLHF 적용
      1. Human preference 데이터 수집
        • Reward Modeling을 위해 데이터를 수집하는 과정
        • Annotator가 prompt를 작성 → 샘플링된 2개의 모델 응답 중에 선호하는 응답을 선택 → 선택한 응답에 대한 Preference annotation 수행 → Safety annotation 수행
          • Preference annotation 선택지
            • 1) significantly better
            • 2) better
            • 3) slightly better
            • 4) negligibly better/unsure
          • Preference annotation은 helpfulness와 safety 측면에 집중함
          • Safety annotation 선택지
            • 1) 선호하는 응답은 안전하지만 다른 응답은 안전하지 않음
            • 2) 두 응답 모두 안전
            • 3) 두 응답 모두 안전하지 않음
        • 기존 공개된 human preference 데이터와 비교했을 때, 새로 수집한 데이터는 평균적으로 더 길고 더 많은 turn 수를 가짐
      2. Reward Modeling
        • 수집한 human preference 데이터 (prompt - response)를 바탕으로, 생성된 응답의 점수를 (helpfulness & safetyness 측면에서) 매기는 reward model (RM)을 만듦
        • 이 RM을 통해, LLaMA2-chat 모델을 인간의 선호도에 최적화하였음
        • helpfulness와 safetyness가 trade-off 관계임을 발견 ⇒ 단일 RM을 helpfulness RM과 safety RM로 분리하여 학습 및 최적화
          • 각 RM은 fine-tuned LLaMA2-chat 모델의 checkpoint로 initialization되었음
            ⇒ RM이 LLaMA2-chat 모델이 아는 것을 알기 때문에, 정보 불일치로 인한 hallucination을 방지하는 효과가 있음
        • 성능 비교 결과
          • StreamSHP-XL (FLAN-T5-xl 기반), Open Assistant (DeBERTa-V3-large 기반 RM), GPT-4 (OpenAI’s API)와 비교하였을 때, LLaMA 2의 RM들이 가장 우수한 성능을 냄
          • 다만 GPT-4는 Reward Modeling task를 목표로 학습되지 않았음에도 우수한 성능을 보이더라
          • 정리: 두 개의 분리된 RM을 최적화하는 것이 Reward Modeling task를 단순화시키며, helpfulness와 safetyness 두 가지 목표 간의 잠재적인 긴장(tension)을 통해 성능 향상을 이룸
      3. Iterative Fine-tuning
        • human preference 데이터가 늘어남에 따라, RLHF 모델을 연속적인 버전으로 학습시킴 (RLHF-V1, …, RLHF-V5)
        • RLHF Iterative Fine-tuning에는 다음의 두가지 메인 알고리즘이 사용되었음
          • Proximal Policy Optimization (PPO)
            • Breadth 측면에서 차이점: 모델 출력을 1개 생성
            • Depth 측면에서 차이점: 학습 시, step t에서의 샘플은 step t-1에서 업데이트된 모델의 policy를 따름
          • Rejection Sampling fine-tuning
            • Rejection Sampling: 여러 샘플을 생성하고, 그 중에서 잘못된(= reward가 낮은) 샘플들을 걸러내고 거부하는 방법
            • 주어진 prompt에 대해 모델로부터 k개의 출력을 샘플링
              → RM을 통해 가장 좋은 샘플을 선택
              → 선택된 샘플들을 사용해 gradient를 업데이트하며 fine-tuning
            • Breadth 측면에서 차이점: 모델 출력을 k개 샘플링
            • Depth 측면에서 차이점: (새로운 데이터셋을 수집하기 위해) 모델의 initial policy에 따라 모든 출력을 샘플링
          • 모델을 iteratively 업데이트했기 때문에, 두 알고리즘 간 근본적 차이는 뚜렷하지 않음
        • RLHF-V4 모델까지는 Rejection Sampling fine-tuning만 사용, RLHF-V5 모델부터는 둘을 결합하여 사용 (Rejection Sampling fine-tuning checkpoint에다가 PPO를 적용한 후 다시 샘플링)
        • Rejection Sampling은 가장 큰 LLaMA-2-chat 70B 모델에서만 수행했음
          • 더 작은 모델들(7B, 13B, 34B)은 70B 모델에서 Rejection Sampling된 데이터에 대해 fine-tuning됨 ⇒ 큰 모델의 능력을 작은 모델로 distillation하는 효과
    • Ghost Attention (GAtt)
      • 초기 instruction을 까먹지 않고 multi-turn consistency를 향상시키기 위한 작업
      • 실제 Attention 메커니즘을 수정하는건 아님
      • 아래 그림 설명
        • 기존의 multi-turn 대화 데이터가 있음 (u1 - a1 - u2 - …)
        • 사람이 instruction의 템플릿을 만들고 llama2-chat이 템플릿의 slot을 채움
          • instruction 예시: (slot)처럼 말해줘. → 오바마처럼 말해줘.
        • instruction을 매번 user 발화 앞에 붙여넣고, 모델을 통해 새로운 응답(a’)을 생성
        • 첫번째 턴에서만 instruction을 유지하고, 나머지 턴에서는 instruction 제거
        • 이렇게 생성된 응답들은 대화 컨텍스트를 유지하지 못하기 때문에(context mismatch), 마지막 턴을 제외한 이전 턴들에서는 loss=0으로 설정하여 학습에 반영되지 않도록 함
        • 최종 효과: multi-turn 응답 생성 시에 초기 instruction에 거는 attention을 강화시킴

참고 링크:  https://www.youtube.com/watch?v=fwt0tgYtWUc

 

반응형