귀퉁이 서재
논문 리뷰 - Large Language Models: A Survey 톺아보기 본문
LLM의 역사와 현재를 개괄할 수 있는 굉장히 도움 되는 논문인 Large Language Models: A Survey를 상세히 톺아보았습니다. 단순히 모델이나 성능 나열이 아니라, 통계적 언어 모델을 시작으로 LLM이 어떻게 발전해 왔는지, 어떤 기법들이 적용이 되었는지, LLM은 어떤 프로세스로 훈련이 되는지 등 꽤 상세하게 소개하는 논문이죠. LLM을 조망하는 데 꽤나 유용한 논문이라고 생각해 자세히 살펴봤습니다. 어떤 개념을 조망하는 데에는 Survey 논문이 제법 도움 되는 것 같습니다.
단순한 번역을 넘어서 추가적인 개념 설명이나 비유적인 설명까지 곁들였습니다. 각 모델이나 기법, 개념 등에서 중요한 부분이나 정의에 해당하는 내용은 볼드체를 해두었고요. reference를 제외한 본문만 37페이지로 이루어진 논문이에요. 내용이 어지간히 많습니다. 그렇다보니 다 보는 데 시간이 좀 걸렸지만, 다 읽고 나니 LLM의 전체 흐름이 체계적으로 정리됐습니다. 나중에 다시 읽어볼 요량으로 자세히 정리해봤습니다.
I. 서론 (INTRODUCTION)
언어 모델링은 오랜 역사를 가진 연구 주제에요. 그 기원은 1950년대 섀넌(Shannon)이 정보 이론을 인간 언어에 적용했던 시절까지 거슬러 올라가죠. 그 이후로, 통계적 언어 모델링은 음성 인식이나 기계 번역에서부터 정보 검색에 이르기까지 여러 자연어 처리 작업의 기초가 되었습니다. 최근에는 방대한 텍스트로 사전 훈련된 트랜스포머 기반의 대규모 언어 모델(LLMs)이 발전하면서 언어 모델의 능력이 비약적으로 좋아졌습니다. 예를 들어, OpenAI의 ChatGPT는 단순한 자연어 처리뿐만 아니라, 범용적인 문제도 해결할 수 있죠. 이러한 발전으로 인해, LLM은 이제 범용 AI 에이전트나 인공 일반 지능(Artificial General Intelligence, AGI) 개발의 핵심적인 구성 요소(building block)가 되어가고 있습니다.
최근 LLM 분야는 굉장히 빠르게 움직이고 있습니다. 새로운 연구 결과, 새로운 모델, 새로운 기술들이 몇 달, 심지어 몇 주 만에 발표가 될 정도죠. 상황이 이렇다 보니 AI 연구자나 실무자들은 자신의 과제에 맞는 LLM 기반 AI 시스템을 구축하기 위한 최고의 '레시피'를 찾는 데 어려움을 겪고 있습니다. 이를 위해 이 논문에서는 LLM의 발전 사항에 대한 종합적인 고찰을 합니다. 즉, LLM의 역사와 동향을 깔끔하게 정리해주는 '가이드북' 역할을 하겠다는 의미입니다.
LLM은 ① 신경망에 기반을 둔, ② 대규모의, ③ 사전 훈련된, ④ 통계적 언어 모델입니다. 최근 LLM이 비약적으로 성과를 내는 이유는 지난 수십 년에 걸친 언어 모델 연구 덕분이죠. 이 발전 과정을 총 네 가지 물결로 구분해볼 수 있습니다. 바로 통계적 언어 모델, 신경망 언어 모델, 사전 훈련된 언어 모델, 그리고 LLM입니다. 하나씩 알아보겠습니다.
[첫 번째 물결] 통계적 언어 모델 (Statistical Language Models, SLMs)
자, 그럼 네 가지 물결 중 첫 번째인 통계적 언어 모델(Statistical Language Models, SLMs)에 대해 알아보겠습니다. SLM은 텍스트를 '단어들의 시퀀스'로 간주합니다. SLM의 대표적인 형태는 n-gram 모델로 알려진 마르코프 체인 모델(Markov chain models)입니다.
n-gram 모델이란?
n-gram은 '연속된 n개의 단어 묶음'을 의미해요. 예를 들어 '3-gram' 모델은 '나는 학교에'라는 2개의 단어(n-1)를 보고, 그다음에 '간다'라는 단어(n번째)가 올 확률을 통계적으로 계산하는 방식이죠. 섀넌은 이런 간단한 모델로도 언어의 통계적 패턴을 파악할 수 있다는 것을 보여주었습니다.
n-gram 모델은 바로 직전의 'n-1'개 단어를 바탕으로 다음에 올 단어의 확률을 예측하죠. 단어 확률은 텍스트 말뭉치에서 수집한 단어(혹은 n-gram)의 '빈도수(count)'를 사용해 추정합니다. 그렇기 때문에 통계적 언어 모델에서는 '데이터 희소성(data sparsity)' 문제가 발생합니다. 데이터 희소성 문제란, 훈련 데이터에서 한 번도 본 적 없는 단어나 n-gram에 대해 확률을 0으로 할당하는 문제를 말해요. 데이터 희소성 문제를 해결하기 위해 당시 임시방편으로 '스무딩(smoothing)'이라는 기법을 사용했었습니다. 스무딩은 훈련 데이터에 없는 단어(혹은 n-gram)에도 아주 작은 확률을 부여하는 방법입니다. 즉, 모델의 확률 일부를 아직 보지 못한 n-gram을 위해 남겨두는 방식이죠. n-gram 모델을 '단어 카드놀이'에 비유해볼 수 있습니다. 예컨대 '나는', '학교에', '간다'라는 카드가 있다고 합시다. '나는', '학교에', '간다'라는 말이 차례로 등장하면 이 조합의 확률은 쉽게 계산할 수 있습니다. 그런데 애초에 존재하지 않는 '나는', '도서관에'라는 조합이 나오면, 모델은 다음에 무슨 카드가 나올지 전혀 예측할 수 없게 되죠(데이터 희소성 문제). '스무딩'은 이때를 대비해 조커 카드를 몇 장 빼놓는 것과 비슷하지만, 모든 새로운 상황에 대처하기에는 역부족입니다.
여러 자연어 처리 작업에 n-gram 모델을 활용해왔지만, 데이터 희소성 문제 때문에 자연어를 완벽하게 처리하지는 못했습니다. 스무딩 기법을 통해 임시방편으로 개선하긴 했지만 본질적인 문제를 해결하진 못했죠.
[두 번째 물결] 초기 신경망 언어 모델(Early Neural Language Models, NLMs)
통계 모델의 '데이터 희소성' 문제를 해결하기 위해 등장한 두 번째 물결은 초기 신경망 언어 모델입니다. 초기 신경망 언어 모델들은 단어들을 저차원의 연속적인 벡터(low-dimensional continuous vectors), 즉 '임베딩 벡터(embedding vectors)'로 매핑해서 데이터 희소성 문제를 해결했습니다. 그리고 이 모델들은 신경망을 사용하여, 이전 단어들의 임베딩 벡터들을 종합하여 다음 단어를 예측했죠. 신경망 언어 모델이 학습한 임베딩 벡터는 '은닉 공간(hidden space)'을 형성합니다. 이 은닉 공간에서는 임베딩 벡터들 간의 의미적 유사도를 그들의 '거리'로 쉽게 계산할 수 있습니다. 임베딩 벡터가 만드는 '은닉 공간'은 '의미의 지도'에 비유할 수 있어요. 이 지도 위에서 '왕'과 '남자'의 관계는 '여왕'과 '여자'의 관계와 비슷하게 표현됩니다. NLM은 바로 이 '의미의 지도'를 만드는 법을 배운 것이고, 덕분에 단어의 의미를 훨씬 더 깊이 있게 이해할 수 있게 된 거죠. 이러한 발전은, 입력의 형태나 언어, 심지어는 데이터의 종류에 관계없이, 어떤 두 입력 사이에 의미가 얼마나 비슷한지를 측정할 수 있는 길을 열어주었습니다.
그런데 초기 신경망 언어 모델은 '특정 작업에만 특화된(task-specific)' 모델이었습니다. 즉, 특정 작업에 맞는 데이터로 훈련되었고, 그 결과로 학습된 '은닉 공간(hidden space)' 역시 그 특정 작업에만 맞춰져 있었습니다. 다시 말해, 초기 NLM은 '한 가지 일만 잘하는 전문가'였고, 이 때문에 새로운 작업을 할 때마다 모델을 처음부터 다시 만들어야 하는 한계가 있었습니다.
[세 번째 물결] 사전 훈련된 언어 모델(Pre-trained Language Models, PLMs)
초기 신경망 언어 모델이 task-specific하다는 한계를 극복한 세 번째 물결은 사전 훈련된 언어 모델(Pre-trained Language Models, PLMs)입니다. 초기 신경망 언어 모델(NLM)과 달리, 사전 훈련된 언어 모델(PLM)은 '특정 작업에 구애받지 않습니다(task-agnostic)'.
PLM의 핵심은 '사전 훈련과 파인튜닝(pre-training and fine-tuning)'에 있습니다. 이 방식에서는, 순환 신경망(RNN)이나 트랜스포머 같은 언어 모델을 먼저 레이블이 없는(unlabeled) 방대한 텍스트 코퍼스를 가지고 단어 예측과 같은 일반적인 작업을 할 수 있도록 '사전 훈련'시킵니다. 그 후, 이 PLM을 레이블이 있는(labeled) 소량의 특정 작업용 데이터를 사용하여 해당 작업에 맞게 '파인튜닝'합니다. 비유하자면, 의대생들이 배우는 '범용 기초 교육'과 '전공 심화 교육'으로 비유할 수 있어요. '사전 훈련'은 의대생이 모든 과목의 기초를 배우는 과정과 같고(범용적), '파인튜닝'은 그 의대생이 나중에 '안과'나 '정형외과'처럼 특정 분야의 전문의가 되기 위해 추가 수련을 받는 것과 같죠.
[네 번째 물결] 거대 언어 모델(Large Language Models, LLM)
네 번째 물결은 거대 언어 모델(LLM)입니다. LLM은 주로 수백억에서 수천억 개의 파라미터를 가진 트랜스포머 기반의 신경망 언어 모델을 의미합니다. 그 유명한 PaLM, LLaMA, GPT-4들이 여기에 해당하죠. LLM은 방대한 텍스트 데이터로 사전 훈련이 된 모델입니다. 이전의 사전 훈련 모델(PLM)과 비교했을 때, LLM은 단순히 모델 크기가 훨씬 더 클 뿐만 아니라, 더 강력한 언어 이해 및 언어 생성 능력을 갖고 있습니다. 그리고 더 중요한 점은, 작은 규모의 언어 모델에서는 나타나지 않았던 '창발적 능력(emergent abilities)'을 보인다는 것입니다. 창발적 능력이란 이전에 없던 완전히 새로운 능력을 일컫습니다. 정리하면, LLM과 기존의 PLM의 핵심적인 차이점은 두 가지입니다. 첫째는 '규모(scale)'의 차이, 둘째는 그 규모 덕분에 나타나는 질적인 변화, 즉 '창발적 능력'입니다. 마치 물의 온도가 임계점을 넘으면 얼음이 되는 것처럼, 모델의 크기가 임계점을 넘으면서 이전에는 없던 새로운 능력이 나타난다는 의미죠.
LLM만이 가진 특별한 능력, 즉 '창발적 능력'에는 구체적으로 어떤 것들이 있는지 살펴보죠. 창발적 능력은 크게 세 가지로 나뉩니다.
- 문맥 내 학습 (in-context learning): LLM이 추론 시점(inference time)에 프롬프트에 제시된 몇 가지 예시만 보고도 새로운 작업을 학습하는 능력입니다. 마치 처음 보는 보드게임을 할 때, 친구가 몇 판 시범을 보여주는 것만 보고도 바로 규칙을 배워서 게임을 할 수 있게 되는 것과 같아요. 모델을 따로 훈련시킬 필요 없이, 프롬프트 안에서 즉석으로 학습이 일어나는 거죠.
- 지시 따르기 (instruction following): '지시 튜닝(instruction tuning)'을 거친 LLM이, 별도의 예시 없이도 새로운 유형의 작업에 대한 지시를 따를 수 있는 능력입니다(지시 튜닝이 무엇인지에 대해서는 3장 F절에서 다룹니다). 예시가 없어도 사람이 내리는 명령 그 자체를 이해하고 수행하는 능력을 말하죠.
- 다단계 추론 (multi-step reasoning): LLM이 복잡한 작업을 중간 추론 단계로 나누어 해결하는 능력입니다. 수학 문제를 풀 때, 답만 바로 내놓는 것이 아니라 풀이 과정을 스스로 생각해서 답을 찾아가는 능력을 말해요.
또한 LLM은 외부 도구를 사용하여 '증강(augmented)'될 수 있습니다. 이를 통해 LLM은 사용자 및 환경과 상호작용할 수 있게 됩니다. 뿐만 아니라, 상호작용을 통해 수집한 피드백 데이터를 바탕으로 지속적으로 스스로를 개선할 수도 있죠. 그 대표적인 예시가 바로 '인간 피드백 기반 강화학습(RLHF)'입니다. 이러한 증강 기술을 통해, LLM은 소위 'AI 에이전트(AI agents)'로 발전할 수 있습니다. AI 에이전트란, 환경을 감지하고, 결정을 내리고, 행동을 취하는 인공적인 실체를 말합니다. 과거 연구에서는 특정 작업이나 영역에 국한된 에이전트를 개발하는 데 집중해왔습니다. 하지만 LLM이 보여준 '창발적 능력' 덕분에, 이제는 LLM을 기반으로 한 '범용 AI 에이전트'를 구축하는 것이 가능해졌지요. 이러한 내용에 대해서는 4장에서 자세히 다룰 겁니다.
II. 거대 언어 모델 (LARGE LANGUAGE MODELS)
LLM에 대해 살펴보기 전에 먼저 LLM의 기반이 되는 초기 사전 훈련 신경망 언어 모델부터 알아보겠습니다. 그런 다음 3대 LLM 계열인 GPT, LLaMA, PaLM에 대해 자세히 알아보겠습니다.
A. 초기 사전 훈련 신경망 언어 모델 (Early Pre-trained Neural Language Models)
트랜스포머가 등장하기 이전 시대의 역사를 먼저 요약해보겠습니다. 여러 선구자들에 의해 신경망 기반의 언어 모델이 등장했어요. 그중 벤지오(Bengio) 연구팀은 기존의 n-gram 모델에 버금가는 성능을 보인 최초의 신경망 언어 모델(NLM)을 개발했습니다. 그 후, 다른 연구를 통해 NLM이 기계 번역에 성공적으로 적용되기도 했죠. NLM이 본격적으로 대중화된 계기는 미콜로프(Mikolov)가 RNNLM이라는 오픈소스 NLM 툴킷을 공개하면서부터였습니다. 이후, 순환 신경망(RNN)과 여러 변형 모델들(가령, 장단기 메모리(LSTM)와 게이트 순환 유닛(GRU))에 기반한 NLM들이 기계 번역, 텍스트 생성, 텍스트 분류 등 다양한 자연어 처리 분야에서 널리 사용되었습니다. 즉, 초기 사전 훈련 신경망 언어 모델의 대표 주자가 바로 RNN, LSTM, GRU였던 거죠.
그 이후, NLM 발전의 또 다른 이정표가 된 아키텍처, 즉 트랜스포머(Transformer)가 개발되었습니다. 트랜스포머는 문서 내 모든 단어에 대해, 각 단어가 다른 단어에 미치는 영향을 모델링하는 '어텐션 점수(attention score)'를 병렬로 계산합니다. 셀프-어텐션이라는 기법을 통해서 말이죠. 이러한 방식 덕분에 이전의 RNN보다 병렬화(parallelization)를 더 효율적으로 할 수 있게 됐습니다. 그래서 GPU에서 대규모 데이터를 바탕으로 거대 언어 모델을 효율적으로 사전 훈련(pre-train)하는 것이 가능해졌죠. 이렇게 사전 훈련한 언어 모델(PLM)들은 이후 많은 하위 작업(downstream tasks)에 맞게 파인튜닝(fine-tuned)될 수 있었고요.
자, 그럼 트랜스포머 기반의 초기 사전 훈련 모델(PLM)에는 어떤 종류가 있는지 알아보겠습니다. 이 초기 모델들은 신경망 구조에 따라 크게 세 가지로 나뉩니다. 바로 Encoder-only, Decoder-only, 그리고 Encoder-Decoder 모델입니다.
1) Encoder-only PLMs
세 가지 카테고리 중 첫 번째인 Encoder-only 모델에 대해 알아보겠습니다. 이름에서 알 수 있듯이, Encoder-only 모델은 오직 인코더(encoder) 네트워크로만 구성되어 있습니다. 이 모델들은 애초에 '언어 이해(language understanding)' 작업을 위해 만들어졌습니다. 예를 들어, 입력 텍스트를 토대로 클래스 레이블을 예측해야 하는 텍스트 분류(text classification)와 같은 작업들이 여기에 해당해요. Encoder-only은 '언어 이해 전문가', '요약 전문가' 등으로 비유할 수 있습니다.
대표적인 Encoder-only 모델로는 BERT가 있으며, BERT의 변형 모델인 ROBERTA, ALBERT, DeBERTa, XLM 등도 있습니다. 이 모델들이 각각 어떤 특징을 가졌는지 간략히 살펴보죠.
BERT
Encoder-only 모델의 대표 주자는 그 유명한 BERT입니다. BERT는 'Bidirectional Encoder Representations from Transformers'의 약자로, 가장 널리 사용되는 Encoder-only 언어 모델 중 하나에요. BERT는 크게 세 가지 모듈로 이루어져 있습니다.
- 임베딩 모듈: 입력 텍스트를 컴퓨터가 이해할 수 있는 숫자 배열, 즉 임베딩 벡터 시퀀스(sequence of embedding vectors)로 변환하는 모듈입니다.
- 트랜스포머 인코더: BERT의 핵심 엔진으로, '임베딩 벡터(embedding vectors)'를 '문맥 표현 벡터(contextual representation vectors)'로 변환하는 여러 계층의 트랜스포머 인코더입니다.
- 완전 연결 계층: 최종 계층에 있는 '표현 벡터(representation vectors)'를 우리가 원하는 출력 형태(예: 원-핫 벡터)로 변환하는 부분입니다.
이러한 BERT를 사전 훈련하는 방식은 마스크 언어 모델링(Masked Language Modeling, MLM)과 다음 문장 예측(Next Senteces Prediction, NSP)입니다. '마스크 언어 모델링'은 문장 중간중간에 빈칸을 뚫어놓고(마스킹을 해두고), 앞뒤 문맥을 보고 그 빈칸을 채우도록 훈련하는 방식입니다. '다음 문장 예측'은 두 문장이 논리적으로 연결되는지 계속 판단하며 다음 문장을 예측하는 방식입니다. 이렇게 사전 훈련한 BERT 모델에 분류기 계층(classifier layer)을 추가해 파인튜닝하면, 텍스트 분류, 질의응답, 언어 추론에 이르는 다양한 언어 이해 작업을 수행할 수 있습니다.
RoBERTa
BERT의 성공에 영감을 받아 탄생한 첫 번째 후속 모델은 바로 RoBERTa(로버타)입니다. RoBERTa는 기존의 BERT 구조는 그대로 두고, 훈련 방식과 모델 설계 전략을 변경해 성능을 극한으로 끌어올린 모델입니다. BERT의 '다음 문장 예측(NSP)'가 오히려 모델 성능을 해칠 수 있다고 판단해 과감히 제거하고, 그 외 세부적인 부분을 조정해 BERT의 성능을 뛰어넘었습니다. 모델의 구조뿐만 아니라 '어떻게 훈련시키느냐'가 성능에 얼마나 중요한지를 보여준 사례입니다.
ALBERT
ALBERT는 '파라미터 감소 기법'을 적용해, 모델의 크기를 줄이고 훈련 속도를 늘리는 데 집중한 모델입니다. 파라미터 감소 기법으로는 두 가지가 있습니다. 첫 번째 기법은 임베딩 행렬을 두 개의 더 작은 행렬로 나누는 것입니다. 두 번째 기법은 여러 그룹으로 나뉜 반복적인 레이어(계층)를 사용하는 것입니다. BERT라는 큰 모델을 경량화해 효율성을 도모한 모델이라고 볼 수 있죠.
DeBERTa
DeBERTa(디버타)는 'Decoding-enhanced BERT with Disentangled Attention(분리된 어텐션을 사용한 디코딩 강화 BERT)'의 약자입니다. DeBERTa는 두 가지 기술을 이용해 BERT와 RoBERTa 모델을 개선한 모델입니다. 첫 번째 기술은 '분리된 어텐션 메커니즘(disentangled attention mechanism)'입니다. 이 방식에서는 각 단어를 '내용(content)을 인코딩하는 벡터'와 '위치(position)를 인코딩하는 벡터', 이렇게 두 개의 벡터를 사용하여 표현합니다. 단어의 '내용'과 '위치'가 담고 있는 정보가 다르다고 보고, 이 둘을 분리해서 처리하는 메커니즘입니다. 이를 통해 단어들 간 관계를 더 정교하게 파악하려고 한 거죠. 마치 우리가 사람을 평가할 때, 그 사람의 '말의 내용'과 '말하는 순서(맥락)'를 분리해서 생각하는 것과 같아요. BERT는 이 둘을 한데 섞어서 평가했다면, DeBERTa는 '내용은 내용대로', '위치는 위치대로' 따로 점수를 매긴 뒤 합산하여 더 정교하게 관계를 파악하는 것입니다. 두 번째 기술은 '향상된 마스크 디코더(enhanced mask decoder)'입니다. 이것은 모델 사전 훈련 시 마스크된 토큰을 예측하기 위해, 디코딩 레이어에 절대적인 위치 정보를 통합하여 사용하는 것입니다. 가령, MLM 훈련(빈칸 채우기)을 할 때, 빈칸 주변 단어들의 상대적인 관계뿐만 아니라, '이 빈칸이 문장 전체에서 몇 번째 자리에 있는가?'라는 절대적인 위치 정보까지 함께 고려하여 정답을 더 정확하게 맞히도록 돕는 기법인 거죠. 마지막으로, DeBERTa는 파인튜닝(fine-tuning) 단계에서 모델의 일반화 성능을 높이기 위해 '가상 적대적 훈련(virtual adversarial training)'이라는 새로운 기법도 사용했습니다. 모델에게 일부러 약간의 '노이즈'나 '가짜 데이터'를 보여주며 훈련시키는 방식이에요. 이런 '어려운 문제'들을 풀어보게 함으로써, 모델이 실제 세상의 다양하고 예측 불가능한 데이터에 더 잘 대처할 수 있도록 '맷집'을 길러주는 훈련법입니다.
ELECTRA
ELECTRA(일렉트라)는 '대체 토큰 탐지(Replaced Token Detection, RTD)'라는 새로운 사전 훈련 방식을 사용해 효율성을 극대화한 모델입니다. RTD는 일부 단어를 그럴듯한 '가짜 단어'로 바꿔치기 한 뒤, 모델이 어떤 단어가 가짜인지를 찾아내도록 하는 방식입니다. 구체적으로 말하면, 입력을 마스킹하는 대신, 작은 '생성자(generator)' 신경망이 만든 그럴듯한 대체 단어로 일부 토큰을 바꿔치기하여 입력을 손상(corrupts)시킵니다. 그 후, ELECTRA는 손상된 토큰의 원래 단어를 예측하는 대신, '판별자(discriminative)' 모델을 훈련시켜 손상된 입력의 각 토큰이 생성자에 의해 대체된 것인지 아닌지를 예측하도록 합니다.
XLM
XLM은 BERT를 다국어 환경으로 확장한 모델입니다. 이를 위해 두 가지 방법을 사용했죠. '단일 언어 데이터(monolingual data)만 사용하는 비지도 학습(unsupervised) 방식'과 번역 문장 쌍, 즉 '병렬 데이터(parallel data)를 사용하는 지도 학습(supervised) 방식'입니다. XLM은 제안되었을 당시, 교차 언어 분류, 비지도 및 지도 기계 번역에서 최고 수준의(state-of-the-art) 결과를 얻었습니다.
2) Decoder-only PLMs
이해 전문가인 Decoder-only 계열에 대한 설명을 마치고, 다음 카테고리인 Decoder-only PLM으로 넘어가겠습니다. Decoder-only PLM은 생성 전문가라고 보면 됩니다. 가장 널리 사용하는 Decoder-only PLM 두 가지는 OpenAI가 개발한 GPT-1과 GPT-2입니다. 이 모델들은 이후에 등장할 더 강력한 LLM, 즉 GPT-3와 GPT-4의 기반이 되었죠. 하나씩 알아봅시다.
GPT-1
GPT-1은 Decoder-only 트랜스포머 모델입니다. 레이블이 없는(unlabeled) 대규모 텍스트 데이터를 이용해 자기-지도 학습(self-supervised learning) 방식으로 '생성형 사전 훈련(Generative Pre-Training)'을 한 뒤, 특정 하위 작업(downstream task)에 대해 (훨씬 적은 데이터로) 파인튜닝을 한 모델이죠. '사전 훈련 후 파인튜닝' 패러다임이 Decoder-only 모델에서도 아주 효과적이라는 사실을 처음으로 증명한 모델이 바로 GPT-1입니다. 이러한 훈련 방식이 광범위한 자연어 처리 작업에서 좋은 성능을 얻을 수 있다는 사실을 증명한 거죠. 이때 사용한 자기-지도 학습 방식은 '다음 단어 예측'이었습니다. GPT-1은 이후의 GPT 모델의 기반이 되었죠.
GPT-2
GPT-1에 이어 GPT-2가 등장했습니다. GPT-2는 수백만 개의 웹페이지로 구성된 매우 큰 WebText 데이터셋으로 훈련시켰을 때, 별도의 파인튜닝 없이도 언어 모델이 특정 자연어 처리 작업을 수행할 수 있다는 점을 보여준 모델입니다.
3) Encoder-Decoder PLMs
초기 사전 훈련 모델의 마지막 카테고리인 Encoder-Decoder PLM에 대해 알아보겠습니다. Encoder-Decoder PLM은 '이해 전문가'인 Decoder-only 모델과 '생성 전문가'인 Decoder-only 모델을 모두 사용해 '하나의 텍스트 시퀀스를 다른 텍스트 시퀀스로 변환(sequence-to-sequence)'하는 작업에 활용되는 통합 모델(unified model)입니다. 따라서 인코더-디코더 언어 모델은 설계상 언어 이해와 언어 생성 작업을 모두 수행할 수 있는 통합 모델입니다. 사실, 거의 모든 자연어 처리(NLP) 작업은 '하나의 텍스트 시퀀스를 다른 텍스트 시퀀스로 변환하는(sequence-to-sequence)' 작업이라고 볼 수 있어요. 이처럼 모든 NLP 작업을 sequence-to-sequence로 정의하면, 인코더가 입력을 이해하고 디코더가 출력을 생성하는 이 구조 하나로 모든 것을 해결할 수 있습니다.
대표적인 인코더-디코더 PLM으로는 T5, mT5, MASS, BART가 있습니다. 하나씩 간략히 살펴보죠.
T5
T5는 'Text-to-Text Transfer Transformer'의 약자로, 모든 자연어 처리(NLP) 작업을 '텍스트-투-텍스트' 작업으로 통일시킨 모델입니다. mT5는 T5의 다국어(multilingual) 버전으로, 101개 언어로 구성된 데이터셋으로 사전 훈련되었습니다. T5는 '만능 요리사'에 비유할 수 있습니다. 이 요리사는 '번역해줘', '요약해줘', '문법 고쳐줘' 와 같이, 어떤 요리 주문(작업)이 들어오든, 주문서(입력된 명령어)를 보고 요리(출력 텍스트)를 내놓는 단 하나의 방식으로 모든 것을 해결합니다. 그리고 mT5는 이 만능 요리사가 전 세계 101개국의 요리법까지 마스터한 버전이라고 할 수 있죠.
MASS
MASS는 'Masked Sequence to Sequence pre-training(마스크된 시퀀스-투-시퀀스 사전 훈련)'의 약자입니다. 이 모델의 훈련 방식은 이렇습니다. 먼저, 문장에서 연속된 여러 토큰으로 이루어진 조각(fragment)을 무작위로 마스킹합니다. 인코더는 '이렇게 마스킹된 조각을 포함하는 문장'을 입력으로 받고, 디코더는 '마스킹된 조각'이 무엇이었는지를 예측합니다. 인코더-디코더 프레임워크를 활용해, 문장의 나머지 부분을 보고 문장의 특정 조각(fragment)을 복원하도록 훈련한 거죠. 이러한 방식을 통해, MASS의 인코더는 언어 임베딩(언어 이해)을, 디코더는 언어 생성 능력을 동시에 훈련할 수 있었습니다.
여기서 잠깐!
Encoder-only 모델인 BERT도 마스크 언어 모델링(Masked Language Modeling, MLM) 방식으로 사전 훈련되었다고 했죠? 그런데 BERT는 단어 하나씩 마스킹해 사전 훈련했다면, MASS는 연속된 단어 덩어리를 통째로 마스킹한 채 사전 훈련을 했다는 차이가 있습니다.
BART
BART는 임의의 '노이즈 함수(noising function)'로 텍스트를 손상시킨 뒤, 원본 텍스트를 복원하는 방식으로 사전 훈련한 모델입니다. 단어 순서를 뒤죽박죽 섞거나, 일부 단어를 지우거나, 아무 상관없는 단어를 중간에 끼워 넣는 등 아주 다양한 방식으로 텍스트를 손상시킨 뒤 복원하도록 한 거죠.
B. 거대 언어 모델 계열(Large Language Model Families)
지금까지 LLM의 직계 조상이라고 할 수 있는 초기 사전 훈련 모델(Early Pre-trained Models)에 대해 알아보았습니다. '이해 전문가'인 Encoder-only 모델(BERT, RoBERTa, ALBERT, DeBERTa, ELECTRA, XLM), '생성 전문가'인 Decoder-only 모델(GPT-1, GPT-2), 그리고 둘을 합친 '통합 전문가'인 Encoder-Decoder 모델(T5, mT5, MASS, BART)에 대해 간략히 살펴봤습니다. 이제 앞선 초기 모델들의 아이디어를 이어받아, 모델의 규모를 대폭 키운 거대 언어 모델 계열으로 넘어가보겠습니다.
거대 언어 모델(LLM)이란 수백억에서 수천억 개의 파라미터를 가진, 트랜스포머 기반의 사전 훈련 언어 모델을 일컫습니다. LLM은 이전의 언어 모델과 비교했을 때, 단순히 모델 크기가 훨씬 더 크다는 차이점만 있는 것이 아닙니다. 언어 이해나 언어 생성 능력이 훨씬 더 강력해졌습니다. 그리고 가장 중요한 차이점은 창발적 능력(emergent abilities)을 보인다는 점입니다. 창발적 능력을 소규모 언어 모델에서는 나타나지 않던 능력이죠.
대표적인 LLM 계열인 GPT, LLaMA, PaLM에 대해 소개하겠습니다.
1) GPT 계열
GPT는 'Generative Pre-trained Transformers(생성형 사전 훈련 트랜스포머)'의 약자로, 텍스트 생성에 특화된 모델입니다. 이 모델은 OpenAI가 개발했으며, 우리가 앞서 배운 세 가지 구조 중 'Decoder-only 구조'를 기반으로 하고 있습니다. '생성 전문가'이기 때문이죠. 초기 모델인 GPT-1과 GPT-2는 오픈 소스였지만, GPT-3와 GPT-4 같은 최신 모델들은 기술을 공개하지 않는 클로즈 소스(close-source)입니다. 그래서 최신 GPT 모델을 사용하려면 API를 통해서만 접근이 가능합니다. GPT-1과 GPT-2는 앞서 이미 설명했으니 GPT-3부터 알아보겠습니다.
GPT-3 (진정한 LLM의 시작)
GPT-3는 1,750억 개의 파라미터를 가진 사전 훈련된 자기회귀(autoregressive) 언어 모델입니다. GPT-3는 진정한 의미의 첫 LLM으로 인정받고 있습니다. 이전의 언어 모델들보다 훨씬 거대할 뿐만 아니라, 작은 모델에서는 관찰되지 않았던 '창발적 능력(emergent abilities)'을 처음으로 선보였기 때문이죠. GPT-3가 보여준 가장 대표적인 창발적 능력은 바로 '문맥 내 학습(in-context learning)'입니다. 문맥 내 학습이란 무엇인지 앞서 이미 설명했죠? 다시 한번 말하자면, 모델의 가중치를 직접 업데이트하는 파인튜닝(fine-tuning) 없이도, 단순히 프롬프트에 몇 가지 예시('few-shot demonstrations')를 텍스트로 보여주는 것만으로 모델이 새로운 작업(downstream tasks)을 수행할 수 있다는 뜻입니다. 순전히 사용자가 텍스트로 몇 가지 예시만 줬을 뿐인데도 문맥 속에서 학습을 해 새로운 능력을 발휘하는 것이죠. 이러한 능력 덕분에 GPT-3는 번역이나 질의응답 같은 전통적인 NLP 작업뿐만 아니라, 단어 순서 맞추기, 새로운 문장 만들기, 덧셈 연산 같은 여러 작업에서도 강력한 성능을 보였습니다. 아래 그림은 프롬프트로 제시한 예시 개수가 늘어남에 따라 GPT-3의 성능이 어떻게 향상되는지를 보여주는 그림입니다. 파라미터가 많을수록, 그리고 예시 개수가 많을수록 정확도가 높아지네요.

