본문 바로가기
자연어 처리(NLP)/모델(Model)

LLaMA: Open and Efficient Foundation Language Models 정리

by Kaya_Alpha 2024. 6. 10.

1. Abstarct

  • 7B~65B 개의 Parameter로 구성된 LLM인 LLaMA를 공개함.
  • 누구나 사용할 수 있는 공개된 데이터셋을 이용하여 1T 개의 token으로 학습을 진행하였으며, 다양한 task에서 SOTA를 달성함.
    특히, LLaMA-13B 모델은 GPT-3(175B)와 비교하여 대부분의 benchmark 성능을 뛰어넘음.
  • 제시한 모델 중 가장 큰 모델인 LLaMA-65B은 Chinchilla-70B와 PaLM-540B와 경쟁력이 있음.

2. Introduction

엄청난 양의 텍스트로 학습된 Large Language Model(LLM)은 몇 개의 예제나 instruction으로부터 새로운 task를 수행하는 능력을 보여준다(Brown et al.,2020). 이러한 few-shot의 성질은 모델의 크기를 충분히 크게 한 경우에 발생한다는 것을 처음 발견하였으며, 그 결과로 모델의 크기를 더욱 키우는 방향으로 많은 연구가 진행되었다(모델의 크기가 커질수록 더욱 높은 성능을 발휘할 것이라고 가정). 하지만, Chinchilla(Hoffmann et al.,2022)의 연구에서는 단순히 모델의 크기를 키우는 것이 아닌 작은 모델에 더 많은 데이터를 학습시켰을 때 모델의 성능을 높일 수 있음을 보여주었으며, 이에 대한 근거로 Scaling law를 통해 model size와 dataset의 양의 상관관계를 보여주었습니다. 하지만 LLaMA 연구진들은 Chinchilla 연구에서 inference budget을 고려하지 않았기 때문에 거대한 크기의 model을 serving 할 때 매우 critical 하다고 주장합니다(왜냐하면 목표하는 성능을 가진 거대한 모델을 학습하는 것이 더 저렴할 수 있지만, 결과적으로는 더 오래 훈련된 작은 모델의 추론 비용이 더욱 저렴할 수 있기 때문). 실제 예시로 Chinchilla 연구진들은 10B크기의 모델에 200B의 토큰을 사용하는 것을 추천하였지만, LLaMA연구진들은 7B모델에 1T가 넘는 토큰을 학습시켰을 때도 성능이 오히려 향상되었다고 합니다. 따라서 LLaMA 연구진들은 다양항 inference budget에서 가능한 한 최고의 성능을 달성하는 모델을 만드는 것을 목표로 세웠습니다.

 

연구진들이 제안하는 모델은 LLaMA라고 부르는 모델로써, 7B-13B까지의 파라메터를 가진 모델로써, 당시 제안된 타 모델(GPT-3, PaLM-540B, Chinchilla 등)에 비해 더욱 성능이 향상된 모델입니다. 또한 LLaMA가 가지고 있는 차이점은 Publicly avaliable data를 활용하였다는 점입니다. GPT-3, PaLM, Chinchilla 등의 모델은 공개된 데이터도 사용하였지만, 공개되지 않은 데이터를 사용하여 pre-training 하였지만, LLaMA는 누구나 접근 가능한 데이터만을 사용하여 pre-training을 진행하였습니다.

 

[Summary]

  • 엄청난 양의 text로 학습된 Large Language Models(LLMs)는 몇개의 예제나 Instruction으로부터 새로운 task를 수행하는 능력을 보여줌(few-shot property)
  • 한 연구에서 모델의 크기를 충분히 크게 한 경우에 이러한 현상을 처음 발견하였으며, 그 결과로 모델의 크기를 더 키우는 쪽으로 많은 연구가 진행됨(모델의 크기가 커질수록 더욱 높은 성능을 낼 것이라고 가정)
  • 하지만, Chinchilla 연구진들은 단순히 모델의 크기를 키우는것이 아니라 작은 모델에 더 많은 데이터를 학습시켰을 때 모델의 성능을 높일 수 있음을 보여주었으며, 이에 대한 근거로 Scaling law를 통해 model size와 dataset의 양의 상관관계를 보여줌.
  • 하지만, 그들의 연구 또한 inference budget을 고려하지 않았음(거대한 크기의 model을 serving할때 매우 critial 함)
    -> 목표하는 성능을 가진 거대한 모델을 학습하는 것이 더 저렴할 수 있지만, 결과적으로는 더 오래 훈련된 작은 모델의 추론비용이 더욱 저렴하다.
  • [논문의 목적] 다양한 inference budget에서 가능한 한 최고의 성능을 달성하는 모델을 만드는 것.

