거대한 언어모델(Large Language Model, LLM)을 학습할 때, 우리는 한정적인 리소스로 최적의 모델을 학습해야 한다. 한 번 학습에 큰 비용이 들기 때문에 여러번 실험하기 어렵다. 공개된 문헌을 바탕을 연산량, 데이터 크기, 모델 크기의 관계에 대해 유추해볼 수 있다. 또한 LLM의 성능은 선형적으로 증가하지 않고 특정 크기를 넘을 때마다 큰 폭으로 증가하는데, 이것을 emergent ability라고 한다. 이것에 대한 내용도 정리해본다.
Scaling Law
2020년 OpenAI가 공개한 Scaling Laws for Neural Language Models의 내용을 정리해본다. 데이터 크기 D, 계산량 C, 모델크기(임베딩 제외) N이 주어질 때
- 성능은 모델의 형태(width, depth)보다는 크기에 의존한다.
- 성능은 다른 두 항목에 의해 병목 현상이 발생하지 않는 경우 세 가지 척도 요소 N, D, C 각각과 power-law를 가진다.
- N와 D를 같이 키우면 성능은 예측 가능하게 증가하지만, 한쪽을 고정하면 어느 시점에서 성능이 향상되지 않는다. → 큰 모델은 더 많은 데이터를 필요로 한다.
- 모델 크기에 임베딩 레이어를 포함하면, 모델 크기 증가에 따른 성능향상이 적어보인다. 임베딩 레이어를 모델 크기에서 빼면, 레이어 개수와 모델 크기에 따른 성능 향상이 하나의 트렌드를 보이는 것을 알 수 있다. → 실제로 임베딩 레이어가 모델에서 꽤 큰 크기를 차지하기 때문이다.
- 큰 모델은 작은 모델에 비해 동일한 성능에 더 적은 데이터로 도달한다. → 데이터 대비 학습 효과가 좋다(Test Loss 기준).
이러한 OpenAI의 결과를 요약해보면 컴퓨팅 예산을 고정할 때, 데이터를 더 확보하기보다는 모델을 더 키우는 쪽으로 가게되며.
모델 크기에 따른 필요 데이터 수는 아래와 같다. 1B 이하의 모델은 오버피팅을 최소화하기 위해 22B 이상의 토큰이 필요하다. 이 식으로 175B 모델에게 필요한 학습토큰을 계산해보니 1044B 토큰이 나온다.
이후에 나온 다른 연구결과들을 보자
Routed Language Model
DeepMind의 UNIFIED SCALING LAWS FOR ROUTED LANGUAGE MODELS 에 따르면 Mixture of Experts(MoE)와 같은 Routing Network는 experts의 수에 power-law를 따르지만 모델 크기가 아주 커지면 computational benefit이 감소한다. 자세히 보지 못했는데 MoE쪽은 따로 또 공부해야 할 듯…
Chincilla(2022)
2022년 DeepMind가 공개한 Chinchilla는 이전까지의 LLM들이 underfitting되었으며 동일 크기 모델을 학습하기 위해선 OpenAI가 제시한 것보다 훨씬 많은 데이터가 필요한 것을 보였다.
1B까진 20B로 동일한데, 175B 학습에 필요한 데이터는 OpenAI 공식의 3.7배임을 알 수 있다. 이를 이용해 Gopher 280B 학습에 필요한 연산량으로 4배 작은 67B 크기의 Chinchilla 모델을 1.4T 토큰에 학습했고, 수많은 task에서 Gopher 280B 대비 뛰어난 성능을 보였다.
이는 LLM 학습을 위해 어마어마한 양의 데이터가 필요함을 암시한다. 영어는 1토큰이 3–4 바이트, 한국어는 내 경험상 1토큰이 6–7바이트인데, 10B 모델을 학습하는 데에만 1TB 이상의 한국어 데이터가 필요하다는 의미이다. 2021년 하이퍼클로바 논문에서 공개된 한국어 데이터셋이 561.8B 토큰이고 학습한 가장 큰 모델은 82B였다.
왜 이런 차이가 발생했을까? OpenAI의 논문을 다시보면 10B 이상의 모델에서는 실험하지 않은 것으로 보인다. 학습 비용이 워낙 컸기 때문일 것이다. Chinchilla는 10B 크기에서도 실험을 진행했다.
얼마전 메타에서 공개한 LLaMA 역시 1.4T 토큰을 이용하여 7B, 13B, 33B, 62.5B를 학습했다. 1.4T 토큰으로 학습한 33B가 chinchilla를 뛰어넘는 성능을 보이기도 하는데, 실제로 LLM을 학습하는 데는 Chinchilla가 제안한 것보다 더 많은 토큰이 필요할 수도 있다.
Scale Efficiently: Insights from Pre-training and Fine-tuning Transformers
모델 크기를 키울 때, width와 depth 중 어떤 것을 얼마나 늘릴지 고민해야한다. OpenAI의 scaling law에는 width와 depth의 영향이 적다고 했으나, 구글은 위 논문에서는 여러 형태의 T5 모델을 학습하여 그 영향이 크게 존재함을 확인했다.
왜냐하면 OpenAI는 성능의 기준이 downstream task가 아닌 upstream quality(validation perplexity)로 측정했기 때문이다. 하지만 위 논문의 Table 3을 보면, 비슷한 크기의 비슷한 PPL을 가진 두 T5모델은 Downstream Task에서는 큰 성능차이를 보였다. 때문에 PPL을 성능지표로 완전히 신뢰하기에는 어려움이 있다고 한다.
We generally recommend a DeepNarrow strategy where the model’s depth is preferentially increased before considering any other forms of uniform scaling across other dimensions.
때문에 논문에서는 depth를 우선적으로 늘릴 것을 권장한다(DeepNarrow Strategy). 물론 여기서는 encoder-decoder 아키텍처인 T5로 실험했고, 크키도 수백B로 한 것이 아니다. Decoder-only 아키텍처에서는 어떨지 좀 더 찾아봐야겠다.
마냥 레이어를 키우는 것이 분명 좋은 것은 아니다. 레이어수가 100개가 넘을 정도로 지나치게 커지면 Residual connection이 있어도 Gradient Vanishing 현상이 발생한다는 것을 어디서 들었는데 기억이 안난다. Parallelism 관점에서도 레이어가 커지면 Tensor Parallelism의 효율이 감소한다.
Emergent Abilities of Large Language Models
그렇다면 모델 크기를 키웠을 때 모델 성능은 얼마나 좋아질까? LLM을 학습하는 이유는 특정 task에 대해 정확도와 같은 수치적 성능을 개선하는 것이 아닌. 사용자의 지시문을 따라 결과물을 생성해내거나, 학습하지 않은 task들을 수행해내기 때문이다(Zero-shot, Few-shot). 이러한 성능은 모델 크기에 선형적으로 증가하지 않고, 특정 크기를 기준으로 갑작스럽게 상승한다. 즉 Emergent Ability는 scale-law를 따르지 않고, 작은 모델에서는 발생하지 않는다.
Few shot
이 논문에선 모델 크기가 아닌 학습에 사용한 계산량에 초점을 뒀다. 예를 들어 Chinchilla 70B와 Gopher 280B는 모델 크기는 4배 차이나지만 학습 계산량은 동일하다.
논문에 보여진 퓨샷 성능인데, 특정 크기를 기점으로 확 상승하는 것을 볼 수 있다.
위는 하이퍼클로바 모델별 퓨샷 성능이다. 한국어 모델도 760M → 1.3B와 10B 사이즈 근처에서 갑작스럽게 성능이 큰 폭으로 향상됨을 볼 수 있다. 이러한 수치적 성능 외의 생성해내는 결과물에도 차이가 있다. 내가 GPT2를 학습하고 써보며 느꼈던 것은, 125M은 그럴듯한 단어를 이어붙여서 말을 지어내지만 논리가 엉성하고 문법구조가 잘 안맞는 모습을 보인다. 사용자의 지시문을 잘 따르지도 못한다. 350M을 학습하면 이 현상이 조금 덜해지지만 여전히 발생한다. 그러나 1B를 넘으면 갑작스레 이런 현상이 거의 사라지고 자세히 읽지 않으면 문제점을 찾기가 힘들 정도로 결과물이 좋아진다.
Augmented Prompting
Chain of Thought Prompt나 Instruction Tuning을 수행하면 LM의 성능이 향상된다. 이 또한 모델 크기에 선형적이지 않다.
Google의 FLAN 논문을 보면, 학습하지 않은 held-out task의 zero-shot성능은 8B를 넘는 순간 급격하게 향상된다.
아래 표를 보면 Task별로 emerging 하는 크기는 다르다.
최근에는 RLHF도 등장했고, Instruction Tuning도 계속 연구가 되고 있으므로, 위 표에 제시된 크기보다 더 작은 모델에서 emerging이 발생할지도 모르겠다. 확실한건 1B 이하는 안된다는 것인데, 사전학습까진 아니더라도 알려진 각종 테크닉을 이용하면 천만원이 넘지 않는 가격의 데스크톱에서 1B 이상의 모델을 파인튜닝은 할 수 있다. 오래걸리지만 ㅠ.
이걸 보니까 DeepSpeed 쓰고 LoRA로 학습하면 T0 3B도 RTX 3090 24GB로 학습할 수 있다.
얘네는 왜 외국어를 할까
가장 의문인 점 중 하나는 LLM이 영어뿐만 아니라 외국어를 이해하고 구사한다는 것이다. ChatGPT는 영어 말고 외국어도 굉장히 잘 한다. 언어마다 성능은 다르지만 이것이 굉장히 놀랍다. OpenAI CEO의 트윗을 봤는데 본인도 이유를 잘 모른다고 한다. 놀라운건 100B가 넘는 큰 모델이 아니어도 이 현상이 발생한다. 예를 들어 LLaMA 7B를 이용해 학습한 Alpaca의 경우, 한국어로 질문을 하면 이것을 이해하고 대답한다.
한가치 추측해볼 수 있는 건, 이들을 학습하는 web corpus에 외국어 강좌가 올라와있는 이런 사이트가 포함되어있고 이런 것들을 대규모로 학습하며 기억한다는 것이다. 연구해서 통계 내보면 재밌을 것 같은데, 수십 TB의 저 corpus를 분석하는건 쉽지 않을 것 같다.