CODEX (코딩 전문가)
다음으로 논문은 GPT-3의 후손 격인 CODEX(코덱스)에 대해 알아봅시다. CODEX는 코드를 짜주는 모델이라고 보면 됩니다. 사람이 자연어로 어떤 코드를 짜달라고 명령하면 그에 맞는 코드를 생성해주죠. CODEX는 GPT-3를 파인튜닝해서 코딩을 잘하도록 만든 모델입니다. 즉, 범용적인 언어 능력을 가진 GPT-3에게 깃허브(GitHub)에서 수집한 방대한 양의 코드 데이터를 추가로 학습시켜 '코딩 전문가'로 만든 것이죠.
WebGPT (웹 서핑 전문가)
다음 모델은 GPT-3의 또 다른 후손인 WebGPT입니다. 텍스트 기반의 웹 브라우저를 사용해서, 사용자의 개방형 질문(open-ended questions)에 맞는 답변을 하도록 미세 조정된 모델이죠. 즉, WebGPT는 스스로 웹 서핑을 하고 정보를 찾아서 답변을 생성하는 능력을 갖춘 거죠. WebGPT는 세 단계에 걸쳐 훈련됩니다.
- 모방 학습: 처음에는 WebGPT가 아무것도 모릅니다. 그러니 '사람은 실제로 어떻게 웹 서핑을 통해 정보를 알아내는지'를 WebGPT가 배웁니다. '아, 저런 질문에는 저런 사이트에 접속해서 이런 정보를 찾아오는 거구나!' 하고 인간의 웹 브라우징 행동을 그대로 모방하는 방법을 배우는 것이죠.
- 보상 모델링: 이제 WebGPT가 어설프게나마 답변 생성을 하게 됩니다. WebGPT가 생성한 여러 답변을 보고 사람이 직접 어떤 답변이 더 좋은지 순위를 매깁니다. 그러면 모델은 이 평가 데이터를 모아서, '인간이 선호하는 답변이 무엇인지'를 예측하는 보상 모델을 학습하게 됩니다.
- 강화학습 및 거부 샘플링: 마지막으로 WebGPT는 2단계에서 만든 보상 모델로부터 '점수'를 받으면서, 가장 높은 점수를 받는 답변을 생성하도록 스스로를 계속해서 개선해나갑니다. 이것이 바로 강화학습(reinforcement learning)입니다. 이 과정을 통해 인간의 선호도에 더 잘 맞는 답변을 생성하게 되는 거죠. 더불어 거부 샘플링(rejection sampling) 기법도 적용합니다. 거부 샘플링은 보상 모델이 매긴 점수가 높은 답변만 선택하고 나머지는 버리는(reject) 방식입니다. 이 과정을 통해 답변의 품질을 더 확실하게 높이는 것입니다.
InstructGPT (인간의 지시를 따르도록 훈련된 모델)
InstructGPT는 다방면의 질문에 대해 사용자의 의도(user intent)에 맞게 응답하도록 훈련된 모델입니다. 예컨대, '이력서를 쓰는 방법을 알려주세요!'라고 질문을 했는데, 답변이 '워드 파일에 작성하면 됩니다.'라면 어떨까요? 사용자의 의도를 이해하지 못한 답변이겠죠? 단순히 답변을 생성하는 것을 넘어, '사람이 정말로 원하는 답변'을 하도록 파인튜닝된 모델이죠.
InstructGPT를 훈련하기 위해, OpenAI의 API를 통해 수집한 실제 사용자들의 프롬프트와 전문적인 데이터 레이블러(labeler)가 직접 작성한 프롬프트를 준비합니다. 이어서 데이터 레이블러들이 직접 '이런 프롬프트에는 이런 답변이 바람직하다'는 예시 데이터를 만듭니다. 이 데이터를 활용해 GPT-3는 1차적으로 파인튜닝합니다. 그다음 단계가 핵심인데요, 모델이 생성한 여러 답변에 대해 사람이 직접 선호도 순위를 매깁니다. 이 선호도 데이터를 이용해, 강화학습(reinforcement learning)을 통해 모델을 다시 한번 파인튜닝합니다. 이 훈련 기법이 바로 그 유명한 RLHF(Reinforcement Learning from Human Feedback, 인간 피드백 기반 강화학습)입니다.
이렇게 훈련된 InstructGPT 모델은, 공개된 NLP 데이터셋에서의 성능은 약간 떨어졌지만 진실함은 높아지고, 유해성은 줄어드는 등 전반적으로 인간의 의도에 더 잘 부합하는 성능을 보여주었습니다.
ChatGPT와 GPT-4 (LLM의 새로운 시대)
자, 이제 InstructGPT의 아이디어를 이어받아 LLM 개발의 가장 중요한 이정표가 된 모델, 바로 ChatGPT(Chat Generative Pre-trained Transformer)에 대해 알아보겠습니다. ChatGPT는 2022년 11월 30일에 출시된 모델로 사용자가 대화를 통해 질의응답, 정보 탐색, 텍스트 요약 등 아주 광범위한 작업을 할 수 있게 해주는 챗봇입니다. ChatGPT는 InstructGPT의 형제 모델(sibling model)인 GPT-3.5를 기반으로 만들어졌어요. InstructGPT처럼 프롬프트의 지시를 따르고 상세한 응답을 제공하도록 훈련되었죠. 즉, InstructGPT에서 증명된 RLHF 기술을 대화형 챗봇에 적용하여, 누구나 쉽게 사용할 수 있도록 만든 것입니다.
그리고 2023년 3월에는 그다음 버전인 GPT-4가 출시됩니다. GPT-4의 가장 큰 특징은 멀티모달(multi-modal) LLM이라는 점이에요. 기존 모델들처럼 텍스트만 입력받는 것이 아니라, 이미지와 텍스트를 함께 입력받아 텍스트 결과물을 생성할 수 있게 되었다는 말입니다. GPT-4가 일부 현실 세계 문제에서는 인간보다 능력이 부족하지만, 다양한 전문직 시험이나 학술 시험에서는 인간 수준의 성능을 보여주었습니다. 예를 들어, 모의 변호사 시험에서 상위 10%에 해당하는 점수로 합격하는 놀라운 결과를 보여주었죠. 아래 그림을 보시죠. 여러 학술 시험 또는 전문직 시험에서 GPT-4가 얼마나 높은 점수를 달성했는지를 보여줍니다. 몇몇 시험에서는 100점에 가까운 점수를 보였죠.

GPT-4 역시 이전 모델들처럼 대규모 텍스트 데이터로 사전 훈련된 후, 인간의 의도에 부합하는 답변을 하도록 RLHF로 파인튜닝되었습니다.
2) LLaMA 계열
이것으로 GPT 계열에 관한 긴 설명을 마칩니다. 자, 그럼 다음으로 LLaMA 계열에 대해 알아보도록 하죠. LLaMA는 메타(Meta)에서 공개한 파운데이션 언어 모델들의 모음(collection of foundation language models)입니다. LLaMA가 GPT 계열과 비교되는 가장 중요한 특징은 바로 오픈 소스(open-source)라는 점입니다. 논문에 따르면, LLaMA 모델들은 GPT와 달리 모델의 가중치(weights)를 모두 공개했습니다. 상업적으로만 사용하지 않으면 이들을 가져다가 쓸 수 있죠. 이러한 개방성 덕분에, LLaMA 계열은 아주 빠르게 성장할 수 있었어요. 많은 연구자들이 LLaMA 모델을 활용하여, GPT 성능에 버금가는 오픈 소스 LLM을 개발하게 된 것이죠.
LLaMA
2023년 2월에 처음 공개된 LLaMA 모델들은 70억(7B) 개부터 650억(65B) 개까지 다양한 크기의 파라미터로 구성되었습니다. 이 모델들은 공개적인 데이터셋에서 수집된 수조 개의 토큰으로 사전 훈련되었죠. LLaMA는 기본적으로 GPT-3의 트랜스포머 구조를 따르되, 몇 가지 구조를 개선했습니다.
- 활성화 함수 변경: 기존의 ReLU 함수 대신 SwiGLU 활성화 함수를 사용했습니다.
- 위치 임베딩 변경: 절대적인 위치 임베딩(absolute opsitional embedding) 대신, 단어의 상대적인 위치 관계를 더 잘 파악할 수 있는 회전식 위치 임베딩(rotary positional embeddings)을 사용했습니다.
- 정규화 방식 변경: 일반적인 레이어 정규화(layer-normalizaion) 대신 RMSNorm(Root-Mean-Squared Layer-Normalization)을 사용했습니다.
이러한 개선 덕분에, 오픈 소스인 LLaMA-13B(130억 파라미터) 모델은 비공개 모델인 GPT-3(1750억 파라미터)보다 훨씬 작음에도 불구하고 대부분의 벤치마크에서 더 뛰어난 성능을 보여주었습니다.
LLaMA-2와 파생 모델들
2023년 7월, 메타는 마이크로소프트와 협력하여 LLaMA-2 컬렉션을 출시했습니다. LLaMA-2 컬렉션에는 파운데이션 언어 모델인 LLaMA-2와, 대화형으로 파인튜닝한 LLaMA-2 Chat이 포함되어 있죠. LLaMA-2 Chat 모델은 공개된 벤치마크에서 다른 오픈 소스 모델들을 능가하는 우수한 성능을 보여주었어요.
LLaMA-2 Chat의 훈련 과정은 이렇습니다.
- 사전 훈련: 먼저, 공개된 온라인 데이터를 이용해 LLaMA-2 파운데이션 모델을 사전 훈련합니다.
- 지도 학습 기반의 파인튜닝: 그 후, 지도 학습 방식의 파인튜닝(supervised fine-tuning)을 통해 초기 버전의 Chat 모델을 만듭니다. 지도 학습 방식으로 파인튜닝을 하기 때문에 '이런 질문에는 이렇게 답하는 게 좋아'라는 정답지를 보여주며 학습시킵니다.
- RLHF, 거부 샘플링, PPO: 마지막으로, RLHF(인간 피드백 기반 강화학습), 거부 샘플링(rejection sampling), 그리고 PPO(Proximal Policy Optimization; 근사 정책 최적화)와 같은 기술들을 적용해 모델을 반복적으로 개선합니다.
PPO(Proximal Policy Optimizaion)란?
강화학습에서 정책(policy)을 안정적이고 효율적으로 업데이트하기 Policy Gradient 알고리즘입니다. 정책을 한 번에 너무 크게 바꾸지 않으면서도 학습 효율을 유지하는 방법이라고 보면 됩니다. 비유를 들어 쉽게 설명하면, 강아지에게 새로운 훈련을 시킬 때, 너무 급하게 다그치면 강아지가 스트레스를 받고 오히려 훈련을 망칠 수 있죠? PPO는 모델이 RLHF를 통해 새로운 것을 배울 때, 기존에 잘하던 것들을 잊어버리거나 엉뚱한 방향으로 너무 멀리 가지 않도록 '보폭'을 조절해주는 역할을 합니다.
아래 그림은 앞서 설명한 LLaMA-2의 세 가지 훈련 과정을 보여주는 그림입니다.

Alpaca
이제 LLaMA를 기반으로 탄생한 첫 번째 유명한 파생 모델, Alpaca(알파카)에 대해 알아보겠습니다. Alpaca는 LLaMA-7B(70억 파라미터) 모델을 기반으로 합니다. 이 모델의 가장 큰 특징은 적은 비용으로도 높은 성능을 낼 수 있다는 사실을 증명했다는 점이에요. Alpaca는 'self-instruct'라는 방식으로 파인튜닝되었습니다. 구체적으로 말하면 GPT-3.5를 이용해 생성한 52,000개의 지시 따르기(instruction-following) 예시 데이터로 파인튜닝이 되었어요. 즉, 더 똑똑한 모델(GPT-3.5)에게 '교사(선생님)' 역할을 맡겨 훈련 데이터를 대량으로 만들어낸 뒤, 그 데이터로 LLaMA를 학습시킨 거죠.
self-instruct란?
모델이 스스로 학습용 지시·응답 쌍(instruction–response pairs) 데이터를 생성해내는 데이터 생성 기법을 뜻합니다. 즉, 사람이 일일이 질문과 답변을 작성하는 대신, 성능이 좋은 모델을 '교사 모델(teacher model)'로 삼아 새로운 학습 데이터를 자동으로 만드는 방식입니다. 이러한 데이터를 전부 사람이 만들면 시간과 비용이 너무 많이 들겠죠? 그래서 self-Instruct 방식이 등장했습니다.
self-Instruct의 절차는 이렇습니다. 먼저 시드(seed) 데이터를 준비합니다. 시드 데이터란 사람이 만든 소규모의 고품질 지시·응답 쌍 데이터를 일컫습니다. → 이어서 성능이 좋은 교사 모델(가령 GPT-3.5)에게 시드 데이터를 보여주고, '이런 형식으로 새로운 지시문을 만들어줘'라고 요청합니다. → 생성된 각 지시문에 대해 다시 교사 모델이 응답을 작성하게 합니다. → 중복되거나 무의미한 지시·응답 쌍 데이터는 제거합니다. → 이렇게 만든 대규모 지시·응답 쌍 데이터를 바탕으로, 성능이 낮은 모델(가령 LLaMA)을 지도 학습하는 것입니다.
놀랍게도, Alpaca는 훨씬 작은 모델임에도 불구하고 자체 평가에서 GPT-3.5와 유사한 성능을 보였습니다. 이 결과는 학계 연구자들에게 적은 예산으로도 충분히 강력한 LLM을 만들 수 있다는 희망을 주었죠. 정리하면, LLaMA-2 Chat은 인간의 피드백까지 동원하는 등 복잡하게 여러 단계를 거쳐 훈련되었지만, Alpaca는 GPT-3.5를 활용해 self-instruct 방식으로 훈련하여, 훨씬 적은 비용으로도 강력한 성능을 낼 수 있었습니다. LLM이 LLM을 가르치는 시대의 시작을 알린 중요한 사례입니다.
Vicuna
다음 모델은 Vicuna-13B(비쿠냐)입니다. 이름에서 알 수 있듯이 130억(13B) 개의 파라미터를 가진 챗봇 모델이죠. Vicuna의 가장 큰 특징은 훈련 데이터의 출처입니다. Alpaca는 'GPT-3.5를 통해 인공적으로 생성한 데이터를 이용해 LLaMA를 파인튜닝한' 모델이었죠? 그에 반해 Vicuna는 ShareGPT라는 웹사이트에서 수집한, '사람들이 실제로 나눈 대화 데이터'를 사용하여 LLaMA를 파인튜닝한 모델입니다. 더 현실적이고 자연스러운 대화 데이터를 학습한 셈이죠.
Vicuna 연구팀은 흥미로운 방식으로 Vicuna-13B의 성능을 평가했습니다. 바로 GPT-4를 '심판'으로 삼아 다른 모델들과 대결시킨 거죠. 이 예비 평가에서 Vicuna-13B는 OpenAI의 ChatGPT나 구글 Bard의 90% 이상에 달하는 성능을 보여주었으며, LLaMA나 Alpaca 같은 다른 모델들보다는 90% 이상의 경우에서 더 뛰어난 성능을 보였다고 합니다. Vicuna-13B의 또 다른 장점은 훈련에 필요한 비용이 상당히 낮다는 점입니다. 논문에 따르면 이 강력한 모델을 훈련시키는 데 든 비용이 단돈 300달러(약 40만 원)에 불과했다고 합니다. 이는 Alpaca와 마찬가지로, 적은 비용으로도 고품질의 챗봇을 만들 수 있다는 것을 다시 한번 증명한 사례입니다.
Guanaco
다음으로 살펴볼 Guanaco(구아나코)입니다. Guanaco 모델 역시 Alpaca나 Vicuna처럼, LLaMA를 기반으로 '지시 따르기(instruction-following)' 데이터를 사용해 파인튜닝한 모델입니다. 하지만 Guanaco의 가장 큰 특징이자 혁신적인 점은 'QLoRA(Quantized Low-Rank Adapter)'라는 기법을 이용해 아주 효율적인 파인튜닝을 했다는 점입니다.
QLoRA란?
LLM을 매우 적은 자원(리소스)으로 효율적으로 파인튜닝할 수 있게 만든 기법입니다. 핵심은 '4비트 양자화(quantization)'와 'LoRA(Low-Rank Adapter)'를 결합해, 메모리 사용량과 연산량을 크게 줄이면서도 성능 저하를 최소화하는 것입니다. 4비트 양자화는 원래 16비트나 32비트 부동소수점으로 저장된 LLM의 가중치를 4비트 정밀도로 압축하는 방식입니다. 이렇게 하면 모델 크기가 약 4분의 1 이하로 줄어들어 GPU 메모리 사용량이 대폭 감소합니다. 양자화된 가중치는 '동결(frozen)' 상태로 두어 학습 중 변경하지 않습니다. LoRA(Low-Rank Adapter)는 모델 전체를 학습시키지 않고, 저차원 행렬만 추가로 붙여서 그 부분만 학습하는 방식입니다. 그러면 학습해야 할 파라미터 개수가 대폭 줄어들어 매우 효율적입니다. QLoRA가 어떻게 작동하는지 간단히 설명해 드릴게요. QLoRA는 먼저 거대한 사전 훈련 모델의 가중치를 '4비트 양자화'라는 기술로 '동결시킵니다(frozen)'. 그런 다음, 아주 작은 크기의 LoRA라는 가중치 행렬만 집중적으로 학습시킵니다. 전체 모델을 다 훈련하는 게 아니라, 작은 부품만 갈아 끼우는 것처럼 효율적으로 튜닝하는 거죠.
이 기술 덕분에, 이전에는 수많은 고성능 GPU가 필요했던 650억(65B) 파라미터짜리 거대 모델의 파인튜닝이, 단 하나의 48GB GPU에서도 가능해졌습니다. LLM 튜닝의 효율성을 획기적으로 높인 사건이었죠. 이렇게 효율적인데도 성능 또한 좋았습니다. 성능이 가장 좋은 Guanaco 모델은 이전에 출시된 대부분 모델의 성능을 능가했으며, 단 하나의 GPU로 24시간만 파인튜닝했음에도 ChatGPT 성능의 99.3% 수준에 도달했다고 합니다.
Koala
다음 모델은 Koala(코알라)입니다. 이 모델 역시 LLaMA를 기반으로 한 '지시 따르기(instruction-following)' 모델입니다. Koala의 가장 큰 특징은 훈련 데이터의 '품질'에 집중했다는 점입니다. Koala는 특히 'ChatGPT 같은 고품질 챗봇과 사용자가 나눈 실제 대화 데이터'를 집중적으로 학습했습니다. 이는 '양보다 질' 전략이라고 할 수 있어요. 아주 많은 양의 데이터를 사용하는 대신, 품질이 좋은 '정제된' 대화 데이터를 학습시켜 모델의 성능을 끌어올리려는 시도였죠. 마치 평범한 책 100권을 읽는 것보다, 전문가가 쓴 최고의 명저 1권을 깊이 있게 읽는 것과 비슷합니다. 그 결과, Koala-13B 모델은 당시 최고 수준의 챗봇들과 경쟁할 만한 성능을 보여주었습니다.
Mistral
다음 모델은 Mistral-7B(미스트랄)입니다. 이 모델은 70억(7B) 개의 파라미터를 가진 모델로, 뛰어난 성능과 효율성을 위해 설계되었습니다. Mistral-7B는 성능이 가장 좋은 오픈 소스 13B 모델(즉, LLaMA-2-13B)보다 모든 벤치마크 평가에서 더 뛰어난 성능을 보여주었습니다. 심지어 수학, 코드 생성, 추론 능력에서는 LLaMA-34B(340억 파라미터) 모델보다도 우수했죠. 파라미터가 훨씬 더 적은데도 불구하고 말이죠. 이렇게 파라미터가 적은데 성능이 좋은 이유는 두 가지 핵심 기술 덕분입니다.
- 그룹-쿼리 어텐션(grouped-query attention): 그룹-쿼리 어텐션은 기존의 멀티-헤드 어텐션(Multi-head attention)의 속도를 개선하면서도 성능 저하를 최소화하기 위해 고안된 어텐션 방식입니다. 멀티-헤드 어텐션에서는 모든 쿼리(query)가 자신만의 키(key)와 값(value) 쌍을 갖습니다. 그래서 정확하고 정교하게 정보를 처리할 수 있지요. 그런데 그만큼 모델의 추론 속도가 느립니다. 그룹-쿼리 어텐션은 여러 개의 쿼리 헤드를 그룹으로 묶고, 그룹별로 하나의 키와 값을 공유하게 만든 방식입니다. 그러므로 훨씬 효율적이죠.
- 슬라이딩 윈도우 어텐션(sliding window attention): 이 어텐션 기법 역시 더 적은 추론 비용으로 아주 긴 시퀀스(문장)도 효과적으로 처리할 수 있게 해주는 기술입니다. 트랜스포머 모델이 전체 데이터(즉, 긴 문장 전체)를 한꺼번에 보는 대신, 일정한 크기의 윈도우(window)를 정해 그 안의 데이터에만 집중하는 방식입니다.
이 두 가지 핵심 기술 덕분에 Mistral-7B는 '작지만 강한' 모델로 자리매김할 수 있었어요.
미스트랄은 왜 동물 이름으로 작명하지 않았나?
참고로 라마, 알파카, 비쿠냐 등은 모두 라마 계열의 동물 이름인데, 미스트랄은 그렇지 않습니다. 미스트랄은 프랑스 스타트업에서 만든 모델이라 라마 계통의 작명을 하지 않은 것입니다.
LLaMA 계열의 확장
이 외에도 LLaMA 계열을 확장한 모델은 더 많습니다. LLaMA 또는 LLaMA-2를 기반으로 만들어진 수많은 '지시 따르기(instruction-following)' 모델들이 등장한 것이죠. 예컨대, Code LLaMA, Gorilla, Giraffe, Vigogne, Tulu 65B, Long LLaMA, Stable Beluga2 등이 있습니다. 이 모델들은 단지 몇 가지 예시에 불과합니다. 이 모델들은 각각 특정 목적을 가지고 LLaMA를 개선한 것들이에요. 예를 들어 Code LLaMA는 이름처럼 '코드 생성'에 특화되었고, Gorilla는 '외부 도구(API) 사용' 능력에, Long LLaMA나 Giraffe는 '더 긴 문맥(context)을 이해'하는 능력에 집중하는 등 각자의 전문 분야를 가지고 있습니다.
이것으로 LLM의 '민주화'를 이끈 LLaMA 계열에 대한 설명을 모두 마쳤습니다. LLaMA는 오픈 소스라는 강력한 무기를 바탕으로, LLaMA-2로 발전을 했고, Alpaca, Vicuna, Guanaco, Mistral 등 수많은 후속 모델들의 탄생을 이끌며 거대한 생태계를 구축했다는 점이 핵심이었습니다.
3) PaLM 계열
자, 마지막 세 번째 계열은 구글(Google)이 개발한 PaLM(팜) 계열입니다. PaLM은 'Pathways Language Model'의 약자이죠. 2022년 4월에 처음 발표된 첫 PaLM 모델은 5400억(540) 개라는 엄청난 파라미터를 가진 트랜스포머 기반의 LLM입니다. 이 거대한 모델은 7800억 개의 토큰으로 이루어진 대규모 고품질 텍스트로 사전 훈련되었습니다. PaLM의 훈련에는 구글의 AI 전용 시스템인 'Pathways(패스웨이즈)'와 6144개의 TPU v4 칩이 사용되었습니다. PaLM은 '모델을 크게 만들수록 성능이 계속 좋아진다'는 '스케일링의 이점(benefits of scaling)'을 명확히 보여주었어요. 특히 PaLM-540B 모델은 여러 단계의 추론이 필요한 다단계 추론 작업(multi-step reasoning tasks)에서, 별도로 파인튜닝된 전문가 모델들을 능가하는 성능을 보였습니다. 심지어 아주 어려운 벤치마크인 BIG-bench에서는 인간과 동등한 수준의 성능을 기록하기도 했습니다.
이제부터 PaLM의 후속 모델들에 대해 살펴보겠습니다.
U-PaLM과 Flan-PaLM
PaLM의 후속 모델로는 먼저 U-PaLM이 있습니다. U-PaLM은 기존 PaLM 모델을 'UL2R'이라는 효율적인 방식으로 추가 훈련시킨 모델입니다. 이 방식을 통해 계산 비용을 2배 가까이 절약하며 성능을 높일 수 있었죠.
UL2R란?
UL2R은 'Unifying Language Learning by Retrofitting'의 약자로, 이미 훈련이 끝난 거대 모델을 아주 효율적으로 '보수 교육'시키는 방법이라고 할 수 있습니다. 이미 대학을 졸업한 똑똑한 인재(사전 훈련된 PaLM)를 회사에 뽑았다고 해보죠. 이 인재에게 처음부터 모든 것을 다시 가르치는 것은 비효율적일 겁니다. 대신, 우리 회사 실무에 꼭 필요한 몇 가지 새로운 방식으로 짧고 굵게 추가 교육을 시키는 거예요. UL2R은 바로 이 '실무 투입 전 최종 교육'과 같은 역할을 해서, 적은 비용으로도 모델의 성능을 한 단계 더 끌어올려 주는 기법입니다.
그리고 이 U-PaLM을 '지시 파인튜닝하여(instruction-finetuned)' 탄생한 모델이 바로 그 유명한 Flan-PaLM(플란-팜)입니다. Flan-PaLM이 이전의 다른 지시 파인튜닝 모델들과 달랐던 점은 바로 '규모'입니다. 훨씬 더 많은 수의 작업(tasks), 더 큰 모델 크기(size), 그리고 '생각의 연쇄(chain-of-thought)' 데이터를 활용하여 파인튜닝을 한 것이죠. 그 결과, Flan-PaLM은 이전의 지시 따르기 모델들을 압도했습니다. 이를테면, 1,800개가 넘는 작업으로 지시 파인튜닝된 Flan-PaLM-540B 모델은 기존 PaLM-540B 모델보다 평균 9.4%나 더 높은 성능을 보여주었습니다.
PaLM-2
이제 PaLM 가문의 다음 주자인 PaLM-2로 넘어가 보겠습니다. PaLM-2는 이전 PaLM 모델과 비교하여 더 적은 계산 자원으로 더 높은 효율을 내도록 설계되었습니다. 특히 다국어(multilingual) 능력과 추론(reasoning) 능력이 크게 향상되었죠. PaLM-2는 여러 목표를 혼합(mixture of objectives)하는 방식으로 훈련되었습니다. 이는 마치 운동선수가 근력 운동, 유산소 운동, 유연성 운동을 모두 병행하여 전반적인 신체 능력을 끌어올리는 것과 같아요. 다양한 방식의 훈련을 통해 더 다재다능한 모델을 만들어낸 것입니다. 그 결과, PaLM-2는 다양한 모델 크기에서 영어, 다국어, 추론 과제 등 여러 작업(downstream tasks)에서 좋은 성능을 보였습니다. 동시에, 이전 PaLM보다 더 빠르게 추론(inference)을 할 수 있게 됐죠. 즉, 더 똑똑해졌을 뿐만 아니라 답변을 생각해내는 속도도 빨라진 셈입니다.
Med-PaLM
마지막으로 살펴볼 PaLM 계열의 모델은 의료 분야에 특화된 Med-PaLM(메드팜)입니다. 이름에서 알 수 있듯이, 의료 분야의 질문에 고품질 답변을 제공하도록 설계된 '도메인 특화(domain-specific)' 모델이에요. Med-PaLM은 기존 PaLM을 파인튜닝해서 만든 모델입니다. 구체적으로 말하면, '지시 프롬프트 튜닝(instruction prompt tuning)'이라는 효율적인 방법으로 파인튜닝을 했죠. 단 몇 가지 예시만으로도 LLM을 새로운 전문 분야에 맞게 조정할 수 있는 기술이에요. Med-PaLM은 다양한 헬스케어 분야에서 고무적인 성과를 보여주었지만, 아직 인간 의사보다는 성능이 낮았습니다.
이후 등장한 Med-PaLM 2라는 모델이 등장했습니다. 의료 분야 데이터로 추가적인 파인튜닝을 하고, '앙상블 프롬프팅(ensemble prompting)'이라는 기술을 통해 성능을 더욱 개선한 모델이죠.
앙상블 프롬프팅이란?
앙상블 프롬프팅이란, 마치 여러 명의 전문가에게 자문을 구하듯, 모델에게 같은 질문을 여러 다른 방식으로 던져보고 그 답변들을 종합해서 가장 좋은 최종 결론을 내리는 방법이에요.
그 결과, Med-PaLM 2는 의사 국가고시 문제 등을 포함한 MedQA 데이터셋에서 최대 86.5%의 정확도를 기록했습니다. Med-PaLM보다 19% 이상 향상된 수치입니다.
이것으로 구글의 PaLM 계열에 대한 설명을 마칩니다. PaLM은 '거대한 스케일링'의 힘을 증명했고, Flan-PaLM을 통해 대규모 '지시 튜닝'의 시대를 열었으며, Med-PaLM을 통해 '특정 분야 특화 모델'의 가능성을 보여주었습니다.
지금까지 우리는 LLM 시대를 연 세 가지 대표 모델 계열, 즉 GPT, LLaMA, PaLM에 대해 자세히 알아보았습니다. 각 모델이 가진 뚜렷한 특징과 발전 과정을 이해하는 것이 LLM의 전체적인 흐름을 파악하는 데 중요합니다.