3. Approach

이 챕터에서는 학습 방법에 대한 소개를 진행합니다. LLaMA는 이전 연구들과 비슷하며, Chinchilla의 scaling law에서 영감을 받았다고 합니다. 저자들은 대량의 텍스트를 standard optimizer를 이용하여 large transformers를 학습하였습니다.

3.1. Pre-training Data

LLaMA 모델 학습에는 다양한 도메인의 데이터를 사용하였으며, 이들 모두는 타 연구에서 사용한 데이터 중 공개적으로 사용할 수 있는 데이터입니다. 각 데이터는 일정 비율을 샘플링하여 사용하였으며 샘플링 비율은 아래 테이블과 같습니다. 테이블 중 Epochs가 의미하는 것은 학습에 사용된 전체 1.4T의 토큰 중 각 데이터셋이 실제로 학습에 얼마나 사용되었는지를 의미합니다.

Tokenizer는 BPE algorithm을 사용하였으며, 실제 구현에서는 Google의 SentencePiece에서 구현한 것을 이용하였습니다.

Pre-training data

3.2 Architecture

이번 챕터에서는 LLaMA 모델 구조에 대해 설명합니다. 기본적으로 LLaMA는 Transformer Architecture를 기반 모델입니다. 기존 Transformers와의 차이점은 타 연구에서 제안된 다양한 개선점을 활용하여 모델에 적용한 것입니다. 대표적으로는 Pre-normalization, SwiGLU activation function, Rotary Embedding이 있습니다.

  • Pre-normalization [GPT-3]
    Pre-normalization의 개념
    > Layer Normalization(정규화)은(는) 입력값을 표준화시켜주는 방법으로써 특정 layer는 이전 layer의 출력값에 영향을 크게 받게 되는데, 이렇게 되면 학습이 불안정해지고 optimal weight으로의 수렴이 느려질 수 있게 된다. 따라서 이러한 문제를 해결해 주기 위해서 각 layer마다 평균과 분산을 이용하여 정규화를 시켜주어 특정 범위 내의 값을 가질 수 있게 한다. layer normalization을 활용하면 학습의 안정성이 증가하며, 더욱 빠르게 수렴할 수 있게 됩니다.

    Layer-normalization은 layer를 통과하기 전에 정규화하는 pre-normalization과 layer를 통과한 이후 정규화하는 post-normalization으로 구분할 수 있다. Post-Normalization을 적용한 대표적인 모델로는 BERT를 예로 들 수 있다. Pre-Normalization와 Post-Normalization의 차이에 대해 연구한 On Layer Normalization in the Transformer Architecture에서는 Pore-Normalization이 더욱 빠르고 안정적으로 학습할 수 있다고 주장한다.

    LLaMA에서 Pre-normalization 적용
    > 학습의 안정성을 증가시키기 위해 사용하였습니다. LLaMA에서는 각 transformer의 sub-layer마다 output을 normalize 하지 않고 input을 normalize 하였습니다. Normalize 방법으로는 RMSNorm normalizing function을 적용하였습니다.

  • SwiGLU activation function [PaLM]
    SwiGLU의 개념
    > SwiGLU는 activation function의 한 종류로써 swish activation function와 GLU를 합쳐놓은 형태입니다.
    [1] Swish activation function
    Swish activation function은 \( Swish(x) = x\cdot \sigma(\beta x) \)로 정의됩니다. 
    [2] GLU
    LLaMA에서 SwiGLU 적용
    > PaLM에서도 동일하게 SwiGLU를 사용하였지만, LLaMA에서는 PaLM이 dimension을 \(4d\)로 사용한 것과는 다르게 \(\frac {2}{3}4d\)로 설정하여 사용하였습니다.
  • Rotary Embedding [GPTNeo]
    Rotary Embedding의 개념
    Rotary Embedding (RoPE, Rotary Positional Embeddings)는 변환기 모델에서 위치 정보를 효율적으로 표현하기 위한 방법입니다. 이 기법은 변환기 모델의 입력 토큰에 위치 정보를 주입하는 방식의 하나로, 기존의 절대적(sinusoidal embedding) 또는 상대적 위치 임베딩(Relative Position embedding) 기법과 달리, 토큰 간의 상대적인 위치 정보를 효과적으로 보존하면서도 계산 효율성을 높이는 특징이 있습니다.
    LLaMA에서 Rotary Embedding 적용 
    LLaMA에서는 Transformer에서 사용되었던 Absolute Positional Embedding 대신 ROPE를 적용하였습니다. ROPE는 네트워크의 각 layer마다 추가하여 사용하였습니다.(β1 = 0.9, β2 = 0.95)