C. 그 외 대표적인 LLM (Other Representative LLMs)
앞서 소개한 세 가지 모델 계열에 속하지는 않지만 LLM 분야를 발전시킨 또 다른 중요한 모델들도 간략히 알아보겠습니다. 상당히 많은 모델이 있지만 여기서는 대표적인 8가지 모델에 대해서만 알아보도록 하겠습니다.
FLAN
첫 번째로 소개할 모델은 FLAN(플란)입니다. FLAN은 '지시 튜닝(instruction tuning)'이라는 간단한 방법으로 언어 모델의 제로샷(zero-shot) 학습 능력을 크게 향상시킬 수 있다는 것을 보여준 중요한 모델입니다. 핵심 아이디어는, 1370억(137B) 개의 파라미터를 가진 사전 훈련 모델을, 60개가 넘는 다양한 NLP 데이터셋을 자연어 '지시문' 형태로 변환하여 추가로 훈련한 것입니다. 예를 들어, 감성 분석 데이터가 있다면 "다음 문장은 긍정적인가 부정적인가?"와 같은 지시문 형태로 바꿔서 학습시킨 거죠. 그 결과, 이렇게 여러 종류의 지시를 학습한 FLAN은 한 번도 본 적 없는 새로운 유형의 작업(unseen tasks)에 대해서도 별도의 예시 없이(zero-shot) 뛰어난 성능을 보여주었습니다. 이는 모델이 '지시'라는 개념 자체를 일반화해 학습했기 때문입니다.
RETRO
다음으로 살펴볼 모델은 RETRO(레트로)입니다. 이 모델의 이름은 'Retrieval-Enhanced Transformer(검색-증강 트랜스포머)'의 약자로, 이름에 모든 핵심 아이디어가 담겨있습니다. 기존의 언어 모델은 훈련 데이터에 저장된 '내부 기억'에만 의존해서 답변했어요. 이 때문에 최신 정보나 전문적인 지식에는 약했죠. RETRO는 이 문제를 해결하려고, 모델이 답변을 생성하는 도중에 실시간으로 외부 데이터베이스를 '검색(retrieval)'하여 관련된 정보를 찾아보고, 그 정보를 참고해서 답변을 생성하도록 만들어졌습니다. 좀 더 구체적으로 말하면, RETRO가 답변을 생성하다가 막히거나 더 정확한 정보가 필요하면, 지금까지 쓴 답변 내용을 바탕으로 검색 쿼리를 만듭니다. 그리고 2조 개의 토큰이 저장된 거대한 외부 데이터베이스에서 가장 유사한 문서를 찾아오죠. 마지막으로, 원래 가지고 있던 지식과 방금 찾아온 외부 정보를 함께 고려해 다음 답변 내용을 이어서 생성합니다. 이 '검색-증강' 방식 덕분에, RETRO는 GPT-3보다 25%나 더 적은 파라미터를 가지고도 비슷한 성능을 낼 수 있었습니다. 이는 모델의 크기를 무작정 키우지 않고도, 외부 지식을 활용하여 성능을 크게 높일 수 있다는 것을 보여준 중요한 사례입니다.
GLaM
다음으로 살펴볼 모델은 GLaM(글램), 즉 'Generalist Language Model(범용 언어 모델)'입니다. GLaM이 중요한 이유는, 거대한 모델을 효율적으로 훈련하고 사용하는 '전문가 혼합(Mixture-of-Experts, MoE)' 아키텍처를 성공적으로 도입했기 때문입니다. MoE 구조를 '거대한 종합병원의 전문의 시스템'이라고 생각해보세요. 환자가 병원에 오면, 모든 의사가 다 진료하는 것이 아니라, 접수처(라우터)에서 환자의 증상을 보고 '아, 이 환자는 내과로 가야겠네요' 하고 가장 관련된 전문의(expert)에게만 보내주죠. MoE도 마찬가지입니다. 모델에 텍스트가 입력되면, '라우터(router)'라는 부분이 그 텍스트의 종류를 파악하고, 수많은 '전문가 네트워크' 중에서 가장 적합한 몇몇 전문가에게만 일을 시킵니다. 나머지 전문가들은 쉬고요.
이 방식 덕분에, GLaM은 1.2조 개라는, GPT-3보다 약 7배나 많은 파라미터를 가졌음에도 불구하고, 훈련에 사용된 에너지는 GPT-3의 3분의 1에 불과했습니다. 답변을 생성하는 추론(inference) 단계에서도 필요한 계산량이 절반밖에 되지 않았죠. 즉, 평소에는 대부분의 전문가들이 쉬고 있다가, 필요할 때만 깨어나서 일하는 '간헐적으로 활성화되는(sparsely activated)' 방식 덕분에 엄청난 효율을 달성한 것입니다. 이러한 효율적인데도 GLaM은 29개의 NLP 과제에서 전반적으로 GPT-3보다 더 나은 제로샷, 원샷, 퓨샷 성능을 보여주었습니다.
LaMDA
다음으로 살펴볼 모델은 구글이 개발한 LaMDA(람다)입니다. LaMDA는 'Language Models for Dialogue Applications(대화 응용을 위한 언어 모델)'의 약자로, 이름에서 알 수 있듯이 '대화' 능력에 특화된 모델입니다. 이전 모델들이 주로 질문에 대한 '정답'을 찾는 데 집중했다면, LaMDA는 더 나아가 자연스럽고, 말이 되며, 흥미로운 대화를 이어가는 것을 목표로 했습니다. LaMDA는 일반적인 웹 텍스트뿐만 아니라 방대한 양의 공개 대화 데이터로 사전 훈련되었습니다. 특히 LaMDA는 두 가지 중요한 문제, 즉 안전성(safety) 있는 답변과 사실에 기반한(factual grounding) 답변에 집중했습니다.
Chinchilla
다음으로는 딥마인드(DeepMind)가 개발한 Chinchilla(친칠라)라는 모델을 알아보겠습니다. Chinchilla 모델이 중요한 이유는, LLM 훈련에 대한 기존의 통념을 뒤집었기 때문이에요. 기존의 통념은, 데이터 양과 관계없이 '모델은 무조건 크게' 만드는 것이 최고라고 것이었어요. GPT-3나 Gopher 같은 모델들이 그런 철학으로 만들어졌죠. 하지만 Chinchilla 연구팀은 400개가 넘는 다양한 크기의 모델을 훈련하는 대규모 실험을 통해, 이것이 비효율적이라는 사실을 발견했습니다. 최고의 '가성비'를 내기 위한 최적의 훈련법은, 모델 크기를 2배로 늘릴 때마다 훈련 데이터의 양도 똑같이 2배로 늘려야 한다는 것이었어요. 즉, 모델 크기와 데이터 양을 균형 있게 함께 키워야 한다는 새로운 '스케일링 법칙(scaling laws)'을 발견한 것입니다.
연구팀은 이 가설을 증명하기 위해, 이전의 거대 모델인 Gopher와 동일한 컴퓨팅 예산을 사용하되, 새로운 법칙에 따라 모델 크기는 더 작게(700억 파라미터) 만들고 데이터 양은 더 늘려서 Chinchilla를 훈련시켰습니다. 그 결과, Chinchilla는 Gopher보다 훨씬 작은 모델인데도 불구하고 Gopher를 능가하는 성능을 보여주었죠. Chinchilla의 발견은 LLM 연구계에 충격을 주었고, 이후 LLM들은 무작정 크기만 키우는 대신, 모델과 데이터의 균형을 맞추는 방향으로 발전하게 되었습니다.
BLOOM
다음 모델은 BLOOM(블룸)입니다. 이 모델이 가지는 가장 큰 의의는 '어떻게 만들어졌는가'에 있습니다. BLOOM은 특정 기업이 주도해서 만든 모델이 아닙니다. 전 세계 약 1,000명 정도의 학술 자원봉사자로 구성된 공개 협업 프로젝트인 빅사이언스(BigScience)가 개발한 모델이죠. 이름 그대로, 연구 커뮤니티의 협력을 통해 피어난 '꽃(Bloom)'과 같은 존재죠. BLOOM은 완전 개방형 모델입니다. LLaMA는 '비상업적' 오픈 소스인데 반해, BLOOM은 상업적으로도 자유롭게 사용할 수 있는 완전 개방형(open-access) 모델입니다. BLOOM은 46개의 자연어와 13개의 프로그래밍 언어로 구성된 ROOTS라는 거대한 다국어 말뭉치로 훈련되었습니다. 덕분에 처음부터 다양한 언어를 구사할 수 있는 능력을 갖추고 있죠.

StarCoder
이제는 StarCoder(스타코더)를 알아보겠습니다. 이름에서 유추할 수 있듯이, 코드 생성(Code Generation)에 특화된 모델이에요. 155억(15.5B) 개의 파라미터를 가진 StarCoder는 몇 가지 뛰어난 특징이 있습니다. 8,000 토큰에 달하는 '긴 문맥'을 처리할 수 있고, 코드 중간의 빈 부분을 채워 넣는 '인필링(infilling)' 기능도 갖추고 있죠. 또한, '멀티-쿼리 어텐션(multi-query attention)'이라는 기술 덕분에 대규모 배치 처리 시에도 빠르게 추론할 수 있습니다. StarCoder의 훈련 데이터는 '더 스택(The Stack)'이라고 부르는, 허용 라이선스를 가진 방대한 깃허브(GitHub) 저장소에서 가져온 1조 개의 토큰입니다. 물론 개발자가 원할 경우 자신의 코드를 제외할 수 있는 '옵트아웃(opt-out)' 절차도 거쳤습니다.
StarCoder는 두 가지 버전이 있습니다. '더 스택' 데이터로 훈련한 기본 모델이 StarCoderBase입니다. 350억 개의 파이썬(Python) 토큰으로 StarCoderBase를 추가로 파인튜닝한 모델이 바로 우리가 아는 StarCoder입니다. StarCoderBase는 출시 당시, 여러 프로그래밍 언어를 지원하는 공개 코드 LLM들보다 뛰어난 성능을 보였으며, OpenAI의 코드 전문 모델(code-cushman-001)과 맞먹거나 그 이상의 성능을 기록했습니다.
Gemini
마지막으로 살펴볼 모델은 구글이 개발한 Gemini(제미나이)입니다. Gemini는 이미지, 오디오, 비디오, 텍스트 등 다양한 종류의 데이터를 이해하는 데 뛰어난 능력을 보여주는 최신 멀티모달(multimodal) 모델 계열입니다. Gemini는 세 가지 버전으로 구성됩니다.
- Ultra (울트라): 매우 복잡한 작업을 위한 최고 성능 버전입니다.
- Pro (프로): 성능과 확장성 사이의 균형을 맞춘 버전입니다.
- Nano (나노): 스마트폰 같은 기기 내에서 직접 작동하도록 만든 가장 작고 효율적인 버전입니다.
Gemini의 아키텍처는 트랜스포머 디코더를 기반으로 하며, 효율적인 어텐션 메커니즘을 사용하여 32,000 토큰에 달하는 긴 문맥을 지원하도록 훈련되었습니다.
이것으로 3대 LLM 계열(GPT, LLaMA, PaLM)과 기타 중요한 LLM들에 대한 설명을 모두 마쳤습니다.

2장에서는 LLM의 역사와 종류, 그리고 각 모델이 어떤 특징과 철학을 가지고 발전해왔는지 자세히 살펴보았습니다. 이제 다음 단계로, 이 거대한 LLM들을 실제로 '어떻게 만드는지' 그 구체적인 과정을 알아보겠습니다.
III. LLM은 어떻게 만들어지는가? (HOW LLMs ARE BUILT)
이 장에서는 LLM을 만드는 전체 과정을 단계별로 설명합니다. LLM 훈련 과정을 요리에 빗대어 간략히 먼저 개괄해보면 다음과 같아요.
- 주요 LLM 아키텍처 (Dominant LLM Architectures): 가장 먼저, 어떤 요리를 만들지에 따라 '주방 도구(인코더, 디코더, 인코더-디코더 등)'를 선택합니다.
- 데이터 정제 (Data Cleaning): 다음으로, 신선한 재료를 골라 깨끗하게 '손질'합니다.
- 토큰화 (Tokenizations): 손질이 끝난 재료를 요리하기 좋게 칼로 '잘게 다지는' 과정입니다.
- 위치 인코딩 (Positional Encoding): 레시피의 순서가 중요하듯, 다진 재료에 '요리 순서 번호표'를 붙여줍니다.
- 모델 사전 훈련 (Model Pre-training): 모든 재료를 넣고 오랜 시간 끓여 맛의 기본이 되는 '기본 육수'를 우려냅니다.
- 파인튜닝 및 지시 튜닝 (Fine-tuning and Instruction Tuning): 기본 육수에 특제 소스를 넣어 '원하는 맛'을 냅니다.
- 정렬 (Alignment): 만든 요리가 사람들의 입맛에 딱 맞도록 소금과 후추로 마지막 '간을 맞추는' 과정입니다.
- 디코딩 전략 (Decoding Strategies): 완성된 요리를 손님에게 '어떻게 내놓을지(서빙할지)' 결정합니다.
- 비용 효율적 훈련/추론/적응/압축 (Cost-Effective Training/Inference/Adaptation/Compression): 마지막으로, 이 모든 요리 과정을 어떻게 하면 '더 빠르고 효율적으로 할 수 있을지 개선'해봅니다.
첫 번째 단계인 '주요 LLM 아키텍처'부터 시작해보죠!
A. 주요 LLM 아키텍처 (Dominant LLM Architectures)
가장 널리 사용하는 LLM의 구조는 바로 2장에서 이미 살펴본 Encoder-only, Decoder-only, 그리고 Encoder-Decoder입니다. 그리고 이 대부분의 아키텍처는 트랜스포머(Transformer)를 기본 '설계 블록(building block)'으로 사용하고 있습니다. 따라서 본격적으로 세 가지 유형을 살펴보기 전에, 그 근간이 되는 트랜스포머 아키텍처 자체를 먼저 복습하고 넘어가겠습니다.
1) 트랜스포머 (Transformer)
2017년 Vaswani(바스와니) 등의 연구자들이 발표한 트랜스포머 프레임워크는 LLM의 역사를 바꾼 혁신적인 설계였습니다. 처음부터 트랜스포머는 GPU를 통해 효과적으로 병렬 컴퓨팅하도록 설계되었죠. 트랜스포머의 핵심은 바로 '어텐션 메커니즘(attention mechanism)'입니다. 어텐션 메커니즘 덕분에 기존의 순환(recurrence) 방식이나 합성곱(convolution) 방식보다 훨씬 더 효과적으로, 문장 내의 장기 문맥 정보(long-term contextual information)를 포착할 수 있게 되었어요. 문장이 길어져도 핵심 의미를 놓치지 않게 되었죠. 아래 그림은 이 트랜스포머의 전체적인 구조를 나타냅니다. 이번 섹션에서는 트랜스포머의 주요 성분에 대해 알아보고, 트랜스포머를 변형한 몇 가지 구조에 대해서도 간단히 살펴보겠습니다.