3.3 Optimizer

  • Optimizer : AdamW optimizer를 사용하였으며, hyperparameter로 \( \beta_{1} = 0.9, \beta_{2} = 0.95 \)를 사용하였습니다.
  • Scheduler : cosine learning rate schedule을 사용하였으며, 마지막 lr은 최대 lr의 10%가 되도록 설정하였습니다.
  • weight decay는 0.1로 설정하였으며, gradient clipping은 1.0으로 설정하였습니다. 또한 warmup step은 2000으로 설정하였습니다.

3.4. Efficient implementation

모델의 학습 속도를 향상하기 위해 3가지 방법을 사용하였습니다.

[방법 1] First, we use an efficient implementation of the causal multi-head attention to reduce memory usage and runtime. (우선, 메모리 사용량과 runtime을 줄이기 위해 효율적인 casual multi-head attention을 사용하였습니다)

>> LLaMA에서는 python의  xformer 라이브러리를 사용하였다고 합니다. 이 방법을 사용하면 attention weight를 저장하지 않으며 key/query score를 계산하지 않고 attention연산이 가능하다고 합니다.(구제적인 설명은 Facebook의 xformers를 참고하세요!)

 

[방법 2] To further improve training efficiency, we reduced the amount of activations that are recomputed during the backward pass with checkpointing. (학습 효율을 개선하기 위해, checkpointing을 사용하여 backward pass(역전파) 중에 다시 계산되는 activation의 양을 줄였습니다)

>> checkpoint를 사용하기 때문에, outpur layer와 같이 계산비용이 많이 드는 activation을 다시 계산하지 않아도 됩니다. 이는 PyTorch autograd에 의존하지 않고 트랜스포머 레이어의 역전파 함수를 수동으로 구현함으로써 달성되었습니다. 하지만 이 방법은 메모리의 사용량이 증가하기 때문에, 모델 병렬화와 시퀀스 병렬화(sequence parallelism)를 사용하여 메모리 사용량을 줄였습니다. 메모리를 줄이는 방법은 'Reducing Activation Recomputation in Large Transformer Models'에서 소개한 방법입니다.

 

[방법 3] Moreover, we also overlap the computation of activations and the communication between GPUs over the network (due to all_reduce operations) as much as possible.(또한, 네트워크를 통한 GPU들 사이의 통신과 activation 계산이 가능한 한 겹쳐지도록 하였습니다)

>> 이렇게 하면, 활성화 함수를 계산하는 동안 GPU 간의 통신도 병렬로 수행되어 전체 학습 시간을 줄일 수 있습니다.

8. Summary

Meta AI는 LLaMA(Large Language Model Accelerating)라는 대규모 언어모델 시리즈를 발표했습니다. 7억에서 650억 개의 파라미터로 구성된 이 모델들은 공개된 데이터셋만을 사용하여 최대 1.4조 개의 토큰으로 훈련되었습니다.


LLaMA의 주요 특징은 다음과 같습니다.

첫째, 성능이 우수합니다. 130억 파라미터의 LLaMA-13B 모델이 GPT-3을 능가했으며, 650억 파라미터의 LLaMA-65B는 Chinchilla-70B, PaLM-540B 등 최고 수준 모델과 대등한 성능을 보였습니다. 다양한 벤치마크에서 높은 성능을 냈는데, 질의응답, 코딩, 수학, 독해 등에서 경쟁력 있는 결과를 얻었습니다.

 

둘째, 지시문 미세조정으로도 좋은 성과를 거두었습니다. 간단한 지시문 조정만으로도 MMLU 벤치마크에서 기존 모델을 능가하는 68.9%의 정확도를 달성했습니다. 

셋째, 오직 공개된 데이터만 사용했다는 점입니다. 기존 모델들이 독점 데이터를 활용한 것과 달리, LLaMA는 CommonCrawl, C4, GitHub, 위키백과, 책, 아카이브 등 공개 데이터만으로 학습되어 향후 오픈소스 가능성이 있습니다.

그러나 LLaMA도 편향성, 독성 발언, 허위 정보 생성 등의 문제가 있는 것으로 드러났습니다. 실제 벤치마크를 통해 성차별, 종교 편향 등의 문제가 발견되었고, 독성 발언 점수도 모델 크기가 커질수록 높아지는 경향을 보였습니다. 또한 TruthfulQA 벤치마크에서는 정확한 답변 비율이 57%에 그쳐 허위 정보 생성 위험이 있음을 시사했습니다.