원래 기계 번역을 위해 제안된 트랜스포머 아키텍처는 인코더와 디코더, 두 부분으로 구성됩니다. 먼저 인코더는 똑같이 생긴 6개의 '트랜스포머 레이어'가 겹겹이 쌓인 구조입니다. 그리고 각 레이어는 두 개의 '하위 레이어(sub-layers)'로 이루어져 있죠. 첫 번째 하위 레이어는 '멀티-헤드 셀프-어텐션(multi-head self-attention)' 층이고, 두 번째 하위 레이어는 간단한 '순방향 신경망(feed-forward network)'입니다.
멀티-헤드 어텐션이란?
어텐션을 한 번만 하는 게 아니라, 여러 개의 '헤드(head)'가 각기 다른 관점에서 문장을 동시에 살펴보는 방식이에요. 이를 통해 문장의 다양한 의미적 관계를 훨씬 더 풍부하게 포착할 수 있습니다.
디코더 역시 똑같이 생긴 6개의 레이어가 쌓인 구조입니다. 하지만 인코더와는 한 가지 다른 점이 있어요. 디코더의 각 레이어는 인코더가 가진 두 개의 하위 레이어에 더해, 또 다른 하위 레이어를 가지고 있습니다. 이 레이어는 인코더가 압축해서 넘겨준 정보에 대해 '멀티-헤드 어텐션'을 수행하는 역할을 합니다. 즉, '입력 문장의 의미를 다시 한번 잘 살펴보고, 그 의미에 맞게 다음 단어를 생성해라'라고 알려주는 아주 중요한 부분이죠.
어텐션 함수는 쿼리(Query), 키(Key), 값(Value)이라는 세 가지 요소에 따라 작동합니다. 도서관에서 책을 찾는 과정에 비유하면 이해하기 쉬워요.
- 쿼리(Query): 쿼리는 '내가 지금 찾고 싶은 정보'입니다. 예를 들어, '인공지능'이라는 주제의 책을 찾고 싶다면, '인공지능'이 바로 쿼리가 됩니다.
- 키(Key): 키는 도서관에 있는 모든 책들의 '주제'나 '카테고리'를 일컫습니다. '인공지능', '역사', '요리' 등 각 책이 어떤 내용을 담고 있는지 나타내는 레이블 같은 거죠.
- 값(Value): 값은 그 책의 '실제 내용'입니다.
어텐션은 먼저 내가 가진 쿼리('인공지능')와 모든 책의 키('주제')를 비교해서 유사도 점수를 계산합니다. '인공지능' 쿼리는 '인공지능' 키와의 유사도 점수가 가장 높겠죠. 이 점수가 바로 '어텐션 가중치(attention weight)'가 됩니다. 마지막으로, 이 가중치를 각 책의 값('실제 내용')에 곱해서 모두 더합니다. 그러면 '인공지능'이라는 쿼리와 가장 관련성이 높은 책의 내용이 가장 큰 비중으로 반영된 최종 결과(output)를 얻게 됩니다.
그리고 우리가 앞서 배운 '멀티-헤드 어텐션'은 이 '도서관에서 책 찾기'를 한 명이 하는 게 아니라, 여러 명(head)이 각자 다른 기준(예: 한 명은 제목, 다른 한 명은 저자)으로 동시에 책을 찾아본 뒤, 그 결과를 종합하는 방식이라고 볼 수 있습니다. 마지막으로, 위치 인코딩(positional encoding)은 단어의 상대적 또는 절대적인 위치 정보를 모델에 알려주는 역할을 합니다. 단어의 의미뿐만 아니라 '순서'도 중요하다는 것을 알려주는 장치죠.
이것으로 트랜스포머의 기본 원리에 대한 설명을 마쳤습니다. 이제 이 트랜스포머라는 강력한 구조를 가지고 만든 세 가지 종류의 모델, 즉 Encoder-only, Decoder-only, Decoder-Encoder 모델에 대해 다시 한번 살펴보겠습니다.
2) Encoder-Only
Encoder-only 계열의 모델들은 이름처럼 인코더만 사용합니다. 가장 큰 특징은, 어텐션 레이어가 입력된 문장의 모든 단어를 '한 번에' 살펴볼 수 있다는 점입니다. 마치 독수리가 하늘에서 숲 전체를 조망하듯, 문장의 전체적인 문맥을 파악하죠.
Encoder-only 모델은 주로 '손상된 문장을 복원'하는 방식으로 사전 훈련을 합니다. 예를 들어, 문장의 일부 단어 몇 개를 무작위로 가려놓고(masking), 모델이 원래 문장을 복원하도록 하는 방식이죠. 이 과정을 통해 모델은 문맥을 깊이 있게 이해하는 능력을 기릅니다. 따라서 Encoder-only 모델은 문장 전체에 대한 이해가 필요한 작업에 적합합니다. 가령, 문장의 주제를 맞히는 문장 분류(sentence classification), 문장에서 인물이나 장소 이름을 찾아내는 개체명 인식(named entity recognition), 그리고 주어진 지문에서 정답을 그대로 찾아내는 추출형 질의응답(extractive question answering)과 같은 작업 등에 말이죠. 이 Encoder-only 구조의 가장 대표적인 모델이 바로 우리가 앞서 살펴본 BERT입니다.
3) Decoder-Only
다음은 '디코더'만 사용하는 Decoder-only 계열에 대해 알아보죠. Decoder-only 모델의 어텐션 레이어는 각 단계마다 현재 단어 이전에 위치한 단어들에만 접근할 수 있습니다. 즉, 미래의 내용은 볼 수 없고 오직 과거의 내용만 볼 수 있죠. 이런 특징 때문에 Decoder-only 모델을 '자기회귀(auto-regressive)' 모델이라고도 부릅니다.
Decoder-only 모델은 주로 다음에 올 단어(또는 토큰)를 예측하는 방식으로 사전 훈련합니다. 마치 이야기꾼이 앞에서 했던 말을 바탕으로 다음 이야기를 계속 이어나가는 것과 같죠. 이런 특징 때문에 Decoder-only 모델은 텍스트 생성(text generation)과 관련한 작업에 가장 적합합니다. Decoder-only 구조의 가장 대표적인 모델이 GPT 계열입니다.
4) Encoder-Decoder
인코더-디코더 모델은 '이해 전문가'인 인코더와 '생성 전문가'인 디코더를 통합한 모델입니다. 그래서 '시퀀스-투-시퀀스(sequence-to-sequence)' 모델이라고도 부르죠. 먼저 인코더의 어텐션 레이어는 입력된 문장의 모든 단어를 한 번에 살펴봐서 전체적인 문맥과 의미를 파악합니다. 반면, 디코더의 어텐션 레이어는 생성하려는 문장에서 현재 단어 이전에 위치한 단어들만 볼 수 있죠.
인코더-디코더 모델을 사전 훈련할 때는 Encoder-only나 Decoder-only 보다 좀 더 복잡한 방식을 사용하기도 합니다. 예컨대, 텍스트의 일부분을 무작위로 [MASK] 토큰으로 대체하고, 모델이 그 [MASK]에 원래 어떤 텍스트가 있었는지를 예측하도록 하는 방식이죠. 인코더-디코더 모델은 주어진 입력에 맞춰 새로운 문장을 생성하는 작업을 잘합니다. 대표적으로 요약(summarization), 번역(translation), 생성형 질의응답(generative question answering)과 같은 작업 등을 말이죠.
여기서 잠깐! 인코더-디코더 모델의 사전 훈련 방식이 Encoder-only 모델의 사전 훈련 방식과 비슷하다고 생각되겠지만 조금 다릅니다. Encoder-only에서는 문장 중간에 있는 단어 몇 개를 마스킹해놓고, 그 단어 하나하나를 맞히는 '단답형 주관식' 문제를 풉니다. 이해 능력을 기르는 데 집중하는 거에요. 그에 반해 인코더-디코더 모델의 사전 훈련 방식에서는 연속된 단어 덩어리(즉, 문장 자체)를 마스킹한 뒤, 문맥에 맞게 그 문장을 생성해내는 '서술형 논술' 문제를 풉니다. 즉, 입력을 이해하는 능력과 출력을 생성하는 능력을 동시에 훈련하는 거죠.
B. 데이터 정제 (Data Cleaning)
자, 그럼 3장 'LLM 훈련 방법'의 두 번째 단계, '데이터 정제(Data Cleaning)'에 대해 알아보겠습니다. 좋은 요리는 좋은 재료에서 시작하듯, 훌륭한 LLM은 깨끗하고 품질 좋은 데이터에서 시작합니다. LLM을 훈련시키는 데 있어, 데이터의 품질은 모델의 최종 성능에 결정적인 영향을 미칩니다. 필터링(filtering)이나 중복 제거(deduplication)와 같은 데이터 정제 기술이 모델 성능에 아주 큰 영향을 미친다는 점이 밝혀졌죠. 그 대표적인 예시로 Falcon-40B 모델이 있습니다. Falcon 연구팀은 제대로 필터링하고 중복을 제거한 웹 데이터만으로도 아주 강력한 모델을 만들 수 있다는 사실을 보여주었습니다. 심지어 당시 최고 수준의 데이터셋으로 여겨졌던 'The Pile'로 훈련한 모델보다도 더 뛰어난 성능을 보였죠. Falcon 연구팀은 '커먼 크롤(Common Crawl)'이라는 거대한 웹 데이터를 바탕으로 정제를 꽤나 했음에도, 5조 개의 토큰을 얻을 수 있었습니다. 그리고 이 과정에서 얻은 REFINEDWEB 데이터셋의 일부(6000억 토큰)와, 그 데이터로 훈련시킨 모델까지 공개했습니다.

1) 데이터 필터링 (Data Filtering)
데이터 필터링의 목적은 훈련 데이터의 품질을 좋게 만들어, 이를 바탕으로 훈련한 LLM의 성능을 높이는 것이에요. 데이터 필터링의 몇 가지 기법을 소개하겠습니다.
- 노이즈 제거 (Removing Noise): 모델의 일반화 능력을 해칠 수 있는 노이즈 데이터를 제거하는 작업을 의미합니다. 예를 들어, 훈련 데이터에서 거짓 정보가 포함되어 있다면 이를 제거해야겠죠. 그래야 모델이 잘못된 정보를 생성할 가능성이 줄어듭니다. 노이즈 제거 기법에는 크게 분류 기반 방식과 휴리스틱 기반 방식이 있습니다.
- 이상치 처리 (Handling Outliers): 데이터에 포함된 이상치나 비정상적인 값을 식별하고 처리하는 작업입니다. 그래야 모델이 불균형적이지 않게 됩니다.
- 불균형 해소 (Addressing Imbalances): 데이터셋에 포함된 클래스나 카테고리의 분포를 균형 있게 맞추는 작업입니다. 편향을 피하고 공정한 출력을 내는 데 필요한 작업이죠.
- 텍스트 전처리 (Text Preprocessing): 불용어(stop words), 구두점(punctuation) 등 모델 학습에 크게 기여하지 않는 요소를 제거하는 작업입니다. 텍스트 데이터를 정제하고 표준화하는 작업이에요.
- 모호성 처리 (Dealing with Ambiguities): 훈련 중 모델을 혼란스럽게 할 수 있는 모호하거나 모순된 데이터를 처리하는 작업입니다. 이를 통해 모델이 더 명확하고 신뢰할 수 있는 답변을 제공할 수 있습니다.
2) 중복 제거 (Deduplication)
중복 제거는 데이터셋에서 동일한 데이터가 반복적으로 나타나는 것을 제거하는 과정입니다. 중복 제거가 왜 중요할까요? 만약 똑같은 데이터가 수차례 중복되어 있다면, 모델은 그 특정 데이터만 과도하게 학습해 과적합(overfitting)될 수 있습니다. 이렇게 되면, 모델은 학습한 내용과 조금이라도 다른 새로운 데이터를 접했을 때 제대로 성능을 내지 못하게 되죠. 즉, 모델의 일반화(generalization) 성능이 떨어지게 됩니다. 그러므로 일반화 성능을 높이려면 중복 제거가 꼭 필요해요. 강건한(robust) LLM을 만드는 데 필요하다는 말이죠. 특히 대규모 데이터셋을 다룰 때 중복 제거가 중요합니다. 문서 전체를 비교하거나, n-gram(단어 묶음)의 중복 비율을 계산하는 등 다양한 방법으로 중복된 샘플을 찾아 제거합니다.
이것으로 LLM을 만들기 위한 재료를 깨끗하게 손질하는 작업, 즉 '데이터 정제'에 대한 설명을 마칩니다. 이제 다음 단계로 넘어가 보겠습니다.
C. 토큰화 (Tokenizations)
다음 단계는 깨끗하게 손질된 재료를 요리하기 좋게 잘게 다지는 과정, 바로 토큰화입니다. 토큰화는 문장과 같은 긴 텍스트를 모델이 처리할 수 있는 작은 단위, 즉 '토큰(token)'으로 나누는 과정입니다. 가장 간단한 토큰화는 띄어쓰기(white space)를 기준으로 단어를 나누는 것입니다. 그런데 이 방식을 적용하면 '어휘 외 단어(Out-of-Vocabulary, OOV)'라는 문제가 발생합니다. 즉, 훈련 때 보지 못한 새로운 단어가 나오면 처리하지 못하는 거죠. 가령, 토크나이저가 '강아지'라는 단어만 알고 있는데 '댕댕이'라는 신조어가 등장하면, '이게 뭐지?' 하고 당황하게 되는 겁니다.
이 OOV 문제를 해결하고 사전의 범위를 늘리기 위해, LLM에 사용되는 인기 있는 토크나이저들은 '서브워드(sub-word)'를 활용합니다. '서브워드'는 단어를 더 작은 의미 단위로 쪼갠 것입니다. 이 서브워드들을 조합하면, 훈련 데이터에서 본 적 없는 새로운 단어도 표현할 수 있게 됩니다. 주로 활용하는 서브워드 토큰화 방식은 다음과 같습니다.
1) Byte-Pair Encoding (BPE)
BPE는 원래 데이터 압축을 위해 만들어진 알고리즘입니다. 텍스트에 가장 자주 함께 등장하는 글자 쌍을 찾아서 하나의 새로운 토큰으로 병합해 나가는 방식이죠.
- 작동 방식:
- 처음에는 모든 글자를 하나씩 쪼갭니다.
- 가장 자주 나오는 글자 쌍을 찾아 새 토큰으로 합칩니다.
- 그다음으로 자주 나오는 쌍을 찾아 또 다른 새 토큰으로 합칩니다.
- 이 과정을 계속 반복하며 최종적으로 자주 쓰이는 단어나 단어의 일부(서브워드)를 토큰 목록에 추가합니다.
이렇게 글로만 보면 이해가 되지 않으니 low, lower, newest, we라는 텍스트를 바탕으로 BPE를 수행해보겠습니다. 먼저 모든 글자를 하나씩 쪼갭니다.
초기 상태
l, o, w
l, o, w, e, r
n, e, w, e, s, t
w, e
여기서 가장 자주 등장하는 쌍을 찾습니다. w, e 쌍이 3번 등장하네요. w, e를 we로 병합합니다.
1차 병합 (w, e → we)
l, o, w
l, o, we, r
n, e, we, s, t
we
그다음으로 자주 등장하는 쌍은 l, o 쌍입니다. 2번 등장하네요.
2차 병합 (l, o → lo)
lo, w
lo, we, r
n, e, we, s, t
we
그다음으로 자주 등장하는 쌍은 모두 1번씩입니다. 이럴 때는 정해진 규칙에 따라 병합하면 됩니다. 여기서는 lo, w 쌍을 low로 병합해보겠습니다.
3차 병합 (lo, w → low)
low
lo, we, r
n, e, we, s, t
we
이런 식으로 반복하는 과정을 거칩니다. BPE의 장점은, 자주 쓰이는 단어는 통째로 유지하면서도 처음 보는 단어는 작은 서브워드의 조합으로 표현할 수 있어 어휘 크기를 적절하게 유지할 수 있다는 점입니다.
2) WordPiece Encoding (워드피스 인코딩)
두 번째 서브워드 토큰화 방식은 WordPiece Encoding(워드피스 인코딩)입니다. 이 알고리즘은 BERT나 ELECTRA 같은 유명한 모델들에서 주로 사용되었습니다. WordPiece는 훈련을 시작할 때, 훈련 데이터에 있는 모든 알파벳을 어휘 목록에 포함시키는 것부터 시작합니다. 이렇게 하는 이유는, 토크나이저가 처리하지 못하는 'UNK(unknown, 알 수 없음)' 토큰이 발생하는 상황을 막기 위해서입니다.
BPE와 마찬가지로, WordPiece도 자주 등장하는 단위를 합쳐서 새로운 토큰을 만듭니다. 하지만 기준이 약간 달라요. BPE가 '가장 자주 나오는 글자 쌍'을 합쳤다면, WordPiece는 '기존 토큰들을 합쳤을 때, 전체 훈련 데이터의 가능도(likelihood)가 가장 크게 증가하는 조합'을 찾아 합칩니다. 비유적으로 표현하면, BPE는 단순히 '가장 많이 팔린 햄버거와 감자튀김 세트'를 메뉴에 추가하는 방식이라면, WordPiece는 '햄버거와 감자튀김을 세트로 묶었을 때, 우리 가게 전체 매출이 가장 크게 오르는가?'를 계산해서 메뉴를 추가하는 방식이라고 할 수 있습니다.
3) SentencePiece Encoding (센텐스피스 인코딩)
마지막 토큰화 방식은 SentencePiece Encoding(센텐스피스 인코딩)입니다. SentencePiece Encoding 방식의 가장 큰 특징은 이전의 두 방식(BPE, WordPiece)이 가지고 있던 한 가지 가정을 버렸다는 점입니다. BPE, WordPiece 토큰화 방식은 단순히 띄어쓰기(공백) 기준 토큰화에 비해서는 더 효과적인 방식이지만, BPE, WordPiece 토큰화 방식 역시 문장에 띄어쓰기가 있다고 가정합니다. 하지만 띄어쓰기가 없거나 다른 규칙을 따르는 언어도 있고, 웹 데이터에는 불필요한 공백이나 노이즈가 많죠. SentencePiece는 이러한 문제를 해결한 토큰화 방식입니다. 공백이나 토큰 사전에 의존하지 않고 순수하게 문자열 전체를 하나의 시퀀스로 처리함으로써 말이죠. 덕분에 SentencePiece는 언어에 구애받지 않고, 다양한 형태의 텍스트에 훨씬 더 강건하게(robust) 대처할 수 있게 되었습니다.
D. 위치 인코딩 (Positional Encoding)
트랜스포머의 어텐션 메커니즘은 단어들의 관계를 파악하는 데는 뛰어나지만, 한 가지 치명적인 약점이 있습니다. 바로 '단어의 순서'를 인식하지 못한다는 점이에요. '철수가 영희를 좋아한다'와 '영희가 철수를 좋아한다'는 단어는 같지만 순서가 달라 의미가 완전히 다르죠. 위치 인코딩은 바로 이 문제를 해결하기 위해 등장했습니다.
1) 절대 위치 임베딩 (Absolute Positional Embeddings, APE)
가장 기본적인 방식은 절대 위치 임베딩(APE)입니다. 이는 2017년 최초의 트랜스포머 논문에서 사용된 방식으로, 문장의 각 자리에 고유한 번호(위치 벡터)를 부여하고, 이 번호를 단어의 임베딩(의미 벡터)에 그냥 더해주는 아주 간단한 방식입니다. 예를 들어, 첫 번째 자리에는 1번 번호표, 두 번째 자리에는 2번 번호표를 붙여주는 거죠. 초기 트랜스포머에서는 sine 함수, cosine 함수를 이용해 절대 위치 임베딩을 했습니다.
그런데 이 방식에는 단점이 있습니다. 정해진 길이(예: 512개 단어)까지만 번호표가 준비되어 있어, 훈련 때 본 것보다 더 긴 문장이 들어오면 처리하기 어렵다는 점이죠. 게다가 단어들 사이의 '상대적인 거리'를 제대로 반영하지 못했습니다.

2) 상대 위치 임베딩 (Relative Positional Embeddings, RPE)
절대 위치 임베딩의 한계로 인해 연구자들은 더 나은 위치 임베딩 방법을 개발했습니다. 바로 상대 위치 임베딩(RPE)이죠. 상대 위치 임베딩은 문장에서 각 단어에 고정된 주소를 부여하는 대신 단어들 사이의 상대적인 관계(예: 바로 옆 단어, 3칸 떨어진 단어)에 집중합니다. 셀프-어텐션 메커니즘을 확장하여 두 단어 사이의 거리를 직접적으로 고려하는 방식으로 동작하죠. 예를 들어, '나는 학교에 간다'라는 문장에서 '나'와 '학교' 사이의 거리를 계산하여 그 관계를 모델에 알려주는 거에요.
상대 위치 임베딩에서는 셀프-어텐션 메커니즘을 두 가지 방식으로 확장합니다. 어텐션을 계산할 때, 원래는 단어의 '의미' 정보만 가지고 계산을 해요. 상대 위치 임베딩은 바로 이 계산 과정에 '위치' 정보를 추가하는 겁니다.
- 키(Key) 행렬에 '위치 정보' 추가: 어텐션 계산 시, 단어의 의미뿐만 아니라 두 단어 사이의 상대적인 거리 정보까지 함께 고려하여 키(Key)를 만듭니다. '쿼리'와 '키'의 유사도를 비교할 때, 단순히 단어의 '의미'만 비교하는 게 아니라, '두 단어가 얼마나 떨어져 있는지'에 대한 '거리 점수'를 추가로 더해줍니다. 그래서 가까운 단어일수록 더 높은 점수를 받게 되죠.
- 값(Value) 행렬에 '위치 정보' 추가: 최종 결과물을 만들 때도 이 상대적인 거리 정보를 반영합니다. 즉, 최종 결과물을 만들 때도 단순히 '의미'만 종합하는 게 아니라, '거리 점수'를 한 번 더 반영해서 가까운 단어의 정보에 더 가중치를 줍니다.
즉, 어텐션 계산의 중간 과정과 최종 결과 모두에 '상대적인 거리'라는 새로운 정보를 추가해서, 모델이 단어의 순서를 더 잘 이해하도록 돕는 거예요.
또한, 상대 위치 임베딩에서는 '클리핑 거리(clipping distance)'라는 개념을 사용합니다. 특정 거리까지만 상대적인 위치를 세밀하게 고려하고, 그보다 더 멀리 떨어진 단어들은 그냥 '멀리 있다'고만 인식하는 방식입니다. 이 덕분에, 모델이 훈련 때 보지 못했던 더 긴 문장에 대해서도 합리적으로 예측하고 일반화할 수 있게 됩니다.
절대 위치 임베딩은 각 단어의 '정확한 집 주소'를 알려주는 방식이라면, 상대 위치 임베딩은 단어들 사이의 '상대적인 거리나 방향'을 알려주는 방식에 비유할 수 있죠.

3) 회전식 위치 임베딩 (Rotary Positional Embeddings, RoPE)
다음은 회전식 위치 임베딩, 즉 RoPE(로프)입니다. 이 방식은 이전 접근법들의 문제점을 해결하기 위해 등장했습니다. RoPE는 회전 행렬(rotation matrix)을 사용해 단어의 절대적인 위치를 인코딩하면서도, 동시에 셀프-어텐션 계산 시에는 단어들 간의 상대적인 위치 정보를 반영합니다. 마치 지구 위에서 서울 위치를 나타낼 때, '북위 37도, 동경 127도'라는 절대적인 좌표(위도, 경도)를 사용하면서도, '서울은 도쿄보다 서쪽에 있다'라는 상대적인 관계도 함께 반영하는 것과 같아요. 이러한 방식 덕분에 문장의 길이에 따라 유연하게 처리할 수 있고, 단어들 사이의 거리가 멀어질수록 의존성이 감소하는 점도 반영할 수 있습니다. GPT-NeoX-2B, PaLM, CODEGEN, LLaMA 등이 RoPE 방식을 적용한 모델입니다.

4) 상대 위치 편향 (Relative Positional Bias)
상대 위치 편향 방식은 모델이 훈련 시 본 문장보다 더 긴 문장을 처리할 수 있도록 돕는, 아주 간단하면서도 효과적인 방법입니다. 단어의 위치 정보를 임베딩에 직접 더하는 대신, 쿼리-키 쌍의 어텐션 점수(attention score) 자체에 편향(bias)을 추가하는 방식이에요. 이 편향은 두 단어 사이의 거리에 비례하는 일종의 '페널티'처럼 작동해요. 즉, 두 단어가 서로 멀리 떨어져 있을수록 어텐션 점수를 더 많이 깎아서 모델이 가까운 단어들의 문맥에 더 집중하도록 유도하는 거죠. 이 기법을 '선형 편향을 이용한 어텐션(Attention with Linear Biases, ALiBi)'이라고도 부릅니다. 우리가 앞서 살펴본 BLOOM 모델이 바로 이 ALiBi 방식을 사용했습니다.

이것으로 LLM 요리법의 네 번째 단계, '위치 인코딩'에 대한 설명을 모두 마쳤습니다. 우리는 '순서'라는 중요한 정보를 모델에 알려주기 위해, '절대 위치'부터 '상대 위치', '회전식', 그리고 '편향'을 이용하는 방식까지 다양한 방법들을 살펴보았습니다. 이제 다음 단계인 '모델 사전 훈련 (Model Pre-training)'으로 넘어가겠습니다. 드디어 손질과 다지기를 마친 재료들을 냄비에 넣고, 맛의 기본이 되는 '진한 육수'를 우려낼 차례입니다.
E. 모델 사전 훈련 (Model Pre-training)
사전 훈련은 LLM 훈련 파이프라인의 가장 첫 번째 단계입니다. 사전 훈련을 통해 LLM은 기본적인 언어 이해 능력을 습득하게 됩니다. 사전 훈련 단계에서 LLM은 보통 정답이 없는(unlabeled) 방대한 양의 텍스트를 가지고, '자기-지도 학습(self-supervised)' 방식으로 훈련됩니다. '자기-지도 학습'이란, 데이터 자체에서 정답을 만들어내어 스스로를 가르치는 방식입니다. 여러 사전 훈련 방식 중 가장 일반적인 세 가지 방식을 소개하겠습니다. 바로 '자기회귀 언어 모델링(autoregressive language modeling)'과 '마스크 언어 모델링(masked language modeling)', 그리고 전문가 혼합(mixture of experts)입니다.
자기회귀 언어 모델링(Autoregressive Language Modeling)
첫 번째 사전 훈련 방식은 자기회귀 언어 모델링(Autoregressive Language Modeling)입니다. '자기회귀'라는 말은 '자기 자신에게 돌아와 참조한다'는 뜻으로, 모델이 이전에 생성한 단어를 바탕으로 다음에 올 단어를 예측하는 순차적인 방식을 의미합니다. 우리가 앞서 Decoder-only 모델에서 살펴본 바로 그 방식이죠. 좀 더 구체적으로 알아볼까요? n개의 토큰 시퀀스 x₁, ..., xₙ이 주어졌을 때, 모델은 다음에 올 토큰 xₙ₊₁을 예측하도록 훈련됩니다. 이때 모델이 얼마나 잘 예측했는지를 평가하는 손실 함수(loss function)로는 보통 '로그 가능도(log-likelihood)'를 사용합니다. 수식으로 표현하면 다음과 같죠.

이 수식의 의미는 간단합니다. 'xᵢ부터 xᵢ₊ₙ₋₁까지의 단어들이 주어졌을 때, xᵢ₊ₙ이 출력될 확률 p를 계산하고, 이 확률 값들을 모든 데이터(N)에 대해 더한 값'입니다. 이 가능도 함수 값들의 합을 최대화하면 됩니다. 즉, 가능도 함수 값을 최대화하는 방향으로 학습하라는 의미입니다.
이 방식은 '자기회귀'라는 이름처럼, 이전에 나온 내용을 바탕으로 다음에 올 내용을 순차적으로 예측하는 방식이기 때문에 Decoder-only 모델에 더 적합한 방식입니다.
마스크 언어 모델링(Masked Language Modeling)
다음 방식은 마스크 언어 모델링(Masked Language Modeling, MLM)입니다. 문장의 일부 단어들을 가려놓고(masking), 모델이 주변 문맥을 통해 마스킹한 단어들을 예측하도록 훈련합니다. 이 방식은 우리가 BERT에서 살펴본 '빈칸 채우기' 훈련과 같아요. 이 방식을 때로는 '노이즈 제거 오토인코딩(denoising autoencoding)'이라고도 부릅니다. 이 모델의 손실 함수를 수식으로 표현하면 다음과 같습니다.

이 수식의 의미는, '전체 문장 x에서 마스킹한 부분 ~x를 제외한 나머지(x \ ~x)를 보고, 마스킹한 부분 ~x가 무엇일지 맞힐 확률 p를 최대화하자'는 뜻입니다. 즉, 주변 문맥을 보고 빈칸을 정확히 채우는 능력을 기르는 것이 목표죠.
전문가 혼합 (Mixture of Experts, MoE)
마지막 사전 훈련 방식은 최근 LLM 분야에서 주로 활용하는 전문가 혼합(Mixture of Experts, MoE) 방식입니다. MoE의 가장 큰 장점은 훨씬 적은 계산 자원으로 모델을 사전 훈련할 수 있다는 점입니다. 같은 예산으로도 모델이나 데이터셋의 규모를 엄청나게 키울 수 있다는 것을 의미하죠. MoE는 두 가지 핵심 요소로 구성됩니다. '거대한 종합병원' 비유를 다시 사용해 볼게요.
- 희소 MoE 레이어 (Sparse MoE layers): 일반적인 트랜스포머 레이어는 밀한(dense) 레이어로 구성되어 있습니다. 병원에 비유하면, 모든 환자를 진료하는 가정의학과 전문의처럼 순방향 신경망(Feed-Forward Network, FFN)이 딱 하나만 있습니다. 희소 MoE 레이어란 이 '가정의학과 전문의' 한 명을 없애는 대신, 내과 전문의, 외과 전문의, 소아과 전문의 등 여러 명의 전문가로 구성된 전문가 그룹을 두는 것과 같습니다. 이 전문가 한 명 한 명이 바로 순방향 신경망(FFN)인 셈이죠.
- 게이트 네트워크 또는 라우터 (Gate network or router): 게이트 네트워크란 어떤 토큰(환자)을 어떤 전문가(진료과)에게 보낼지 결정하는 '접수처' 역할을 합니다. 이 라우터 역시 학습을 통해 어떤 환자를 어느 과로 보내는 게 가장 효율적인지를 배우게 되죠.
중요한 점은, 하나의 토큰을 여러 전문가에게 동시에 보낼 수도 있다는 것입니다. 하지만 GLaM 모델에서 봤듯이, 보통은 수많은 전문가 중 가장 관련된 소수(예: 2명)의 전문가만 활성화를 시켜요. 소수에게만 일을 시키고 나머지는 쉬기 때문에 MoE 레이어가 희소(sparse)하다는 것입니다. 이렇게 일부만 골라서 일을 시키는 방식 덕분에 MoE의 연산 효율이 굉장히 좋아졌습니다.
아래 그림은 Switch 트랜스포머의 인코더 블록을 나타냅니다. Switch 트랜스포머의 인코더 블록에서는 단일 FFN 대신 희소 MoE 레이어를 두었습니다. 보다시피 라우터(접수처)를 통해 어떤 FFN(진료과 전문의)으로 가야할지를 결정합니다.

이것으로 LLM 요리법의 다섯 번째 단계, '모델 사전 훈련'에 대한 설명을 모두 마쳤습니다. '자기-지도 학습'의 세 가지 주요 방식, 즉 자기회귀 언어 모델링, 마스크 언어 모델링, 그리고 전문가 혼합(MoE)에 대해 알아보았습니다. 이제 다음 단계인 '파인튜닝 및 지시 튜닝'으로 넘어가겠습니다. 잘 우려낸 '기본 육수'에 특별한 양념을 더해, 특제 소스 넣어 '우리가 원하는 맛'을 낼 차례에요.
F. 파인튜닝 및 지시 튜닝 (Fine-tuning and Instruction Tuning)
파인튜닝(Fine-tuning)
BERT와 같은 초기 언어 모델들은 주로 자기-지도 학습 방식으로 훈련되었습니다. 하지만 이렇게 훈련된 모델들은 특정 작업에서 바로 좋은 성능을 내지 못했습니다. 그래서 정답이 있는 데이터(labeled data)를 가지고, 특정 작업에 맞게 모델을 '파인튜닝(fine-tuning)'하는 과정이 반드시 필요했죠. 예를 들어, BERT는 11개의 다양한 자연어 처리 작업(텍스트 분류, 질문응답 등)에 맞게 파인튜닝되어 사용되었습니다. 최근 LLM들은 파인튜닝 없이도 어느 정도 작업을 수행할 수 있지만, 특정 데이터나 업무에 맞게 다시 튜닝을 하면 훨씬 좋은 성능을 발휘합니다. 이를테면, OpenAI의 GPT-3.5 Turbo는 특정 작업 데이터로 파인튜닝했을 때 GPT-4보다 더 좋은 결과를 보였죠. 즉, 파인튜닝은 모델을 해당 업무에 특화시키거나 새로운 데이터를 반영할 때 유용한 방식입니다.
파인튜닝을 꼭 하나의 작업에 대해서만 할 필요는 없습니다. 여러 작업을 동시에 학습시키는 방법, 즉 멀티태스크 파인튜닝(multi-task fine-tuning)을 수행해도 됩니다. 예를 들어, '문서 요약' + 'FAQ 자동 응답' + '제품 리뷰 감정 분석' 작업에 대해 한 번에 파인튜닝할 수도 있죠. 이렇게 (멀티태스크) 파인튜닝을 하면 성능이 향상된다는 점 외에도 여러 장점이 있습니다.
- 프롬프트 설계 복잡성 감소: 일일이 상황 맞는 긴 지시문을 쓰지 않아도 됩니다.
- RAG(Retrieval Augmented Generation; 검색 증강 생성)의 대안: 모델 자체가 여러 영역의 지식을 갖고 있으므로 RAG의 대안이 될 수 있습니다.
- 새로운 지식 학습: 원래 훈련 데이터에 없던 새로운 정보에 대해서도 모델이 잘 다룰 수 있게 됩니다.
지시 튜닝(instruction tuning)
LLM을 파인튜닝하는 주된 이유는 사람이 프롬프트로 지시를 할 경우, 사람 의도에 맞는 결과를 생성하도록 하기 위함입니다. 이러한 학습 방식을 지시 튜닝(instruction tuning)이라고 하죠. 모델이 사용자의 '명령'을 잘 따르게 만드는 것이 지시 튜닝의 핵심입니다. 기존의 사전 훈련 모델은 텍스트 이해나 텍스트 생성 자체는 잘하지만, "~해줘"라는 사람의 요청을 의도에 맞게 수행하지는 못할 수도 있습니다. 지시 튜닝은 '지시-응답 쌍(instruction-response pair)' 데이터로 학습을 시켜서, 사람처럼 지시(명령)를 이해하고 결과를 만들어내도록 하는 튜닝 기법입니다. 예를 들자면, 기존의 사전 훈련 모델은 백과사전에 비유할 수 있습니다. 지식은 많지만 질문의 의도를 모릅니다. 그런데 지시 튜닝된 모델은 선생님이라고 볼 수 있어요. 질문 이해하고 맞춤형 설명을 해주기 때문이죠.
파인튜닝과 지시 튜닝의 차이는?
파인튜닝이란 사전 훈련된 모델을 특정 작업이나 데이터에 맞게 추가 학습시켜 성능을 높이는 작업입니다. 지시 튜닝은 여기서 더 나아가 모델이 사람의 지시나 명령을 잘 이해하고 따르도록 만드는 데 초점을 맞춘 특별한 형태의 파인튜닝입니다. 즉, 지시 튜닝은 사용자 명령에 맞는 응답을 생성할 수 있도록 모델을 맞춤 훈련하는 방법입니다. 결국 지시 튜닝은 파인튜닝의 한 종류로 볼 수 있습니다.
자기-지시(self-instruct)
지시 튜닝을 한 모델은 기존의 사전 훈련 모델보다 일반적으로 성능이 좋습니다. 그렇지만 지시 튜닝 데이터를 만드는 게 비싸고 오래 걸립니다. 그런데 자기-지시(self-instruct) 기법을 이용하면 저렴하고 빠르게 지시 튜닝을 할 수 있습니다. 자기-지시란 모델이 스스로 지시-응답 쌍 데이터를 만들어서, 그 데이터를 활용해 스스로 지시 튜닝을 하는 방식입니다. 지시 튜닝 데이터를 사람이 직접 만들지 않고, 모델이 직접 만들어 그 중 좋은 것만 필터링해 사용하는 것입니다. 인력과 비용을 절감할 수 있으며, 빠르고 효율적으로 지시 튜닝을 할 수 있는 방식이죠.
여기서 잠깐!
앞서 알파카 모델을 설명할 때 self-instruct에 대해 이미 설명한 바 있습니다. self-instruct라는 이름 때문에 마치 '모델이 진짜 자기 스스로 공부한다'는 느낌을 주지만, 실제로는 조금 다른 구조예요. 자기 자신이라는 말은 '인간의 직접적인 대규모 레이블링 없이' 데이터를 구한다는 뜻에서 쓰입니다. 실제로는 성능이 더 좋은, 즉 이미 튜닝된 교사 모델(teacher model)이 데이터를 만들어주는 경우가 많습니다. 이때 데이터를 만드는 모델(교사 모델)과 그 데이터로 학습하는 모델(학생 모델)이 다른 경우가 많지만, 개념적으로 보면 '모델이 모델을 가르치는' 구조라서 self라는 말을 붙이는 겁니다. 연구 논문에서도 'LLM generates its own instruction-following data to further improve itself' 같은 표현을 씁니다. 하지만 여기서 'itself'는 사실 진정한 의미의 스스로가 아니라 '같은 계열의 모델'이라는 느슨한 의미입니다. 따라서 여기서도 '자기-지시란 모델이 스스로 지시-응답 쌍 데이터를 만들어서, 그 데이터를 활용해 스스로 지시 튜닝을 하는 방식입니다.'라고 표현했지만, 표현상의 편의이지, 엄밀히 말하면 교사 모델과 학생 모델이 다른 경우가 많습니다.
이번 섹션에서는 특제 소스 넣어 '우리가 원하는 맛'을 내는 방법을 알아보았습니다. 그럼 이제 LLM 요리법의 일곱 번째 단계, 인간의 입맛에 맞게 마지막 간을 맞추는 '정렬 (Alignment)'로 넘어가겠습니다.
G. 정렬 (Alignment)
AI 정렬(Al Alignment)이란 인간의 목표, 선호도, 원칙에 부합하도록 AI 시스템의 방향을 조정하는 작업입니다. LLM은 기본적으로 다음 단어를 예측하도록 사전 훈련되었기 때문에, 종종 의도하지 않은 행동을 보이곤 합니다. 유해하거나(toxic), 해롭거나(harmful), 오해의 소지가 있거나(misleading), 편향된(biased) 내용을 생성할 우려가 있죠. 그러므로 인간의 가치에 맞게 방향을 잡아주는 정렬이 반드시 필요합니다.
바로 앞에서 배운 '지시 튜닝'이 LLM을 정렬시키는 첫 번째 단계라고 할 수 있습니다. 하지만 많은 경우, 모델의 정렬 수준을 더욱 향상시키고 의도치 않은 행동을 피하기 위해서는 추가적인 정렬을 해주어야 합니다. 이번 섹션에서는 대표적인 정렬 기법 몇 가지를 알아보겠습니다.
RLHF (Reinforcement Learning from Human Feedback)와 RLAIF(Reinforcement Learning from AI Feedback)
가장 유명한 정렬 방식으로는 RLHF(인간 피드백 기반 강화학습, Reinforcement Learning from Human Feedback)와 RLAIF(AI 피드백 기반 강화학습, Reinforcement Learning from AI Feedback)가 있습니다.
먼저 RLHF는 보상 모델(reward model)을 사용해 인간의 피드백을 바탕으로 정렬해가는 기법입니다. 이때 보상 모델이 중요한데, 보상 모델은 '사람이 어떤 답변을 더 좋아하는지 평가하는 심사위원' 역할을 하는 모델이에요. RLHF를 통한 학습 과정은 대략 이렇습니다.
- 먼저 LLM(사전 훈련된 기존 언어 모델)에게 여러 질문을 하고 답변을 몇 개씩 생성합니다.
- 사람이 이 답변들을 보고 "어떤 게 더 좋다" 하고 순위를 매겨줍니다(예: 1등, 2등, 3등…).
- 인간의 순위 데이터를 바탕으로 보상 모델을 훈련합니다. → 이제 이 보상 모델은 '답변을 보고 사람의 선호도를 점수로 예측'할 수 있게 됩니다.
- 그다음 LLM을 다시 훈련할 때, 보상 모델이 심사위원 역할을 하며 "이 답변이 좋다" 또는 "이건 별로다" 하고 점수를 매깁니다.
- LLM은 이 점수를 높이려고 스스로 답변 방식을 조정합니다. (강화학습 단계)
정리하면, 사람의 평가 데이터를 수집하고 → 그 데이터로 보상 모델을 훈련한 뒤 → 훈련된 보상 모델을 활용해 LLM을 강화학습하는 것입니다.
RLAIF는 여기서 한 걸음 더 나아가, 인간 대신 '이미 잘 훈련된 다른 AI 모델'을 피드백 제공자로 사용하는 방식입니다. 더 똑똑하거나 잘 정렬된 AI 모델이 사람 대신 평가를 하는 거죠. AI 모델의 피드백 데이터를 기반으로 보상 모델을 훈련하여, 이를 통해 강화학습을 하는 방식입니다.
DPO (Direct Preference Optimization)
RLHF는 아주 강력한 기법이지만, 인간의 피드백을 받고, 그 피드백을 바탕으로 보상 모델을 따로 훈련시키고, 훈련된 보상 모델을 기반으로 LLM을 강화학습해 다시 튜닝하는 과정을 거쳐야 합니다. 그러므로 매우 복잡하고 불안정하다는 단점이 있죠. 이 문제를 해결하기 위해 DPO(직접 선호도 최적화, Direct Preference Optimization)라는 새로운 접근법이 등장했습니다.
DPO는 '보상 함수와 최적 정책(optimal policy) 사이에는 수학적인 매핑 관계가 있다는 점'을 활용합니다. 이 사실을 활용해, 복잡한 보상 최대화 문제를 '단일 정책 학습 단계'만으로 정확하게 최적화할 수 있음을 보여주었습니다. 즉, 복잡한 강화학습 문제를 사람의 선호도 데이터에 기반한 분류(classification) 문제로 바꿔버린 것입니다. 그 결과, DPO는 보상 모델을 따로 만들 필요도 없고, 튜닝 중에 LLM에서 샘플링할 필요도 없으며, 복잡한 하이퍼파라미터 튜닝도 필요도 없습니다. 그러면서도 훨씬 안정적이고 계산 효율적이며 성능도 좋습니다. 즉, RLHF의 여러 단계를 하나로 통합하여 훨씬 간단하게 만든 거죠. 실제로 DPO로 정렬한 모델은 감성 제어 능력에서 RLHF를 능가하고, 요약 작업의 응답 품질도 향상시키는 결과를 보여주었습니다.

KTO (Kahneman-Tversky Optimization)
가장 최근에 등장한 정렬 기법은 KTO(카너먼-트버스키 최적화, Kahneman-Tversky Optimization)입니다. 이 방식의 가장 큰 혁신은 필요한 데이터의 종류를 바꿨다는 점입니다. 기존의 RLHF나 DPO는 '선호도 쌍 데이터(paired preference data)'가 반드시 필요했습니다. 즉, '답변 A와 답변 B 중에서, 인간은 B를 더 좋아한다'와 같은 형태의 데이터가 필요했어요. 하지만 현실적으로 이런 비교 데이터를 구하기는 꽤 어렵습니다.
그런데 KTO는 이런 선호도 쌍 데이터가 필요 없습니다. 대신, '이 답변은 좋은 답변(desirable)이다' 또는 '이 답변은 나쁜 답변(undesirable)이다'라는 단순한 데이터만 있으면 됩니다. 이러한 데이터는 'RLHF나 DPO가 필요로 했던 선호도 쌍 데이터'에 비해 더 쉽게 수집할 수 있지요. 선호도 쌍 데이터를 사용하지 않았음에도 불구하고, KTO로 정렬된 모델들은 DPO로 정렬된 모델들과 비슷하거나 더 나은 성능을 보여주었습니다.

이상으로 LLM 요리법의 일곱 번째 단계인 정렬에 대해 다루었습니다. LLM이 유용하고 안전한 답변을 하도록 만드는 여러 기법들을 살펴보았죠. 사람의 피드백을 직접 사용하는 RLHF부터, 보상 모델을 없애 정렬 과정을 단순화한 DPO, 그리고 필요한 데이터의 종류까지 바꾼 KTO에 이르기까지, 정렬 기술이 어떻게 발전해왔는지 알아보았습니다.
이제 정렬까지 마쳐 맛있는 요리가 완성되었네요. 다음 단계는 완성된 요리를 손님에게 '어떻게 내놓을지' 결정하는 '디코딩 전략 (Decoding Strategies)'입니다.
H. 디코딩 전략 (Decoding Strategies)
디코딩이란 사전 훈련된 LLM을 사용하여 텍스트를 생성하는 과정을 의미합니다. LLM이 입력을 받아 결과를 출력하는 과정을 간략히 설명하면 이렇습니다. 먼저, 사용자가 입력한 프롬프트의 각 토큰을 토크나이저가 토큰 ID라는 숫자로 변환합니다. 그다음, 언어 모델이 이 토큰 ID들을 입력으로 받아, 다음에 올 가장 가능성 높은 토큰(또는 토큰들의 시퀀스)을 예측합니다. 마지막으로, 모델은 '로짓(logits)'이라는 숫자 값을 생성하고, 이 로짓을 소프트맥스(softmax) 함수를 통해 확률로 변환하여 최종 결과물을 만듭니다. 이 마지막 단계에서 어떤 토큰을 최종적으로 선택할지에 따라 답변의 스타일이 달라지는데, 이를 결정하는 전략이 바로 '디코딩 전략'입니다. 여러 가지 디코딩 전략이 있습니다. 가장 대중적인 전략으로는 탐욕 탐색(greedy search), 빔 탐색(beam search), 그리고 Top-k, Top-p와 같은 다양한 샘플링 기법들입니다.
그럼 가장 단순한 디코딩 전략인 '탐욕 탐색(Greedy Search)'부터 알아보겠습니다.
1) 탐욕 탐색(greedy search)
탐욕 탐색은 가장 단순하면서도 직관적인 방법입니다. 매 단계마다 확률이 가장 높은 토큰을 다음 토큰으로 선택하고, 나머지 모든 옵션은 버리는 방식입니다. 마치 갈림길이 나올 때마다 무조건 가장 넓어 보이는 길만 선택하는 등산객과 같아요. 당장은 그 길이 가장 좋아 보이겠지만, 그 길 끝에 낭떠러지가 있을지는 전혀 고려하지 않는 방식이죠. 오늘만 사는 셈입니다.
탐욕 탐색의 가장 큰 장점은 매우 빠르다는 것입니다. 하지만 단점은 명확합니다. 각 단계에서만 최선을 선택하기 때문에, 전체적으로는 맥락이 어색하거나 일관성이 없는 문장을 만들 수 있다는 점입니다. 지금 당장 확률이 조금 낮더라도, 그 단어를 선택했을 때 뒤따라올 더 자연스러운 문장 조합을 놓칠 수 있기 때문이죠.
2) 빔 탐색(beam search)
탐욕 탐색이 가장 확률이 높은 단 하나의 길만 고집했다면, 빔 탐색은 그보다 조금 더 신중한 방법입니다. 빔 탐색에서는 매 단계에서 가장 가능성 높은 토큰 N개를 모두 고려합니다. 여기서 N은 빔의 개수(number of beams)를 일컫습니다. 이번에도 등산객 비유를 다시 사용해볼게요. 탐욕 탐색 등산객은 가장 넓어 보이는 길 하나로만 갔죠. 반면, 빔 탐색 등산객은 '빔의 개수'가 3이라면, 가장 넓어 보이는 길 3개를 모두 기억해두고, 각 길을 따라 한 걸음씩 더 가봅니다. 그리고 그다음 단계에서 다시 가장 유망한 3개의 경로만 남기고 나머지는 버리는 과정을 반복합니다. 이 과정은 미리 정해진 최대 문장 길이에 도달하거나, 문장의 끝을 알리는 토큰이 나타날 때까지 반복됩니다. 마지막에는, 지금까지 탐색한 모든 경로(빔) 중에서 전체 점수가 가장 높은 경로 하나를 최종 결과물로 선택합니다.
예를 들어, 빔의 크기가 2이고 토큰의 최대 길이가 5라면, 빔 탐색은 총 2⁵=32개의 가능한 시퀀스를 추적해야 합니다. 따라서 탐욕 탐색보다는 계산량이 훨씬 많고 느리지만, 더 자연스럽고 일관성 있는 문장을 찾아낼 가능성이 높습니다.
3) Top-k 샘플링
Top-k 샘플링은 언어 모델이 생성한 확률 분포를 사용해, 가장 가능성이 높은 k개의 선택지 중에서 하나의 토큰을 선택하는 기법입니다. 예를 들어, k=3이라고 설정하면, 모델은 수많은 토큰 후보 중 확률이 가장 높은 1등, 2등, 3등 토큰만 남기고 나머지는 모두 버립니다. 그리고 그 세 토큰의 확률에 따라(예: 1등이 50%, 2등이 30%, 3등이 20%) 셋 중 하나를 선택하죠. 다시 말해, 50%의 확률로 1등 토큰을 생성하고, 30%의 확률로 2등 토큰을 생성하고, 20%의 확률로 3등 토큰을 생성하는 것입니다. 이를 통해 가장 그럴듯한 토큰 중에서 약간의 무작위성을 부여하여 더 창의적인 문장을 만들 수 있습니다.
이 무작위성을 조절하는 파라미터가 바로 '온도(temperature)'입니다. 온도 파라미터 𝑇가 0이면 항상 확률이 가장 높은 단어만 선택하므로 탐욕 탐색처럼 결정론적인(deterministic) 방식이 됩니다. 반대로 𝑇가 커질수록 확률분포에 따라 다양한 단어들이 선택될 가능성이 생깁니다. 창의적인 답변이 나올 가능성이 높아지는 거죠. 온도 파라미터(𝑇)에 따라 로짓(x)별 확률을 계산하는 수식은 다음과 같습니다.

여기서 x는 모델이 계산한 각 단어의 점수(로짓)이고, 𝑇가 바로 온도 파라미터입니다. 수식을 보면, 로짓 x를 온도 𝑇로 나누고 있다는 것을 알 수 있어요. 𝑇=0이면 k가 몇이든 상관없이 항상 확률 1인 토큰만 선택합니다(즉, 탐욕 탐색과 동일한 출력을 합니다). 𝑇=1이면 원래의 확률 분포를 사용해 토큰을 선택합니다. 𝑇 > 1 이면 확률 분포가 평평해져 top-k 내에서도 더 다양한 토큰을 선택하게 됩니다. 𝑇가 지나치게 커지면 엉뚱한 토큰을 선택할 수도 있겠죠.
4) Top-p 샘플링
Top-p 샘플링은 '핵 샘플링(Nucleus sampling)'이라고도 불리는데, 이 방식은 Top-k와는 약간 다른 접근법입니다. k개라는 개수를 정해두는 대신, 선택된 토큰들의 확률 합이 p값을 초과할 때까지 확률이 높은 순서대로 토큰을 선택하여 '핵(nucleus)'이라는 후보군을 만드는 방식입니다.
그러므로 Top-k 방식은 후보군의 개수가 항상 k개로 고정되어 있지만, Top-p 방식은 상황에 따라 후보군의 개수가 유동적으로 변합니다. 예를 들어, 다음 단어가 아주 확실한 상황에서는 후보가 1~2개만 될 수도 있고, 여러 단어가 비등한 확률을 갖는 애매한 상황에서는 후보가 10개 이상 될 수도 있죠. 이 덕분에 더 다양하고 창의적인 결과물을 얻을 수 있습니다.
I. 비용 효율적인 훈련, 추론, 적응, 압축 (Cost-Effective Training, Inference, Adaptation, Compression)
이번 파트에서는 LLM을 더 효율적으로 훈련하고 활용하기 위한 여러 기법에 대해 알아보겠습니다.
1) 최적화된 훈련 (Optimized Training)
LLM 훈련을 최적화하기 위한 여러 프레임워크가 있는데, 여기서는 주요 기법 두 가지를 소개하겠습니다.
ZeRO (제로)
첫 번째 주자는 ZeRO입니다. ZeRO는 'Zero Redundancy Optimizer(중복성 제로 최적화기)'의 약자입니다. 여러 개의 GPU를 사용해 거대 모델을 훈련할 때 발생하는 '메모리 중복' 문제를 해결하여 훈련 속도를 크게 향상시키는 기술입니다. 여러 명의 요리사(GPU)가 한 가지 요리(거대 모델)를 함께 만든다고 가정해봅시다. 기존 방식에서는 모든 요리사가 각자 똑같은 전체 레시피 책(모델 파라미터)과 모든 재료(데이터)를 가지고 있어야 해서 주방(메모리)이 꽉 차고 비효율적이었습니다. ZeRO는 이 레시피 책을 여러 부분으로 나눠, 각 요리사가 자기가 맡은 부분의 레시피만 가지고 있도록 역할을 분담시키는 방식이에요. 이를 통해 각 주방의 공간(메모리)을 크게 아낄 수 있죠. ZeRO는 데이터 및 모델 병렬 훈련에서 발생하는 메모리 중복을 제거하면서도, GPU 간의 통신량은 낮게 유지하여 훈련 효율을 크게 높였습니다. 이 덕분에 GPU 개수에 비례하여 모델 크기를 확장하는 것이 가능해졌습니다.
RWKV
다음으로 살펴볼 기술은 RWKV입니다. RWKV는 'Receptance Weighted Key Value'의 약자로, 이전의 ZeRO와는 조금 다르게, '훈련 방식'이 아닌 '모델 아키텍처'를 개선한 기법입니다. RWKV의 핵심은 트랜스포머의 장점과 RNN의 장점을 합치는 것입니다. RWKV는 훈련할 때는 트랜스포머처럼 병렬로 빠르게 학습하고, 추론할 때는 RNN처럼 메모리를 적게 쓰고 빠르게 답변을 생성하도록 설계되었습니다. 이러한 독창적인 구조 덕분에, RWKV는 수백억 개의 파라미터를 갖는 최초의 비-트랜스포머(non-transformer) 아키텍처가 되었습니다. 트랜스포머가 유일한 정답이 아닐 수 있다는 가능성을 보여준 중요한 사례죠.

2) 저차원 적응 (Low-Rank Adaption, LoRA)
LoRA는 파인튜닝 시에 훈련시켜야 할 파라미터의 수를 극적으로 줄여주는 기술입니다. LLM이 가진 전체 파라미터를 파인튜닝하면 엄청난 메모리와 계산 비용이 듭니다. LoRA는 바로 이 문제를 해결하기 위해 등장했어요. LoRA의 핵심 아이디어는, '사전 훈련된 거대 모델의 원래 가중치(weights)'와 '특정 작업에 맞게 파인튜닝된 후의 가중치' 사이의 차이(ΔW)는 비교적 단순한 구조('낮은 내재적 차원, low intrinsic rank')를 가질 것이라는 통찰에서 시작합니다. 거대한 명화 원본(사전 훈련된 모델)이 있다고 상상해볼까요. 이 그림을 '밤 분위기'로 살짝 바꾸고 싶을 때(파인튜닝), 그림 전체를 처음부터 다시 그릴 필요는 없죠. 대신, '푸른색 옅은 필터'와 '어두운 그림자 효과'를 내는 두 개의 얇은 투명 필름(두 개의 작은 행렬)만 덧씌우면 됩니다. LoRA는 바로 이 두 개의 얇은 필름만 학습시키는 방식입니다. 원본 그림은 건드리지 않고(frozen) 그대로 두죠.
수학적으로, 이 '차이(ΔW)'는 두 개의 훨씬 작은 행렬(A와 B)의 곱, 즉 BA로 표현할 수 있습니다. 수식으로 표현하면 아래와 같습니다.
W₀ + ΔW = W₀ + BA
여기서 W₀는 사전 훈련된 모델의 가중치이고, ΔW는 '사전 훈련된 거대 모델의 원래 가중치'와 '특정 작업에 맞게 파인튜닝된 후의 가중치' 사이의 차이입니다. 즉, 파인튜닝 후 가중치가 얼마나 바뀌었는지를 나타내는 값이죠. W₀는 이미 알고 있는 값이므로 ΔW만 구할 수 있다면 파인튜닝 효과를 얻을 수 있다는 말이에요. 그런데 만약 ΔW가 BA와 거의 같다면, 그리고 B와 A 각각이 훨씬 작은 행렬이라면, BA만 잘 학습하면 파인튜닝 효과를 얻을 수 있게 됩니다. 그래서 LLM이 가진 전체 파라미터에 대해 파인튜닝하기보다는 훨씬 계산 비용이 적게 드는 BA만 학습하자는 의미입니다.

그래서 LoRA는 거대한 원본 행렬(W₀)은 그대로 두고, 이 두 개의 작은 행렬 A와 B만 새로 학습시킵니다. 이 덕분에 훈련이 훨씬 빠르고, 메모리를 적게 사용하며, 결과물로 나오는 모델의 가중치(A와 B 행렬)도 수백 MB 수준으로 아주 작아져서 저장하고 공유하기가 매우 쉬워집니다.
3) 지식 증류 (Knowledge Distillation)
LLM을 가볍게 만드는 또 다른 기술은 지식 증류(Knowledge Distillation)입니다. 지식 증류는 더 크고 똑똑한 '교사(선생님)' 모델의 지식을, 더 작고 가벼운 '학생' 모델에게 전수하여 가르치는 기법입니다. 쉽게 말해, 더 큰 모델이 가진 지식을 추출(증류, distill)해, 작은 모델에게 전수(transfer)하는 기법입니다. 때로는 하나의 교사 모델이 아니라, 여러 교사 모델의 지식을 학생 모델에게 전수하기도 합니다. 이 방식을 통해 우리는 거대 모델의 성능은 최대한 유지하면서도, 엣지 디바이스(예: 스마트폰)에서도 작동할 수 있는 작고 빠른 모델을 만들 수 있습니다. 아래 그림은 학생 모델(student model)이 교사 모델(teacher model)로부터 지식 증류 방식으로 어떻게 학습하는지를 보여주는 그림입니다.

지식 증류의 종류는 세 가지입니다. 응답 증류, 특징 증류, 그리고 API 증류가 있죠. 다시 말해, 지식은 응답 증류, 특징 증류, API 증류라는 여러 다른 형태의 학습을 통해 전달될 수 있습니다.
- 응답 증류(response distillation): 응답 증류 방식은 오직 교사 모델의 최종 결과물(outputs)에만 관심을 가집니다. 학생 모델이 교사 모델과 똑같은 결과물을 만들어내도록 훈련을 하는 거죠. 예측이라는 의미에서 비슷하게 수행하는 방법을 가르치려고 하는 거에요. 마치 학생이 교사의 '최종 답안지'만 보고 그대로 따라 쓰면서 학습하는 것과 같아요. 과정은 모르지만, 결과물을 똑같이 만들어내는 훈련을 하는 겁니다.
- 특징 증류(feature distillation): 이 방식은 최종 결과물뿐만 아니라, 교사 모델이 정답을 찾아가는 중간 계산 과정까지 학습하여, 학생 모델이 교사 모델의 '사고방식'을 더 깊이 있게 배우도록 하는 방식입니다. 그러므로 중간 레이어(intermediate layers)까지 학습하게 됩니다. 이것은 학생이 교사의 '최종 답안지'뿐만 아니라, 그 답을 이끌어내기까지의 '상세한 풀이 과정'까지 함께 보면서 학습하는 것과 같아요. 이를 통해 학생은 단순히 답을 외우는 것을 넘어, 문제를 푸는 근본적인 원리를 배울 수 있게 되죠.
- API 증류(API distillation): 마지막 방식은 API 증류입니다. 이 방식은 (OpenAI처럼) API 형태로만 제공되어 모델의 내부를 볼 수 없는, 비공개 LLM의 답변을 활용하여 학생 모델을 훈련시키는 방식입니다. 작동 원리는 '응답 증류'와 유사합니다. 비공개 LLM에게 질문을 던지고 받은 답변을 '정답'으로 삼아, 학생 모델이 그 답변을 따라 하도록 학습시키는 거죠. 다만 이 방식에는 몇 가지 한계가 있습니다. 보통 유료 API를 사용해야 하고, API 제공사의 정책(예: 우리 API로 만든 모델로 우리와 경쟁하지 마시오)에 따라 사용에 제약이 있을 수 있습니다.
4) 양자화 (Quantization)
양자화(quantization)는 행렬 연산의 정밀도(precision)를 낮추어, 모델의 크기를 줄이고 속도를 빠르게 만드는 기술입니다. 컴퓨터에서 숫자를 표현할 때는 정밀도에 따라 사용하는 비트(bit) 수가 다릅니다. 예컨대, 소수점까지 아주 세밀하게 표현하는 32비트 실수(Float-32)는 정확하지만, 그만큼 많은 공간을 차지하고 계산도 느리죠. 반면, 정수만 표현하는 8비트 정수(Int-8)는 표현 범위는 좁지만 훨씬 가볍고 빠릅니다. 양자화는 바로 이 Float-32를 Int-8과 같은 더 낮은 비트로 변환해, 성능 하락은 최소화하면서 속도를 빠르게 만드는 과정입니다. 양자화는 적용 시점에 따라 크게 두 가지 방식으로 나뉩니다.
- 훈련 후 양자화(post-training quantization): 이미 훈련이 완료된 모델을 양자화하는 방식입니다.
- 양자화 인식 훈련(quantization-aware training): 훈련 과정 자체에 양자화 기준을 포함시켜, 처음부터 양자화된 모델을 만들고 최적화하는 방식입니다. 이렇게 하면 훈련을 마친 모델은 별도로 훈련 후 양자화를 거칠 필요가 없습니다. 게다가 훈련 과정에서 양자화가 되었기 때문에 성능도 훈련 후 양자화보다 더 좋을 가능성이 있습니다.
이상으로 LLM을 어떻게 훈련하는지 전 과정을 모두 알아보았습니다. 다음 장에서는 LLM을 '어떻게 사용하고 더 강력하게 만드는지'에 대해 알아봅니다.
IV. LLM은 어떻게 사용되고, 어떻게 더 강력하게 만드는가? (HOW LLMs ARE USED AND AUGMENTED)
훈련이 끝난 LLM은 기본적인 프롬프트를 통해 다양한 작업을 수행할 수 있습니다. 하지만, LLM의 잠재력을 최대한 활용하거나 그 단점을 해결하려면, 외부 수단을 이용해 모델을 '증강(augment)'시켜야 할 필요가 있습니다. 이 장에서는 먼저 LLM의 주요 단점, 특히 '환각(hallucination)' 현상에 대해 깊게 살펴볼 것입니다. 그다음, 프롬프트 기법과 여러 증강 접근법이 어떻게 이러한 단점을 해결할 뿐만 아니라, LLM의 능력을 확장시켜 외부 세계와 상호작용하는 완전한 'AI 에이전트(AI agent)'로까지 발전할 수 있는지를 설명할 것입니다.
이 장에서는 크게 다음과 같은 주제들을 다룹니다.
- LLM의 한계 (LLM limitations): LLM이 가진 근본적인 약점들을 알아봅니다.
- 프롬프트 엔지니어링 (Using LLMs: Prompt Design and Engineering): LLM을 잘 사용하기 위한 '질문법'을 배웁니다.
- 외부 지식으로 LLM 증강하기 - RAG (Augmenting LLMs through external knowledge - RAG): LLM에게 '오픈북 시험'을 보게 하는 방법을 알아봅니다.
- 외부 도구 사용하기 (Using External Tools): LLM에게 '계산기'나 '검색 엔진' 같은 도구를 쥐여주는 방법을 살펴봅니다.
- LLM 에이전트 (LLM Agents): 이 모든 것을 합쳐, 스스로 생각하고 행동하는 AI를 만드는 법을 살펴봅니다.
A. LLM의 한계 (LLM limitations)
LLM은 매우 강력하지만, 근본적인 한계점들을 가지고 있습니다. 이 한계들을 이해해야만 LLM을 더 효과적으로 활용하고 보완할 수 있죠. 다음과 같은 주요 한계점이 있어요.
- 상태/메모리 부족: LLM은 이전 대화 내용을 기억하지 못합니다. 매번 새로운 프롬프트를 받을 때마다 이전 대화는 잊어버리죠.
- 일관성 부족 (확률적 특성): 동일한 프롬프트를 여러 번 입력해도, 매번 다른 답변이 나올 수 있습니다. '온도' 같은 매개변수로 변동성을 줄일 수는 있지만, 이런 확률적인 특성은 내재적인 한계입니다.
- 오래된 정보 (stale information): LLM은 훈련 데이터에 포함된 정보만 알고 있습니다. 따라서 실시간 정보나 최신 사건에 대해서는 알지 못하며, 스스로 외부 데이터에 접근할 수도 없습니다.
- 거대한 크기: 모델이 매우 크기 때문에 훈련과 서비스 운영을 위해서는 아주 비싼 GPU 장비가 많이 필요합니다. 게다가 모델이 크기 때문에 때로는 응답 속도가 느려지기도 합니다.
- 환각 (Hallucination, 할루시네이션): LLM은 '진실'이 무엇인지 모릅니다. 그렇기 때문에 그럴듯하지만 사실이 아니거나, 훈련 데이터에 없던 내용을 마치 사실인 것처럼 꾸며서 말하는 경우가 많습니다.
위와 같은 한계점들이 모두 다 문제가 될 수 있지만, 특히 주목을 많이 받고 있는 '환각(Hallucination)' 현상에 대해 더 깊이 알아보겠습니다.
환각 (Hallucination)
LLM 분야에서 '환각'이라는 현상은 큰 관심사입니다. "Survey of Hallucination in Natural Language Generation"라는 논문에서는 LLM의 환각을 '말도 안 되거나(nonsensical) 주어진 출처에 충실하지 않은(unfaithful) 콘텐츠를 생성하는 것'으로 정의합니다. 이 환각이라는 용어는 원래 심리학 용어지만, 인공지능 분야에서 그 의미를 빌려와 사용하게 된 것입니다. LLM의 환각은 크게 두 가지 유형으로 나눕니다.
- 본질적(내재적) 환각 (Intrinsic Hallucinations): 생성된 내용이 출처(source)의 내용과 직접적으로 충돌하는 경우입니다. 사실 관계에 오류를 만들거나 논리적 모순을 일으키는 것이죠.
- 외재적 환각 (Extrinsic Hallucinations): 생성된 내용이 출처와 충돌하지는 않지만, 검증할 수 없는(unverifiable) 내용을 포함하는 경우입니다. 추측성이거나 확인할 수 없는 요소들이 여기에 해당합니다. 예를 들어, LLM에게 '사과는 빨갛다'는 정보만 알려주었는데, LLM이 '사과는 빨갛고 거칠다'라고 답변했다면, '거칠다'라는 정보가 외재적 환각에 해당하죠. 주어진 출처의 내용('사과는 빨갛다')과 충돌하지는 않지만, 그 출처만으로는 해당 내용을 확인할 수 없기 때문이에요.
'출처'의 정의는 작업에 따라 다릅니다. 예를 들어, 대화형 작업에서는 '출처'가 모델이 학습한 '세상 지식(world knowledge)' 전체를 의미하지만, 문서 요약 작업에서는 '출처'가 입력한 원문 텍스트 자체를 의미합니다. 따라서 환각의 영향은 어떤 작업을 하느냐에 따라 크게 달라지죠. 가령, 시를 쓰는 것과 같은 창의적인 작업에서는 사실과 다른 내용(환각)이 오히려 유익하거나 허용될 수 있습니다.
LLM에서 환각이 발생하는 근본적인 이유는, 인터넷이나 책 등 매우 다양한 데이터로 모델을 훈련하는데, 모델은 진실과 거짓이 무엇인지 모른 채 확률적으로 가장 그럴듯한 다음 단어를 예측하도록 설계되었기 때문입니다. 진실에 대한 개념 자체가 없는 거죠. 지시 튜닝이나 RLHF 같은 기술을 활용해 사실에 가까운 답변을 하도록 유도하고 있지만, 이러한 확률적인 특성과 그에 따른 한계는 여전히 남아있습니다. "Sources of Hallucination by Large Language Modles on Inference Tasks"라는 논문에서는 환각의 원인을 크게 두 가지로 보는데, 바로 '진실성 편향(veracity prior, 그럴듯하면 사실이라고 믿는 경향)'과 '상대적 빈도 휴리스틱(relative frequency heuristic, 자주 본 것을 사실이라고 믿는 경향)'라고 합니다.
LLM의 환각 현상을 측정하려면 통계적 측정 지표와 모델 기반 측정 지표를 조합하여 사용해야 합니다.
통계적 지표 (Statistical Metrics)
- ROUGE(루지), BLEU(블루): 생성한 텍스트와 원본 텍스트 사이의 유사도를 평가하는 가장 일반적인 지표입니다. 주로 내재적 환각을 잡아내는 데 초점을 맞춥니다.
- PARENT(패런트), Knowledge F1: 구조화된 지식 출처(예: 표)가 있을 때 사용하는 지표입니다. 이러한 지표들은 효과적이긴 하지만, 문법적, 의미적인 미묘한 차이를 잡아내는 데는 한계가 있습니다.
모델 기반 지표 (Model-Based Metrics)
통계적 지표가 단어나 문장의 표면적인 유사성만 보는 한계를 극복하기 위해, 다른 AI 모델을 '평가자'로 사용하는 방식이 바로 모델 기반 지표입니다.
- IE 기반 지표 (IE-Based Metrics): IE는 '정보 추출(Information Extraction)'의 약자입니다. 이 방식은 먼저 정보 추출 모델을 사용하여, 생성된 텍스트와 원본 텍스트에 담긴 핵심 지식을 '(주어, 동사, 목적어)'와 같은 간단한 '관계 튜플(relational tuples)'로 각각 추출합니다. 그 후, 이 두 튜플 집합을 비교하여 얼마나 일치하는지를 평가하는 것입니다.
- QA 기반 지표 (QA-Based Metrics): QA는 '질의응답(Question-Answering)'의 약자에요. 이 방식은 생성된 텍스트를 바탕으로 여러 질문을 만들고, 원본 텍스트를 참고하여 그 질문에 답하게 합니다. 생성된 답변과 원본 텍스트의 답변이 얼마나 일치하는지를 통해 환각 여부를 판단하는 질의응답 프레임워크를 사용합니다.
- NLI 기반 지표 (NLI-Based Metrics): NLI는 '자연어 추론(Natural Language Inference)'의 약자로, 이 방식은 NLI 데이터셋을 사용하여, 주어진 '전제(premise, 원본 텍스트)'를 바탕으로 생성된 '가설(hypothesis, 생성된 텍스트)'이 참인지 거짓인지를 평가합니다.
- 충실도 분류 지표 (Faithfulness Classification Metrics): 이 방식은 특정 작업에 맞는 데이터셋을 직접 만들어, 더 미묘한 차이까지 평가하는 정교한 평가 기법입니다.
이처럼 자동화된 지표들이 발전했음에도 불구하고, 환각 현상을 가장 정확하게 판단하는 방법은 여전히 인간의 판단(human judgment)입니다. 여기에는 주로 두 가지 방법론이 있어요.
- 점수 매기기 (Scoring): 사람이 직접 LLM이 생성한 결과물을 보고, 정해진 척도(예: 1점부터 5점까지)에 따라 환각의 수준을 평가하여 점수를 매기는 방식입니다.
- 비교 분석 (Comparative Analysis): 생성된 결과물을 기준이 되는 원본이나 정답과 비교하여 평가하는, 더 주관적인 평가 방식입니다.
최근에는 FactScore와 같은 새로운 지표도 등장했습니다. 이 지표는 LLM이 생성한 긴 글을 atomic facts라는 아주 작은 단위로 나눈 뒤, 각 사실이 원본 출처에 의해 뒷받침되는지를 하나하나 확인해 점수를 매기는 방식입니다.
환각은 아주 복잡한 문제이기 때문에, 환각을 줄이려면 다면적인 맞춤형 전략이 필요합니다. 몇 가지 전략을 소개하겠습니다.
- 제품 설계 및 사용자 상호작용 전략: 애초에 환각이 발생하기 어려운 명확한 사례를 사용하거나, 사용자가 피드백을 쉽게 줄 수 있는 장치를 만드는 등의 방법이 있습니다.
- 데이터 관리 및 지속적인 개선: 모델이 생성한 환각 사례들을 꾸준히 추적하고 분석하여, 이를 바탕으로 모델을 계속해서 개선해나가는 것이 중요합니다.
- 프롬프트 엔지니어링 및 메타프롬프트 설계: 다음 섹션에서 살펴볼 '검색 증강 생성(Retrieval Augmented Generation, RAG)'과 같은 기술을 이용하면 환각을 직접적으로 해결하는 데 도움을 줄 수 있습니다.
- 환각 완화를 위한 모델 선택 및 구성: 예를 들어, 더 큰 모델을 사용하고 온도 파라미터를 낮게 설정하면 환각이 줄어드는 경향이 있습니다. 또한, 우리가 앞서 배운 RLHF나 특정 분야 데이터로 파인튜닝하는 것 역시 환각을 줄이는 방법입니다.
B. 프롬프트 디자인 및 엔지니어링 (Prompt Design and Engineering)
먼저 '프롬프트(prompt)'란 무엇일까요? 프롬프트는 생성형 AI 모델의 결과물을 유도하기 위해 사용자가 제공하는 텍스트 입력입니다. 단순한 질문부터 아주 상세한 설명이나 구체적인 작업 지시까지 다양하죠. 프롬프트는 대체로 지시(instructions), 질문(questions), 입력 데이터(input data), 예시(examples)로 이루어져 있습니다. 이 중에서 모델이 원하는 답변을 하도록 유도하기 위해서는 '지시' 또는 '질문'을 반드시 포함해야 합니다. 나머지 요소들은 선택적으로 사용하면 됩니다.
프롬프트 엔지니어링은 LLM과 같은 생성형 AI 모델과 상호작용하여 원하는 결과물을 만들어가기 위해 꼭 필요한 분야입니다. 빠르게 발전하고 있는 분야죠. 프롬프트 엔지니어링의 본질은 최적 프롬프트를 만드는 것에 있습니다. 단순히 모델에게 지시하는 것을 넘어, 모델의 능력과 한계, 그리고 모델이 작동하는 맥락에 대해서도 어느 정도 이해를 해야 하죠.
프롬프트 엔지니어링은 단순히 프롬프트를 구성하는 것을 넘어섭니다. 여기에는 해당 분야의 전문 지식(domain knowledge), AI 모델에 대한 이해, 그리고 다양한 맥락에 맞게 프롬프트를 조정하는 체계적인 접근법이 모두 필요합니다. 또한, '템플릿(templates)'을 만드는 것도 프롬프트 엔지니어링에 해당합니다. 예를 들어, 사용자 데이터에 기반한 개인화된 응답을 생성해야 한다고 해봅시다. 이때 "[사용자 이름] 님, 안녕하세요. 지난번 구매하신 [상품명]은 만족스러우셨나요?"와 같은 템플릿을 만들어두고, [사용자 이름]과 [상품명] 부분에 실제 정보를 동적으로 채워 넣는 방식을 사용할 수 있죠.
더욱이, 프롬프트 엔지니어링은 반복적이고 탐색적인 과정입니다. 마치 전통적인 머신러닝에서 모델 평가와 하이퍼파라미터 튜닝을 반복하는 과정과 비슷해요.
이어서 가장 대중적인 프롬프트 엔지니어링 기술들을 자세히 알아보겠습니다.
1) 생각의 연쇄 (Chain of Thought, CoT)
생각의 연쇄(Chain of Thought, CoT) 기법은 구글 연구원들의 논문 "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models"에서 처음 등장한 개념입니다. CoT는 'LLM은 다음 토큰을 예측하는 데는 능숙하지만, 단계별 추론을 하도록 설계되지는 않았다'는 점에 유념한 기법입니다. 즉, CoT는 LLM이 정답을 바로 내놓게 하는 대신, 정답에 도달하기까지의 '생각하는 과정'을 단계별로 보여주도록 유도하는 방식입니다. 추론 과정을 명시적(explicit)으로 설명하도록 만드는 거죠. 그러면 모델이 더 논리적이고 합리적인 결과물을 출력할 수 있게 됩니다. 이것은 마치 우리가 수학 문제를 풀 때, 답만 덜렁 쓰는 것이 아니라 '풀이 과정'을 함께 적는 것과 같아요. 풀이 과정을 단계별로 적다 보면, 중간에 실수를 하더라도 발견하기 쉽고, 더 논리적으로 정답에 도달할 수 있죠. CoT는 LLM에게 바로 이 '풀이 과정'을 쓰게 만드는 기술이라고 보면 돼요.
CoT 프롬프팅의 주요 형태 다음과 같습니다.
- 제로샷 CoT (Zero-Shot CoT): LLM에게 "단계별로 생각해봐(think step by step)"라고 지시하는 CoT 방식입니다. 모델이 스스로 문제를 분해하고 추론의 각 단계를 명확히 표현하도록 유도하는 프롬프팅 방법이죠.
- 수동 CoT (Manual CoT): 단계별 추론 과정을 예시로 모델에게 보여주는 CoT 방식입니다. 이 방식이 더 효과적인 결과를 낳지만, 일일이 예시를 수작업으로 입력해줘야 하므로 그만큼 어려움이 있습니다. 게다가 추론 과정 예시를 입력하는 과정에서 오류가 생기기도 쉽습니다.
- 자동 CoT(automatic CoT): 수동 CoT의 한계(수작업으로 예시를 입력해야 하니, 시간도 오래 걸리고 오류가 발생할 가능성도 높다는 문제)를 해결하기 위해 등장한 CoT 방식입니다.
2) 생각의 나무 (Tree of Thought, ToT)
두 번째 주요 프롬프트 기법인 생각의 나무(Tree of Thought, ToT)로 넘어가 보겠습니다. ToT는 사람들이 가장 그럴듯한 결론에 도달하기 전에, 다른 여러 해결책이나 추론 과정을 고려하는 방식에서 영감을 받았습니다. LLM이 하나의 '생각의 연쇄'를 따라가는 대신, 여러 개의 '생각의 나무'로 가지(branch)를 뻗어 나가도록 유도하는 방식이죠. 여기서 각 가지(branch)는 문제를 해결하는 각기 다른 추론 경로(사고방식)를 나타내요.
ToT 기법에서 아주 중요한 부분은 바로 여러 추론 경로들을 평가하는 것입니다. LLM은 여러 생각의 가지들을 생성하면서, 동시에 각 경로의 타당성과 관련성을 평가합니다. 이러한 실시간 분석과 비교 과정을 통해, 모델은 가장 일관성 있고 논리적인 최종 답변을 선택하게 되죠. ToT는 단일한 추론 경로만으로는 해결하기 어려운, 복잡한 문제에서 특히 유용합니다. 사람도 복잡한 문제를 해결할 때 다양한 가능성을 검토합니다. 마찬가지로 ToT 기법도, LLM이 (결론에 도달하기 전에 다양한 가능성을 고려하는) 인간의 문제 해결 방식을 모방하도록 합니다.
3) 자기-일관성 (Self-Consistency)
다음으로 살펴볼 프롬프팅 기법은 자기-일관성(Self-Consistency)입니다. 자기-일관성 기법은, LLM에게 같은 질문을 여러 번 던져서 여러 개의 다른 답변을 얻어낸 뒤, 그 중 가장 많은 답변을 최종 답변으로 선택하는 앙상블 기반의 방법입니다. 일종의 '집단 지성'을 활용하는 방법이에요. 구체적인 작동 방식은 이렇습니다. 먼저, CoT 프롬프팅을 사용해 모델이 여러 개의 다양한 추론 과정을 생성하도록 합니다. 그 후, 생성된 여러 결과물들 중에서 다수결의 원칙에 따라 가장 많이 등장한 답변을 최종 답변으로 선택합니다. 하나의 답변만 보는 것보다 훨씬 더 안정적이고 정확한 결과를 얻게 해주는 방식이죠.
LLM이 생성한 여러 답변들 사이의 일관성을 측정하는 구체적인 방법들에는 여러 가지가 있습니다. 가장 일반적인 방법은 답변들 사이의 내용이 얼마나 겹치는지(overlap)를 분석하는 것입니다. 다른 방법으로는, 단순히 단어가 겹치는 것을 넘어 의미가 얼마나 비슷한지를 비교(semantic similarity)하거나, BERT-score나 n-gram 중복도와 같은 더 정교한 기술을 사용하는 방법이 있습니다. 이러한 측정 방법들은 LLM이 생성한 답변들이 서로 얼마나 일치하는지를 수치화(quantifying)해줍니다.
자기-일관성 기법은 정보의 진실성이 중요한 분야에서 주로 활용됩니다. 사실 확인(fact-checking)을 해야 할 때 특히 중요하죠. 자기-일관성 기법을 잘 활용하면 LLM의 신뢰도를 향상할 수 있습니다.
4) 리플렉션 (Reflection)
다음으로 살펴볼 프롬프팅 기법은 리플렉션(Reflection)입니다. 리플렉션은 LLM이 자신의 결과물을 스스로 평가해서 수정하도록 유도하는 방법입니다. 일종의 자기-평가(self-evaluation)를 하는 것이죠. 조금 더 구체적으로 말하면 모델이 초기 답변을 생성한 후, 그 답변이 사실에 맞는지, 논리적으로 일관성이 있는지, 질문과 관련이 있는지를 스스로 '돌아보도록(reflect)' 프롬프트를 주는 기법이 바로 리플렉션 기법입니다. 이러한 자기 성찰 과정을 통해, 모델은 스스로 잠재적인 오류나 개선점을 찾아낼 수 있습니다. '생성(generation) → 성찰(reflection) → 수정(revision)'이라는 반복적인 과정을 통해 답변의 품질과 신뢰도를 높이는 거에요. 즉, 모델에게 '네가 쓴 답을 다시 한번 읽어보고 이상한 점은 없는지 확인해봐'라고 시키는 것과 같습니다.
5) 전문가 프롬프팅 (Expert Prompting)
이어서 살펴볼 프롬프팅 기법은 바로 전문가 프롬프팅(Expert Prompting)입니다. LLM이 다양한 분야의 전문가 역할을 시뮬레이션하도록 유도해 답변의 품질을 높이는 방법이죠. 프롬프트에 '너는 30년 경력의 경제학자야' 또는 '너는 셰익스피어 전문가야'와 같이 특정 전문가의 역할(persona)을 부여하면, 모델은 그에 맞는 톤과 깊이 있는 지식을 바탕으로 답변을 생성합니다. 여기서 한 단계 더 나아간 전략이 바로 다중 전문가(multi-expert) 접근법입니다. 이 방식은 LLM에게 여러 전문가의 관점에서 답변을 고려하게 한 뒤, 그 답변들을 종합하여 더 포괄적이고 균형 잡힌 최종 답변을 만들도록 합니다. 예를 들어, '새로운 스마트폰을 출시하는 전략'에 대해 질문할 때, '마케팅 전문가', '엔지니어', '디자이너'의 관점을 각각 물어보고 그 의견들을 종합하여 최종 결론을 내리는 것과 같아요. 이를 통해 한 가지 관점에 치우치지 않고, 더 깊이 있고 균형 잡힌 답변을 얻을 수 있습니다.
6) 체인 (Chains)
체인 방식은 복잡한 작업을 처리하기 위해 여러 구성 요소를 차례로 연결하는 방법입니다. 각각의 구성 요소가 특정 기능을 수행하고, 한 구성 요소의 결과물(output)이 다음 구성 요소의 입력(input)이 되는 워크플로우를 구축하는 거라고 보면 됩니다. 이러한 end-to-end 방식에서는 각 단계를 특정 작업에 맞게 조정할 수 있으므로, 더 복잡하고 미묘한 처리를 가능하게 합니다. 마치 '자동차 공장의 조립 라인'과 같아요. 첫 번째 라인에서 차체를 만들면, 그 결과물이 두 번째 라인으로 넘겨 여기에 엔진을 달고, 다시 세 번째 라인으로 전달해 도색을 하는(최종 정리) 것과 같죠. 이처럼 LLM 호출을 순서대로 연결하여 하나의 복잡한 작업을 완료하는 것이죠. 체인을 설계하는 것은 복잡하기 때문에, 'PromptChainer'와 같은 시각화 도구가 개발되기도 했습니다.
7) 레일 (Rails)
다음 기법은 레일(Rails)로, 미리 정의한 규칙이나 템플릿을 통해 LLM의 결과물이 특정 방향에 맞게 나오도록 제어하는 방법입니다. 모델의 응답이 특정 기준을 따르도록 보장하는 기법이죠. 그 결과 응답의 정확성, 안전성, 관련성을 향상할 수 있습니다. LLM이 응답을 생성할 때 준수해야 할 할 '가이드라인'을 설정하는 것이 선행되어야 합니다. 기차가 '레일' 위로만 달릴 수 있듯이, LLM의 답변이 우리가 정해놓은 '안전한 길'을 벗어나지 않도록 제어하는 장치라고 생각하시면 됩니다. 레일은 목적에 따라 다양하게 설계할 수 있습니다.
- 토픽 레일 (Topical Rails): LLM이 특정 주제나 영역을 벗어나지 않도록 보장하는 레일 기법입니다.
- 사실 확인 레일 (Fact-Checking Rails): 거짓되거나 오해의 소지가 있는 정보의 생성을 최소화하는 것을 목표로 하는 기법입니다.
- 탈옥 방지 레일 (Jailbreaking Rails): LLM이 자체 운영 제약이나 가이드라인을 우회하려는 응답을 생성하는 것을 방지하는 기법입니다.
8) 자동 프롬프트 엔지니어링 (Automatic Prompt Engineering, APE)
지금까지 우리는 '어떻게 하면 더 좋은 프롬프트를 만들까?'를 고민했습니다. 그런데 자동 프롬프트 엔지니어링(Automatic Prompt Engineering, APE)은 여기서 한 발 더 나아가, "프롬프트 자체를 LLM이 만들게 하면 어떨까?"라는 똑똑한 아이디어를 제시합니다. 자동 프롬프트 엔지니어링은 LLM을 자기-참조적(self-referential)으로 사용해, 프롬프트 설계 과정을 자동화하고 최적화하는 데 초점을 맞춥니다. 즉, 모델을 이용해서 프롬프트를 생성하고, 점수를 매기고, 다시 개선하는 과정을 반복하는 겁니다. 이 과정을 통해 더 품질 좋은 프롬프트를 설계할 수 있습니다.
자동 프롬프트 엔지니어링 방법론은 다음과 같이 세 가지 핵심 단계로 나눌 수 있습니다.
- 프롬프트 생성 (Prompt Generation): 주어진 작업이나 목표에 따라, LLM이 다양한 프롬프트 후보들을 생성합니다.
- 프롬프트 채점 (Prompt Scoring): 생성한 각각의 프롬프트가 얼마나 효과적인지를 평가합니다. 이때 평가 기준은 '명확성', '구체성', 그리고 '원하는 답변을 이끌어낼 가능성' 등이 될 수 있죠.
- 개선 및 반복 (Refinement and Iteration): 이 평가 점수를 바탕으로 프롬프트는 고품질로 개선되며, 이 과정은 계속해서 반복됩니다.
이것으로 '프롬프트 엔지니어링'에 대한 긴 여정을 마쳤습니다. 우리는 LLM의 능력을 최대한 끌어내기 위한 다양한 '질문의 기술'들을 배웠습니다. LLM에게 생각하는 과정을 쓰게 하는 CoT부터, 여러 가능성을 탐색하는 ToT, 다수결로 답을 찾는 자기-일관성, 스스로 답을 검토하게 하는 리플렉션, 전문가 역할을 부여하는 전문가 프롬프팅, 여러 단계를 연결하는 체인, 답변의 가이드라인을 정하는 레일, 그리고 프롬프트 자체를 만들게 하는 APE까지, 아주 다양하고 흥미로운 기법들을 살펴보았죠.
이제 LLM의 성능을 끌어올리기 위한 또 다른 강력한 방법으로 넘어가 보겠습니다. 지금까지가 LLM에게 '질문을 잘하는 법'을 가르치는 것이었다면, 다음 단계는 LLM에게 '오픈북 시험을 보는 법'을 가르치는 것입니다.
C. 외부 지식을 통해 LLM 증강하기 - RAG (Augmenting LLMs through external knowledge - RAG)
사전 훈련된 LLM의 단점 중 하나는 최신 정보나 비공개 정보에 접근할 수 없다는 점입니다. 이 문제를 해결하기 위해 등장한 기술이 바로 RAG(Retrieval Augmented Generation, 검색 증강 생성)입니다. RAG의 작동 방식은 아래 그림과 같습니다.

- 먼저, 사용자의 프롬프트에서 검색할 '쿼리(query)'를 추출합니다.
- 그다음, 이 쿼리를 사용해 외부 지식 출처(예: 검색 엔진, 회사 내부 데이터베이스 등)에서 관련 정보를 '검색(retrieve)'합니다.
- 이렇게 검색해온 관련 정보를 원래 프롬프트에 추가하여 LLM에게 전달하면, LLM은 이 정보를 참고해 최종 답변을 '생성(generate)'합니다. 최종 답변을 '증강(augmente)'하는 과정이죠.
'오픈북 시험'과 같은 원리입니다. 보다시피 RAG 시스템은 검색(Retrieval), 생성(Generation), 증강(Augmentation)이라는 세 가지 요소로 이루어져 있습니다.
RAG-인식 프롬프트 기법 (RAG-aware prompting techniques)
RAG가 워낙 중요한 기술이다 보니, RAG를 더 효과적으로 사용하기 위한 특별한 프롬프트 기법들도 개발되었습니다. 그중 하나가 바로 FLARE(Forward-looking Active Retrieval Enhanced Generation, 미래 예측 능동 검색 증강 생성)입니다. 기존의 RAG는 답변을 생성하기 전에, 처음 프롬프트 질문을 기반으로만 딱 한 번 검색합니다. 이와 달리 FLARE(플레어)는 답변을 생성하는 도중에 모델이 '앞으로 필요한 정보'를 미리 예측해서 검색을 수행하는 과정을 반복(즉, 예측과 정보 검색을 반복)하며, 이러한 정보를 결합하는 방식입니다. 덕분에 답변의 정확성과 관련성이 높아집니다. FLARE의 작동 방식은 이렇습니다.
- 미래 정보 필요성 예측: 답변을 생성하는 과정에서 모델이 '앞으로 어떤 정보가 필요할지'를 예측합니다. 이때 추가적인 검색이 필요한지 평가를 합니다. 다음 토큰의 최대 확률이 특정 임계값 이하라면 다음 내용을 이어서 생성하기 전에 검색을 해야겠다는 결정을 합니다.
- 능동적 검색: 검색 조건이 충족되면, 예측한 필요 정보를 바탕으로 외부 검색 시스템이나 벡터 DB에서 정보를 검색을 합니다.
- 재생성/정제: 찾아낸 정확한 정보를 프롬프트에 주입(context injection)해서 원래 쓰려던 문장을 이어서 작성하거나 더 정확하게 다듬습니다.
FLARE는 바로 이 과정을 답변 생성이 끝날 때까지 계속 반복하여, 문장 하나하나를 가장 최신의 정확한 정보로 채워나가는 동적인 방식입니다.
D. 외부 도구 사용하기 (Using External Tools)
이번에는 외부 도구를 활용하는 방법을 알아보겠습니다. 사실 방금 다룬 RAG, 즉 외부 지식 출처에서 '검색'하는 것도 '도구'를 사용하는 것의 한 종류라고 할 수 있습니다. 이 섹션에서는 그 개념을 더 넓게 확장합니다. 여기서 말하는 도구(Tools)란 LLM이 활용할 수 있는 외부의 서비스를 의미합니다. 이러한 도구들 덕분에 LLM이 수행할 수 있는 작업의 범위가 넓어졌습니다. 단순한 정보 검색을 넘어, 외부 데이터베이스나 API와의 복잡한 상호작용까지 할 수 있기 때문이죠.
단순히 도구를 사용하는 것을 넘어, "Toolformer: Language Models Can Teach Themselves to Use Tools"라는 논문에서는 LLM이 언제, 어떤 도구를, 어떤 파라미터로 사용해야 할지 스스로 결정하도록 훈련시키는 방법을 보여주었습니다. 예를 들어, 질문을 보고 '아, 이건 계산이 필요하니 계산기 API를 호출해야겠다' 또는 '이건 최신 정보가 필요하니 검색 엔진 API를 호출해야겠다'라고 스스로 판단하고 행동하는 거죠. 최근에는 버클리 대학의 연구진이, 스스로 API를 사용하도록 훈련된 Gorilla(고릴라)라는 새로운 LLM을 개발했습니다. Gorilla는 GPT-4보다 더 나은 성능을 보여주기도 했습니다.
도구-인식 프롬프트 기법 (Tool-aware prompting techniques)
RAG에서 다뤘던 것과 유사하게 여기서도 도구-인식 프롬프트 기법이 있습니다. 여러 도구-인식 프롬프트 기법들이 있는데 대표적인 기법으로는 ART(Automatic Multi-step Reasoning and Tool-use, 자동 다단계 추론 및 도구 사용)가 있습니다. ART는 앞서 다룬 '자동 CoT(자동 생각의 연쇄)' 프롬프팅과 '외부 도구 사용'을 결합한 기법입니다. 작동 방식은 이렇습니다. 먼저 주어진 작업과 입력에 대해, 시스템은 '작업 라이브러리(task library)'에서 유사한 과거의 작업 사례들을 찾습니다. 그다음, 이 과거 사례들을 프롬프트의 '예시'로 사용하여, LLM이 현재 작업을 어떻게 접근하고 실행해야 할지 안내합니다. 신입사원(LLM)에게 복잡한 업무(현재 작업)를 시킬 때, 이전에 비슷한 업무를 처리했던 선배사원의 '업무 일지'(유사한 과거 작업 사례)를 참고 자료로 함께 주는 것과 같아요. 신입사원은 그 업무 일지를 보고 '아, 이런 문제는 먼저 A 프로그램을 돌리고, 거기서 나온 결과를 B 데이터베이스에서 확인하면 되는구나' 하고 일의 순서와 도구 사용법을 배우게 됩니다. 이 방법은 '내부적인 추론'과 '외부 데이터 처리/검색'의 조합이 필요한 작업에 특히 효과적입니다.
E. LLM 에이전트 (LLM Agents)
4장의 마지막 주제이자, 지금까지 배운 모든 증강 기술의 집합체라고 할 수 있는 LLM 에이전트에 대해 알아보겠습니다.
먼저 'AI 에이전트'라는 개념 자체는 AI 분야에서 오랫동안 탐구해온 아이디어입니다. 에이전트란 일반적으로 센서를 통해 환경을 인식하고, 현재 상태를 바탕으로 판단을 내리며, 그에 따라 행동하는 자율적인 실체를 의미합니다. LLM의 맥락에서, 에이전트란 특정 작업을 자율적으로 수행할 수 있는, 특별하게 구현된 (증강된) LLM 기반 시스템을 의미합니다. 이 에이전트들은 사용자의 의도에 맞는 행동을 하기 위해, 사용자 및 환경과 상호작용하도록 설계되었습니다. 에이전트는 도구를 사용하고, 주어진 입력을 바탕으로 결정을 내리는 능력을 갖춘 LLM에 기반을 둡니다. 단순한 응답 생성을 넘어서는 수준의 자율성과 의사결정이 필요한 작업을 처리하도록 설계되었죠. 일반적인 LLM 기반 에이전트의 기능은 다음과 같습니다.
- 도구 접근 및 활용 (Tool Access and Utilization): 에이전트는 작업을 완수하기 위해, 외부 도구와 서비스에 접근하여 이러한 자원을 효과적으로 활용하는 능력을 가지고 있습니다.
- 의사 결정 (Decision Making): 에이전트는 입력, 맥락, 그리고 외부 도구들을 바탕으로, 복잡한 추론 과정을 거쳐 결정을 내릴 수 있습니다.
예를 들어보죠. LLM이 날씨 API에 접근할 수 있다면, 특정 장소의 날씨와 관련한 어떤 질문에도 답할 수 있습니다. 즉, API를 사용해 문제를 해결할 수 있는 것이죠. 더 나아가 만약 그 LLM이 구매를 할 수 있는 API에 접근할 수 있다면, 외부 세계의 정보를 읽을 뿐만 아니라 그에 따라 행동까지 할 수 있는 '구매 에이전트'를 만들 수도 있습니다.
아래 그림은 '대화형 정보 탐색'을 위한 LLM 기반 에이전트의 예시입니다.

이 에이전트는 여러 모듈들로 증강되어 있습니다.
- 작업 기억(Working Memory): 대화의 상태를 추적하는 모듈
- 정책(Policy): 작업 실행 계획을 세우고 다음 시스템 행동을 선택하는 모듈.
- 행동 실행기(Action Executor): 정책이 선택한 행동을 수행하는 모듈(외부 지식을 결합하거나, LLM에게 응답을 생성하도록 프롬프팅).
- 유틸리티(Utility): LLM 응답이 사용자의 기대나 특정 비즈니스 요구사항과 얼마나 일치하는지를 평가하고, 에이전트 성능을 개선하기 위한 피드백을 생성하는 모듈
에이전트를 위한 프롬프트 엔지니어링 기법 (Prompt engineering techniques for agents)
RAG나 외부 도구 사용과 마찬가지로, LLM 기반 에이전트에 맞춰 특별히 개발한 프롬프트 엔지니어링 기법들도 있습니다. 여기서는 그 세 가지 예시인 ReWOO, ReAct, DERA에 대해 알아보겠습니다.
첫 번째 기법은 ReWOO(리우), 즉 'Reasoning without Observation(관찰 없는 추론)'입니다. 이 기법은 추론 과정과 외부 데이터 사용(관찰)을 분리하는 것을 목표로 하는 기법입니다. ReWOO는 LLM이 외부 데이터나 도구에 즉시 의존하지 않고도, 포괄적인 추론 계획(reasoning plans)이나 메타-플랜(meta-plans)을 먼저 수립하도록 합니다. 즉, '계획 세우기' 단계와 '계획 실행하기' 단계를 명확하게 나누는 것이죠. ReWOO에서, LLM은 처음에 주어진 문제를 어떻게 접근하고 해결할지 계획(일련의 단계)을 세웁니다. 이 메타-플래닝 단계 덕분에 정보가 확보된 뒤에는 에이전트가 이를 더 효과적으로 처리할 수 있는 것입니다. 그런 다음 실행 단계에서는 실제 데이터나 관찰 결과를 미리 세운 계획과 결합합니다. 그 결과, 일관성 있고 관련성 높은 응답을 이끌어낼 수 있습니다. 이 방식은 효율적이며, 중간에 도구를 사용하지 못하더라도 더 강건하게 대처할 수 있다는 상당한 이점이 있습니다. 데이터 검색이 어렵거나, 느리거나, 불확실한 상황에서 특히 유리한 방식입니다.
두 번째 기법은 ReAct(리액트), 즉, 'Reason and Act(추론과 행동)'입니다. LLM이 단순히 언어 추론만 하는 것이 아니라, 행동까지 함께 생성하도록 유도해, 모델의 동적인 문제 해결 능력을 향상하는 방식이죠. 즉, ReAct는 추론(reasoning)과 행동(acting)을 통합하려는 기법이에요. ReAct 프롬프팅을 통해 LLM은 추론(설명)을 하는 것과 행동(단계나 명령어)을 취하는 것을 번갈아 가며 수행하게 됩니다. 그로 인해 모델은 문제에 대해 동적으로 추론하고, 동시에 구체적인 행동을 제안하고 실행할 수 있습니다.
마지막 기법은 DERA(데라), 즉 'Dialog-Enabled Resolving Agents(대화형 해결 에이전트)'입니다. 이름처럼 대화를 하며, 질문에 대한 답을 하고, 상호작용을 통해 결정을 내릴 수 있는 전문화된 AI 에이전트입니다. DERA의 핵심 아이디어는, 대화를 할 때 여러 명의 에이전트를 활용하는 것입니다. 각 에이전트는 특정 역할과 기능을 가지고 있죠. 이를테면, 정보를 수집하고 분석하는 '연구원(Researcher)' 에이전트와, 제공된 정보를 바탕으로 최종 판단을 하는 '결정자(Decider)' 에이전트를 둘 수 있습니다. 이렇게 역할을 나누면 더 체계적이고 효율적으로 문제를 해결하고 의사결정을 내릴 수 있습니다. DERA는 의료 진단이나 고객 서비스와 같이 의사결정을 복잡하게 해야 하는 상황에 특히 유용합니다. 이러한 협력적인 특성 덕분에, DERA 에이전트들은 단일 에이전트 시스템이 어려워하는 복잡한 질문들을 더 확실하게 처리할 수 있습니다.
이것으로 LLM을 '어떻게 사용하고 증강하는지'에 대한 4장을 모두 끝냈습니다. LLM의 한계, 그 한계를 극복하기 위한 다양한 프롬프트 엔지니어링 기법들, 외부 지식을 활용하는 RAG, 외부 도구를 사용하는 방법, 그리고 이 모든 것을 종합하여 스스로 행동하는 LLM 에이전트에 이르기까지 LLM의 활용법을 깊이 있게 살펴보았네요.
V. LLM을 위한 인기 있는 데이터셋 (POPULAR DATASETS FOR LLMS)
LLM이 굉장한 성과를 보여주고 있지만, '과연 얼마나 효과적으로 작동하는가?' 그리고 '특정 작업에서 그 성능을 어떻게 평가할 수 있는가?'라는 중요한 질문이 뒤따를 수밖에 없습니다. LLM의 평가가 특히 어려운 이유는, LLM을 적용하는 분야가 계속해서 확장되고 있기 때문입니다. 원래 LLM은 번역, 요약, 질의응답과 같은 전통적인 자연어 처리(NLP) 작업의 성능을 높이기 위해 개발되었습니다. 하지만 오늘날에는 코드 생성이나 금융과 같은 아주 다양한 분야에서도 활용되고 있죠. 뿐만 아니라 LLM을 평가할 땐 단순히 성능만 보는 것이 아니라, 공정성과 편향, 진실성(사실성), 추론 능력과 같은 여러 중요한 사항을 다방면으로 고려해야 합니다. 이 장에서는 LLM을 평가하기 위해 일반적으로 사용되는 벤치마크 데이터셋을 소개할 것입니다. 논문에는 여러 데이터셋이 나오지만 모두 알 필요는 없다고 생각해, 중요한 벤치마크 데이터셋 몇 개만 추려 소개하겠습니다.
A. 기본 작업용 데이터셋 (Datasets for Basic Tasks)
MMLU
첫 번째로 살펴볼 데이터셋은 MMLU입니다. MMLU는 모델이 별도의 학습 예시 없이(제로샷, zero-shot) 또는 아주 적은 몇 개의 예시만 보고(퓨샷, few-shot) 새로운 문제를 얼마나 잘 푸는지 평가하기 위해 만들어진 데이터셋입니다. 즉, LLM이 가진 전반적인 지식 수준과 문제 해결 능력을 측정하는 것이 목표죠. MMLU는 STEM(과학, 기술, 공학, 수학), 인문학, 사회과학 등 무려 57개의 다양한 학문 분야를 다루고 있습니다. 이 벤치마크는 초급 수준부터 전문가 수준까지 다양한 데이터로 구성되어 있죠. 마치 초등학교 문제부터 대학원 수준의 전문직 시험까지 총망라한 거대한 'AI 수능 시험지'와 같습니다. 이 데이터셋은 다중 언어 이해(multi-task language understanding), 질의응답, 그리고 산술 추론 능력을 평가하는 데 기여를 했습니다.
HumanEval
HumanEval은 코드 생성(code generation) 작업을 위한 데이터셋입니다. 이 데이터셋은 사람이 직접 만든(hand-crafted) 164개의 프로그래밍 문제로 구성되어 있습니다. 각 문제에는 함수 시그니처, 주석 문자열(docstring), 코드 본문, 그리고 여러 개의 단위 테스트(unit tests)가 함께 제공됩니다. HumanEval을 개발할 때 가장 중요하게 생각했던 점은 일반적인 코드 생성 모델의 훈련 데이터셋에 포함되지 않은 새로운 문제들로만 구성하는 것이었습니다. 따라서 HumanEval에서 높은 점수를 받았다는 것은, 모델이 정답을 '외워서' 푼 것이 아니라, 처음 보는 문제에 대해서도 '스스로 생각해서 논리적으로 코드를 짜는 능력'이 뛰어나다는 것을 반증합니다. 진정한 실력 테스트인 셈이죠.
SQUAD
다음으로 살펴볼 데이터셋은 SQUAD(스쿼드)입니다. SQUAD는 Stanford Question Answering Dataset(스탠포드 질의응답 데이터셋)의 약자로, 크라우드소싱 방식으로 만들어진 독해 기반 질의응답 데이터셋입니다. SQUAD는 500개가 넘는 위키피디아 아티클에 연결된 약 10만 개의 질문-답변 쌍으로 구성되어 있습니다. 이 데이터셋의 가장 큰 특징은, 질문에 대한 답변이 해당 읽기 지문에서 그대로 가져온 텍스트의 일부(fragments)라는 점입니다. 또한, 어떤 질문들은 지문 안에 답이 없어서 '답할 수 없는(unanswerable)' 경우도 포함되어 있습니다. 데이터셋은 80%의 훈련 세트, 10%의 검증 세트, 그리고 10%의 비공개 테스트 세트로 나뉘어 있습니다.
B. 창발적 능력용 데이터셋 (Datasets for Emergent Abilities)
이 섹션에서는 LLM이 단순히 지식을 암기하는 것을 넘어, 추론하고, 상식을 이해하며, 진실을 구분하는 더 높은 수준의 능력을 평가하는 데이터셋들을 다룹니다.
GSM8K
첫 번째는 GSM8K으로, 모델의 다단계 수학 추론(multi-step mathematical reasoning) 능력을 평가하기 위해 설계된 데이터셋입니다. GSM8K는 사람이 직접 작성한 8,500개의 초등학교 수준 수학 문제로 구성되어 있습니다. 이 문제들은 정답을 찾기 위해 2단계에서 8단계에 이르는 계산 과정이 필요하며, 주로 기본적인 사칙연산을 사용하고요. GSM8K가 중요한 이유는, LLM이 정답만 맞히는 것이 아니라 정답에 도달하기까지의 논리적인 '풀이 과정'을 생성하는 능력을 평가하기 때문입니다.
HellaSwag
이어서 알아볼 데이터셋은 HellaSwag(헬라스웨그)입니다. 이 벤치마크는 LLM의 상식 추론(commonsense reasoning) 능력을 평가하기 위해 설계되었으며, 7만 개의 객관식 문제로 구성되어 있습니다. 각 문제는 ActivityNet 또는 WikiHow라는 두 가지 출처에서 가져온 것인데, 특정 상황을 나타내는 문장을 주고 "이 다음에 무슨 일이 일어날까?"를 묻습니다. 그에 대한 선택지는 네 가지가 제공되고요. 정답 선택지는 실제로 다음에 일어나는 사건을 설명하지만, 나머지 세 개의 오답은 사람이 보기에는 어색하지만 기계가 통계적으로 그럴듯하다고 착각하기 쉽게 만들었습니다. 따라서 HellaSwag를 잘 푼다는 것은, 모델이 단순한 패턴 인식을 넘어 인간 수준의 진정한 상식을 갖추고 있다는 의미가 됩니다.
TruthfulQA
TruthfulQA 데이터셋은 질문에 대한 LLM 답변의 '진실성(truthfulness)'을 평가하기 위해 특별히 설계한 데이터셋입니다. 건강, 법률, 금융, 정치 등 38개의 다양한 분야에서 가져온 817개의 질문으로 구성되어 있죠. TruthfulQA의 가장 큰 특징은, 인간조차도 오해 때문에 틀린 답을 하기 쉽도록 의도적으로 질문이 설계되었다는 점입니다. 사람들이 흔히 가지고 있는 잘못된 통념이나 오해를 파고드는 '함정 질문'과 같아요. 곧, LLM이 인터넷에 떠도는 잘못된 정보를 학습해서 그대로 앵무새처럼 따라 하는지, 아니면 진실을 말하려고 노력하는지를 평가합니다.
'창발적 능력용 데이터셋'의 핵심적인 세 가지, 즉 단계별 수학 추론 능력을 보는 GSM8K, 상식을 테스트하는 HellaSwag, 모델의 진실성을 평가하는 TruthfulQA에 대해 모두 알아보았습니다.
C. 증강 능력용 (Datasets for Augmented Abilities)
HotpotQA
HotpotQA는 다양한 다단계 추론(multi-hop reasoning)을 위해 설계된 질의응답 데이터셋입니다. 영문 위키피디아에서 파생해 만든 데이터셋으로, 약 113,000개의 질문으로 구성되어 있죠. 이 데이터셋의 가장 큰 특징은 한 질문에 답하려면 두 개의 다른 위키피디아 문서에 있는 정보를 조합해야 한다는 점입니다. 또한, 데이터셋에는 정답을 찾는 데 필요한 핵심 문장들이 무엇인지 사람이 직접 표시한 목록도 함께 들어있습니다. 이를 통해 모델이 정답뿐만 아니라 '정답을 찾아가는 과정'까지 제대로 추론했는지 평가할 수 있습니다.
VI. 주요 LLM들의 벤치마크 성능 (PROMINENT LLMS' PERFORMANCE ON BENCHMARKS)
이번 장에서는 LLM의 성능을 본격적으로 분석합니다. 우리가 어떤 LLM이 '더 좋다' 또는 '더 뛰어나다'라고 말하려면, 무엇을 기준으로 삼아야 할까요? 그리고 그 기준에 따라 실제로 LLM들은 어떤 성적표를 받았을까요? 바로 이 두 가지 큰 질문에 답하는 장이라고 할 수 있습니다. 먼저 'Popular Metrics for Evaluating LLMs' , 즉 LLM을 평가하기 위한 주요 지표(metric)들을 살펴보고, 이어서 'LLMs' Performance on Different Tasks', 즉 다양한 과제에서 LLM들이 실제로 어떤 성능을 보이는지 비교해보겠습니다.
A. LLM을 평가하기 위한 대표적인 지표 (Popular Metrics for Evaluating LLMs)
이번 섹션에서는 LLM의 성능을 어떻게 평가하는지에 대한 기본적인 원칙을 설명하고 있어요. LLM이 수행하는 작업의 종류에 따라 평가하는 '잣대', 즉 평가지표가 달라진다는 점입니다. 예를 들어, 주어진 텍스트에 담긴 감정이 긍정적인지 부정적인지를 판단하는 '감성 분석' 같은 작업은, 여러 선택지 중 하나를 고르는 '분류(classification)' 문제와 같습니다. 이런 경우에는 우리가 이미 잘 알고 있는 전통적인 분류 모델의 평가지표를 그대로 사용합니다. 정확도(accuracy), 정밀도(precision), 재현율(recall), F1 점수(F1-score) 등이 바로 그것들이죠.
하지만 LLM의 진짜 능력은 소설을 쓰거나, 시를 짓거나, 긴 글을 요약하는 것처럼 정답이 없는 '순수한 개방형 텍스트 생성' 작업에서 드러납니다. 그런데 이런 작업들은 앞서 말한 분류 문제처럼 평가를 할 수가 없죠. 예컨대 '행복에 대한 짧은 글을 써줘'라는 요청에 대한 답변을 '정확도'로 채점할 수는 없겠죠. 그래서 이런 창의적인 결과물을 평가하기 위해서는 그 작업의 특정한 '목적'에 맞는 별도의 평가지표가 필요합니다.
Pass@k
그런데 코드 생성(code generation)은 정답이 없는 '순수한 개방형 텍스트 생성' 작업과는 약간 다릅니다. 생성한 코드는 반드시 특정 기능 테스트를 통과해야 하기 때문이죠. 이와 더불어, 모델이 여러 가지 코드를 생성할 수 있을 때 그 중에서 정답 코드를 선택할 확률이 얼마나 되는지를 이해하는 것도 중요합니다. 이런 경우에 적합한 지표가 바로 Pass@k입니다. Pass@k는 다음과 같이 계산합니다.
- 하나의 문제에 대해, 모델이 n개의 서로 다른 코드를 생성합니다.
- 기능 테스트를 통해 그중 c개가 정답임을 확인합니다.
- 그 후, 생성된 n개의 코드 중에서 k개를 무작위로 뽑았을 때, 그 안에 정답이 하나 이상 포함될 확률을 계산합니다. 이 확률 값이 바로 Pass@k 점수가 됩니다.
Pass@k를 '보물찾기'에 비유해볼게요. LLM(탐험가)이 10개(n)의 보물 상자를 찾아왔습니다. 열어보니 그중 3개(c)에만 진짜 보물이 들어있었습니다. 이제 우리가 눈을 감고 5개(k)의 상자를 무작위로 골랐을 때, 그 안에 보물이 하나 이상 들어있을 확률이 바로 Pass@5 점수가 됩니다. 이 지표는 모델이 단순히 '정답을 하나 생성할 수 있는가?'를 넘어, '얼마나 안정적으로, 높은 확률로 정답을 생성하는가?'를 측정하는 더 정교한 방법입니다. Pass@k의 계산식은 다음과 같습니다.

이 수식이 조금 복잡해 보이지만, 그 의미는 '전체 n개의 상자 중 k개를 뽑을 때, 보물이 없는 n-c개의 상자 중에서만 k개를 뽑을 확률(꽝을 뽑을 확률)'을 먼저 계산하고, 1에서 이 확률을 빼서, 적어도 하나 이상의 보물을 뽑을 확률을 구하는 것입니다. 그리고 이 확률을 모든 문제에 대해 평균(E) 내어 최종 점수를 계산합니다.
EM (Exact Match, 정확한 일치)
또 다른 평가 지표로는 EM(Exact Match, 정확한 일치)이 있습니다. EM은 이름 그대로 (사전에 정의한) 정답과 정확히 일치하는지를 측정하는 지표입니다. 좀 더 정확히 말하면, 모델의 예측이 토큰 단위로 정확히 일치할 경우에만 정답으로 간주하는 지표죠. 어떤 경우에는 정확도(accuracy)와 동일한 의미로 사용될 수도 있습니다. EM은 아주 엄격한 '단답형 주관식 채점'과 같다고 볼 수 있습니다. 정답이 '아름다움'인데, 학생이 '아름다움.'이라고 마침표를 하나 더 썼거나, '아름다운'이라고 살짝 다르게 썼다면 모두 오답으로 처리하는 방식입니다. 이 때문에 SQUAD와 같은 데이터셋에서 모델의 정밀한 답변 능력을 측정하는 데 EM을 주로 사용합니다.
HEQ (Human equivalence score, 인간 등가 점수)
HEQ(Human equivalence score, 인간 등가 점수)는 F1 점수를 활용하는 대안적인 지표입니다. HEQ는 HEQ-Q와 HEQ-D로 두 가지로 나뉩니다. HEQ-Q는 개별 질문(Question)의 정밀도를 측정하는 지표입니다. 모델이 생성한 답변의 F1 점수가 인간의 F1 점수를 넘어설 때, '정답'으로 간주하는 방식입니다. HEQ-D는 각 대화(Dialogue)의 정밀도를 측정하는 지표입니다. 대화에 포함된 모든 질문이 HEQ-Q 기준을 충족할 때, 그 대화가 '정확'하다고 간주하는 방식입니다. HEQ를 '인간 vs AI 퀴즈 대결'에 비유해볼 수 있습니다. HEQ-Q는 문제 하나하나를 채점하는 방식입니다. AI의 답변이 '평균적인 사람'보다 더 낫거나 비슷하면 정답으로 인정해주는 거죠. HEQ-D는 전체 퀴즈 쇼(대화)를 평가하는 방식입니다. AI가 퀴즈 쇼에 나온 모든 문제를 '평균적인 사람'보다 잘 맞혀야만, 그 퀴즈 쇼에서 승리했다고 인정해주는, 더 엄격한 기준입니다.
Rouge(루지)와 BLEU(블루)
기계 번역과 같은 생성 작업에서는 Rouge(루지)와 BLEU(블루)와 같은 지표를 사용합니다. 이 지표는 (번역문과 같은) '정답으로 인정될 수 있는 참고용 텍스트(reference text as ground truth)'가 있을 때 잘 작동합니다. 참고용 정답이 존재한다는 점에서 순수 창작보다는 번역과 같은 작업에 적합한 평가 지표죠. Rouge와 BLEU는 주로, 모델 답변과 정답 사이의 유사도를 측정하는 것이 목표일 때 사용합니다.
이러한 몇 가지 평가 지표들이 있지만 오늘날에도 여전히, 순수하게 생성된 콘텐츠를 평가하는 것은 매우 어려우며, 완벽하게 들어맞는 지표는 개발되지 않았습니다.
생성형 평가 지표 (Generative evaluation mertircs)
생성형 평가 지표는 평가를 위해 또 다른 LLM을 사용하는 또 다른 유형의 평가 지표입니다. 하지만, 이 평가 지표를 적용할 수 있는지 여부는 어떤 작업을 수행하느냐에 따라 달라집니다. 게다가 생성형 평가를 오류가 발생하기 쉽습니다. 프롬프트를 어떻게 주는지에 따라 변동성이 크기 때문이죠.
LLM 분야에서 가장 어려운 질문은 "어떤 LLM이 더 좋은 모델인가?"입니다. 이 질문에 답하기 위한 다양한 벤치마크와 리더보드가 제안되었죠. 그렇지만, 여전히 이 질문에는 뾰족한 답이 있을 리 없습니다. 그 답은 LLM의 다양한 측면에 따라 달라지기 때문이에요. '절대적인 1등 LLM은 없다'라는 중요한 점을 짚고 있습니다. "가장 위대한 운동선수가 누구인가?"라는 질문에 답하기 어려운 것과 같습니다. 단거리 달리기는 우사인 볼트가, 농구는 마이클 조던이 최고인 것처럼, LLM도 어떤 모델은 시를 잘 쓰고, 어떤 모델은 코딩을 잘하는 등 각자의 장단점이 있기 때문에 하나의 기준으로 줄 세우기가 어렵다는 의미입니다.
평가를 위한 LLM 분류
서로 다른 LLM을 비교할 때 여러 관점을 기준으로 평가해볼 수도 있습니다. 예를 들어, 파라미터 수가 현저히 적은 LLM을 파라미터 수가 더 많은 LLM과 동일하게 비교하기는 어렵습니다. 이러한 관점에서, LLM을 네 가지 카테고리로 분류할 수 있습니다.
- 경량 모델 (small model): 파라미터 10억 개 이하
- 중간 모델 (medium model): 파라미터 10억~100억 개
- 거대 모델 (large model): 파라미터 100억~1000억 개
- 초거대 모델 (very larege model): 파라미터 1000억 개 이상
모델의 '크기(파라미터 수)'에 따라 체급을 나눠야 공정한 비교가 가능하기 때문입니다. '체급' 외에도 LLM을 분류하는 또 다른 기준이 있습니다. LLM을 주로 어디에 활용하는지(primary use case)를 기준으로 나눌 수 있죠.
- 파운데이션 모델 (Foundation model): 지시 튜닝(instruction fine-tuing)이나 챗 튜닝(chat fine-tuning)이 전혀 없는, 사전 훈련만 마친 언어 모델
- 지시 모델 (Instruction model): 사전 훈련 후, 지시 튜닝만 거친 언어 모델
- 챗 모델 (Chat model): 사전 훈련, 지시 튜닝, 그리고 챗 튜닝까지 모두 거친 언어 모델
이 외에도, 원본 모델과 튜닝된 모델로 구분하기도 합니다.
- 원본 모델 (Original models): 파운데이션 모델 혹은 파인튜닝한 모델로써 출시한 원본 모델
- 튜닝된 모델 (Tuned models): 원본 모델을 가져와 다른 데이터셋이나 다른 훈련 방식으로 튜닝한 모델
라이선스와 관련 없이 모델 가중치의 사용 가능 여부에 따라서도 분류할 수 있습니다.
- 공개(Public) 모델: 가중치를 공개적으로 오픈해놓은 모델
- 비공개(Private) 모델: 가중치가 공개되어 있지 않은 모델
아래 그림은 LLM의 여러 분류 기준들은 시각적으로 나타낸 그림입니다.

그리고 아래 표는 몇 가지 모델들이 각각 어떤 분류에 속하는지를 보여줍니다.

B. 여러 작업별 LLM 성능 (LLMs' Performance on Different Tasks)
상식 추론 (Commonsense reasoning)
이 섹션에서는 먼저 '상식 추론(commonsense reasoning)' 능력에 대해 살펴봅니다. 상식 추론이란 모델이 사전 지식과 추론 기술을 결합해, 상식을 얼마나 잘 추론하는지를 나타내는 능력입니다. 이러한 상식 추론은 LLM 모델의 중요한 능력 가운데 하나에요. 예를 들어, HellaSwag 데이터셋으로부터, 이야기의 일부만 주어진 상태에서 이어질 내용을 찾는 것은 꽤나 어렵습니다. 주어진 선택지들이 교묘하게 만들어져 있어, 세상에 대한 사전 지식 없이는 정답을 고를 수 없기 때문입니다. 이렇게 기존 지식을 활용하여 글로 묘사한 장면이나 사실을 이해하는 능력은 특별히 주목할 만한 가치가 있겠죠.
아래 표를 보시죠. 각 모델별 상식 추론 능력을 비교한 표입니다. HellaSwag에서는 GPT-4가 가장 성능이 좋았네요. 반면, OBQA(OpenBookQA) 데이터셋에서는 Davinci-003이 가장 높은 점수를 받았습니다. 그런데, OBQA에 대한 결과는 모든 모델에 대해 측정되지는 않았습니다. 그러니 OBQA에서 더 성능이 좋은 다른 모델이 있을 가능성이 높습니다.

세상 지식 (World knowledge)
상식 추론에 이어, 다음 평가 분야인 '세상 지식(World knowledge)'으로 넘어가겠습니다. 세상 지식은 주로 일반 상식 질문에 대한 것입니다. 예를 들어, Wikifact 데이터셋에는 "특정 유명한 책의 저자는 누구야?"와 같은 질문들이 있는데, 참고 자료도 함께 제공됩니다. '상식 추론'이 숨은 맥락을 읽는 능력이라면, '세상 지식'은 사실(지식) 그 자체를 얼마나 많이, 그리고 정확하게 알고 있는지를 나타내는 능력에 가깝습니다. 아래 표는 모델별 세상 지식이 어느 정도인지를 비교한 표입니다.

코딩 능력 (Coding)
'코딩(coding)' 혹은 '코드 생성(code-generation)' 능력도 LLM의 중요한 능력 중 하나입니다. 아래 표는 여러 모델별 코딩 능력을 비교한 결과입니다.

산술 추론 (Arithmetic reasoning)
산술 추론(arithmetic reasoning)은 LLM이 달성하기 어려운 또 다른 추론 능력입니다. 인간에게는 간단한 덧셈, 뺄셈일지라도, 언어 모델은 이를 텍스트 속에서 정확히 이해하고, 올바른 순서로 계산하며, 논리적인 추론을 해야만 정답을 맞힐 수 있습니다. 그만큼 LLM에게 '수학'은 어려운 과제입니다. 가령, GSM8K 데이터셋은 정답과 함께 초등학교 수준의 수학 문제들로 구성되어 있습니다. 다음 표는 여러 모델별 산술 추론 능력을 보여주는 표입니다.

환각 (Hallucination)
LLM은 단순히 다음 토큰을 예측하는 모델이기 때문에, 때때로 환각(hallucination) 현상이 발생하기도 합니다. 환각 측정 지표는 LLM이 얼마나 신뢰할 수 있고 믿을 만한지를 측정하는 중요한 요소 중 하나입니다. 하지만 환각을 측정하는 것이 보기보다 쉽지 않습니다. 왜냐하면 하나의 사실(facts)도 서로 다른 스타일로 쓰일 수 있고, 글쓰기에서는 그러한 미세한 변화조차도 '어떤 부분이 환각인지를 탐지'하는 데 어려움을 줄 수 있기 때문입니다. 어떤 LLM이 텍스트 속 잘못된 정보로 인한 환각을 더 잘 탐지한다면, 그 모델이 더 신뢰할 만하다고 가정하는 것은 타당합니다. HaluEval은 환각을 측정하는 데이터셋 중 하나입니다. 이러한 데이터셋을 이용해 환각을 평가해도 되고, '정답을 평가하는 또 다른 모델'을 활용해 특정 모델이 환각을 일으켰는지 아닌지를 측정하는 방법도 있습니다.
VII. 당면 과제와 향후 발전 방향 (CHALLENGES AND FUTURE DIRECTIONS)
이전 장들에서 살펴봤듯이, LLM은 지금까지 굉장히 놀라운 성과들을 보였습니다. 동시에, 이 분야는 여전히 새롭고 매우 활발한 연구 분야이며, 혁신의 속도는 점차 빨라지고 있습니다. 지금까지 LLM의 현주소를 살펴봤지만, 여전히 '성장기'에 있는 분야로써 앞으로가 더 기대되는 분야이죠.
하지만, 다른 모든 분야와 마찬가지로, 앞으로 해결해야 할 수많은 과제가 여전히 남아있습니다. 여기서는 지금까지 알려진 몇 가지 당면 과제에 대해 간략히 언급해보겠습니다. LLM의 당면 과제들이 자세히 궁금하신 분은 Kaddour 외 연구진의 논문 "Challenges and applications of large language models"을 참고하시기 바랍니다. 이 논문에서는 LLM이 발전하는 과정에서 해결해야 할 과제들에 대해 자세히 논합니다.
A. 더 작고 효율적인 언어 모델 (Smaller and more efficient Language Models)
이 논문은 거대 언어 모델(LLM)에 대한 서베이 논문입니다. 대규모 모델이 개발되면서 성능이 좋아지다 보니 '더 클수록 좋다'라는 경향이 있었습니다. 하지만, 이러한 거대 모델들은 비용이 많이 들고, 추론 시간이 길어지는 등 여러 면에서 비효율적입니다. 그렇다 보니 비용 효율성을 위해, 소규모 언어 모델(Small Language Models, SLMs)이 연구되고 있습니다. 특히, 완전한 범용성이 필요하지 않은 작업에는 굳이 거대 언어 모델이 필요치 않기 때문에 이런 경우엔 SLM이 더욱 효과적입니다. 대표적인 SLM으로는 마이크로소프트의 Phi-1, Phi-1.5, Phi-2가 있습니다.
앞으로 우리는 더 작고 효율적인 모델을 훈련시키는 방법에 대해 많은 연구를 해야 합니다. 파라미터 효율적 파인튜닝(parameter-efficient fine-tuning, PEFT), 교사/학생(teacher/student) 모델, 그리고 지식 증류(distillation)와 같은 기술들은 SLM을 개발하기 위해 계속해서 활용하고 탐구해야 할 기술들입니다.
B. 어텐션 이후의 새로운 아키텍처 패러다임 (New Post-attention Architectural Paradigms)
트랜스포머의 시대는 영원할까요? 트랜스포머는 처음 등장한 이례로 지금까지 대부분의 LLM 프레임워크에서 제일 중요하고 변치 않는 아키텍처입니다. 하지만 이 아키텍처가 얼마나 더 유행할지는 알 수 없습니다. 그리고 딥러닝과 NLP 분야에서 어텐션 기반의 트랜스포머를 뛰어넘을 새로운 아키텍처는 무엇이 될지도 큰 물음표죠. 2012년에 나온 AlexNet 이후, 우리는 LSTM, GRU, seq2seq 등 많은 아키텍처가 유행했다가 사라지는 것을 봐왔습니다.
최근, 어텐션을 뛰어넘는 새로운 아키텍처, 즉 탈-어텐션(post-attention)에 대한 연구가 진행되고 있습니다. 대표적인 탈-어텐션 모델로는 '상태 공간 모델(State Space Models, SSMs)'이 있습니다. 사실 상태 공간 모델이라는 개념은 머신러닝에서 오래된 개념입니다. 그런데 언어 모델의 맥락에서는 새로운 '구조화된 상태 공간 모델(Structure State Space Model, S4)' 아키텍처를 지칭하는 데 쓰입니다. S4에 속하는 모델로는 Mamba, Hyena, Striped Hyena가 있습니다.
이러한 모델은 성능과 효율성 측면에서 경쟁력이 있습니다. 뿐만 아니라, 전통적인 어텐션 기반 아키텍처는 한 번에 처리할 수 있는 문맥 길이(context length)가 제한되어 있습니다. 많은 프롬프트에 대해 좋은 답변을 하려면 문맥이 필요합니다. 가령, '나에게 재밌는 영화를 추천해줘'라는 요청에 응답을 하려면, '나'에 대한 문맥뿐만 아니라, 어떤 영화가 있고 내가 아직 보지 않은 영화가 무엇인지에 대한 정보도 필요로 하죠. 문맥 길이(context length)는 특히 RAG에서 중요하죠. RAG처럼 참고 자료를 많이 봐야 하는 작업에서는 특히 '문맥 길이'가 중요한 것입니다. 문맥 길이가 길수록, 더 많은 토큰을 문맥에 넣을 수 있으니까요. 모델이 더 많은 정보에 접근할수록, 그 응답은 더 좋아질 것입니다. 하지만, 문맥이 매우 길어지면, 모델이 모든 것을 기억하고 모든 정보를 효율적으로 처리하기가 어려워집니다. 특히 어텐션 기반 모델은 문맥이 길 경우 비효율적입니다. 바로 그 이유 때문에, 더 긴 문맥을 처리할 수 있는 새로운 아키텍처를 제시하는 많은 연구를 기대해봐야 합니다.
단순히 어텐션 메커니즘에 대한 대안을 제시하는 것도 방법이 되겠지만, 트랜스포머 아키텍처 자체를 재고해볼 수도 있습니다. 즉, '엔진 부품(어텐션)'만 바꾸는 것을 넘어, '자동차 설계(트랜스포머)' 자체를 완전히 바꾸려는 시도를 해볼 수도 있다는 말이에요. 이러한 시도의 예로는 '모나크 믹서(Monarch Mixer)'가 있습니다. 모나크 믹서는 GPU 연산 효율이 좋은 '모나크 행렬(Monarch matrices)'을 이용해 전체적인 효율성을 극대화하려는 새로운 설계 철학입니다.
다른 한편으로는, 어텐션과 호환되는(attention-compatible) 아키텍처도 있습니다. 더 강력한 LLM을 만드는 데 기여를 하게 되어, 최근 큰 힘을 얻고 있는 아키텍처입니다. 이러한 메커니즘의 가장 적합한 예는 '전문가 혼합(Mixture of Experts, MoE)'일 것입니다. MoE는 딥러닝 시대 이전에도 수년간 머신러닝 분야에서 쓰던 개념이지만, 이후에야 인기를 끌게 되었습니다. 특히 트랜스포머 모델과 LLM에서 주로 활용되었습니다. 일례로, GLaM 모델은 1.2조 개의 파라미터를 갖지만, 추론 단계에서는 64개의 전문가 모델 중 단 2개만 이용합니다. 오늘날 MoE를 소위 '프론티어 LLM(frontier LLMs)'이라고 부릅니다. 즉 가장 성능 좋고 발전된 모델이라는 뜻이죠. GPT-4 자체도 MoE 아키텍처에 기반했다는 소문이 있습니다. Mixtral과 같은 뛰어난 모델도 기본적으로 기존 LLM의 MoE 버전입니다.
여기서 중요한 점은 MoE는 어텐션 기반인지 여부와 관계없이 어떠한 아키텍처에서도 활용될 수 있다는 사실입니다. 실제로, Mamba와 같은 SSM 기반 LLM에도 MoE를 적용했습니다. 따라서 앞으로 어떤 새로운 아키텍처가 등장하더라도, MoE는 그 모델을 더 크고 효율적으로 만드는 핵심 기술로 계속해서 사용될 것입니다.
C. 멀티모달 모델 (Multi-modal Models)
멀티모달(multi-modal)이란 텍스트, 이미지, 비디오, 오디오와 같은 여러 종류의 데이터를 함께 이해하고 처리하는 방식을 뜻합니다. 멀티모달 모델은 질의응답, 콘텐츠 생성, 창작 예술, 헬스케어, 로보틱스 등 다양한 분야에서 여러 형태로 활용이 될 것입니다. 이미 성능이 뛰어난 멀티모달 LLM들이 여럿 있습니다. LLAVA , LLAVA-Plus , GPT-4 , Qwen-vl , Next-GPT 등이 있죠. 이러한 멀티모달 모델은 앞으로도 계속해서 발전할 것입니다.
D. 발전하는 LLM 도구 사용 및 증강 기술 (Improved LLM Usage and Augmentation techniques)
4장에서 설명했듯이, LLM에는 환각과 같은 여러 단점이나 한계가 있었습니다. 4장에서 배운 고급 프롬프트 엔지니어링, RAG, 도구 사용, 에이전트 같은 기술들이 바로 LLM의 한계를 극복하고 잠재력을 끌어내는 핵심 열쇠이며, 앞으로 이 분야의 연구는 더욱 활발해질 것입니다. 다시 말해, '더 좋은 모델'을 만드는 것만큼이나, '이미 있는 모델을 더 잘 쓰는 법'을 연구하는 것도 아주 중요하다는 뜻이죠.
LLM은 기존의 추천 시스템 시장을 바꾸고 있습니다. 기존의 추천 시스템이 사용자의 '클릭 기록'이나 '구매 기록' 같은 정형화된 데이터에 크게 의존했다면, LLM은 사용자가 남긴 '리뷰 텍스트'나 '검색어' 같은 비정형 텍스트 데이터를 깊이 있게 이해할 수 있습니다. 예를 들어, '요즘 날씨가 추워서 따뜻한 국물이 당기네'라는 사용자의 채팅 내용을 문맥으로 파악하여, 근처의 설렁탕 맛집을 추천해주는 훨씬 더 고도화된 개인화가 가능해지는 것이죠. 앞으로 개인화(personalization)와 추천(recommendations)뿐 아니라, 다른 머신러닝 기술을 사용하는 여러 응용 분야에서도 LLM을 적용하려는 연구가 계속될 것입니다.
마지막으로, 우리의 관심이 많아지고 있는 또 다른 연구 분야는 LLM 기반 에이전트입니다. 외부 도구를 적극 활용하고 스스로 의사결정도 하는 LLM 에이전트를 개발하는 작업은 흥미로우면서도 도전적인 과제입니다. 이 LLM 에이전트 기술이 어쩌면 인공 일반 지능(AGI)으로 가는 디딤돌이 될 수도 있습니다.
E. 보안 및 윤리적 AI (Security and Ethical/Responsible AI)
LLM이 사회에 미치는 영향력이 커질수록, 해커들이 '적대적 공격'을 통해 잘못된 정보를 퍼뜨리거나, 사람들을 조종하는 무기로 AI를 사용할 위험도 함께 커집니다. 따라서 방화벽을 쌓고(보안), 교묘한 공격을 간파할 수 있도록 더 똑똑하게 만드는(추론 능력 향상) 연구가 반드시 필요하겠습니다. LLM을 '견고한 요새'로 만드는 것이 중요하다는 뜻입니다.
LLM에 내재된 윤리적 문제와 편향을 해결하는 것도 중요한 화두입니다. LLM이 공정하고, 편향되지 않으며, 민감한 정보를 책임감 있게 처리할 수 있도록 보장하기 위한 노력들이 이루어지고 있죠. LLM을 점점 더 많은 사람들이 사용하고 있습니다. 그렇기 때문에 LLM이 편향되지 않고 책임감 있게 행동하도록 만드는 것은 상당히 중요합니다.
이것으로 7장, 'LLM의 당면 과제와 향후 발전 방향'에 대해 알아보았습니다. LLM이 더 작고 효율적으로, 더 새롭고 강력한 아키텍처로, 더 다양한 데이터를 처리하는 멀티모달 모델로 발전할 것이라는 미래를 엿보았습니다. 동시에, 이 강력한 기술을 더 잘 사용하고, 더 안전하고 윤리적으로 만드는 것이 얼마나 중요한 과제인지도 확인했습니다.
VIII. 결론 (CONCLUSION)
이 논문은 지난 몇 년간 개발된 LLM에 대한 서베이 논문입니다. 먼저 BERT와 같은 초기 사전 훈련 언어 모델을 살펴본 뒤, 세 가지 인기 있는 LLM 계열(GPT, LLaMA, PaLM)과 다른 대표적인 LLM들을 알아보았습니다. 그다음, LLM을 만들고, 증강시키고, 사용하는 방법과 기술들을 살펴보았죠. 또한, 인기 있는 LLM 데이터셋과 벤치마크를 간단히 확인했고, 공개 벤치마크를 토대로 주요 모델들의 성능을 비교해봤습니다. 마지막으로, 당면 과제와 미래 연구 방향을 제시하며 논문을 마무리했습니다.
아래 그림은 본 논문에서 설명한 긴 여정을 대제목과 중제목으로 나눠 개괄하고 있습니다. 이 모든 과정을 통해 LLM의 과거, 현재, 그리고 미래를 조망해봤습니다.

'논문 리뷰' 카테고리의 다른 글
| 논문 리뷰 - 캐스케이드 검출기 (Cascade Detector) 톺아보기 (2) | 2023.02.11 |
|---|---|
| 논문 리뷰 - SSD(Single Shot MultiBox Detector) 톺아보기 (0) | 2022.03.30 |
| 논문 리뷰 - Faster R-CNN 톺아보기 (0) | 2022.03.17 |
| 논문 리뷰 - Fast R-CNN 톺아보기 (2) | 2022.03.09 |
| 논문 리뷰 - SPP-net 톺아보기 (0) | 2022.02.26 |