우리는 ChatGPT가 수많은 데이터를 학습하여 마치 사람처럼 답변을 만들어낸다고 알고 있습니다. 하지만 ‘도대체 어떻게 배우길래 이렇게 잘 대답할 수 있는 걸까?’라는 궁금증은 여전히 남아 있습니다. 언뜻 마법처럼 보이지만, 그 이면에는 언어의 규칙과 패턴을 읽어내는 기계의 끈질긴 훈련 과정이 숨어 있습니다.
이 글에서는 복잡한 수식이나 논문 대신 쉽게 풀어낸 비유와 단계별 구조로, 대규모 언어 모델(LLM)이 만들어지는 과정을 함께 살펴보겠습니다. 모델의 설계부터 데이터 수집과 전처리, 학습, 평가, 튜닝까지의 여정을 이해하게 되면, AI의 뇌가 어떻게 구성되어 사고하고 말하는지 자연스럽게 감을 잡을 수 있을 것입니다.
우리가 사용하는 ChatGPT와 같은 LLM(대규모 언어 모델)은 처음부터 ‘똑똑한 상태’로 태어나는 것이 아닙니다. 모델을 학습시키기 전, 모델의 뼈대와 기초 설정을 잡는 ‘설계 및 초기화 단계’가 반드시 필요합니다.
(1) 모델 구조 설계
먼저, 어떤 구조로 모델을 만들지 결정합니다. 현재 대부분의 LLM은 Transformer 구조를 기반으로 만들어집니다. Transformer는 문장 안에서 단어들이 서로 어떤 관계를 맺고 있는지 파악하는 데 매우 효과적인 구조이기 때문에 대규모 언어 모델의 표준처럼 사용됩니다.
(2) 하이퍼파라미터와 가중치 초기 설정
모델 구조를 정했다면, 이제 모델이 학습을 시작하기 위한 ‘초기 설정’을 해주어야 합니다.
하이퍼파라미터(Hyperparameter): 모델이 학습하는 과정에서 사용하는 외부 설정값으로, 사람이 직접 정합니다. 예) 학습 속도를 결정하는 학습률(Learning Rate), 한 번에 학습할 데이터의 양(Batch Size)
가중치(Weight): 모델이 학습을 통해 스스로 찾아가는 내부 값입니다. 모델은 가중치를 조정해 나가며 문장 패턴을 학습합니다.
이 가중치의 ‘초기값’을 잘 설정하는 것이 중요합니다. 왜냐하면
가중치가 너무 작으면 → 모든 뉴런(신경망의 계산 단위)이 비슷하게 작동하여 학습이 진행되지 않거나, 죽은 뉴런(Dead Neuron)이 발생해 성능이 떨어집니다.
가중치가 너무 크면 → 학습 도중 계산값(기울기)이 지나치게 커져 모델이 불안정해지며, 수치가 발산하는 기울기 폭발(Gradient Explosion)이 발생합니다.
이 문제를 막기 위해, 연구 결과와 경험을 기반으로 적절한 초기값을 설정하여 학습이 안정적으로 시작되도록 준비합니다.
(3) 손실 함수(Loss Function) 설정
모델은 학습할 때, 예측값(모델의 출력)과 실제 정답값(우리가 알고 있는 답) 사이의 차이를 계산하며 학습합니다. 이 차이를 수치로 계산하는 도구가 바로 손실 함수(Loss Function)입니다. 모델은 손실 함수의 값(예측과 정답의 차이)을 계속 줄여나가는 방향으로 가중치를 업데이트하여 더 정확한 답을 예측할 수 있도록 학습하게 됩니다.
즉, 손실 함수는 모델 학습의 나침반 역할을 합니다.
(4) 최적화 알고리즘 설정
손실 함수를 통해 “얼마나 틀렸는지”를 계산한 후, 모델은 가중치를 어떻게 바꿀지 결정해야 합니다. 이때 사용하는 방법이 최적화 알고리즘(Optimizer)입니다. 최적화 알고리즘은 손실을 최소화하기 위해 가중치를 효과적으로 업데이트하는 방법론으로, 대표적으로 SGD, Adam, AdaFactor, Lion 등이 사용됩니다.
이 과정을 요리에 비유해 이해해 보겠습니다.
하이퍼파라미터는 요리를 준비하기 전에 정하는 조건입니다. 불 세기, 조리 시간, 재료의 양과 같은 것들입니다.
가중치는 요리의 맛을 결정하는 세부 재료 비율입니다. 소금, 설탕의 비율처럼 레시피의 핵심 요소입니다.
최적화 알고리즘은 맛을 보면서 레시피를 조절해 가는 요리사입니다. 요리사(최적화 알고리즘)는 정해진 요리 조건(하이퍼파라미터) 속에서, 더 맛있는 요리(최적의 예측값)를 완성하기 위해 레시피(가중치)를 조금씩 바꿔 가면서 요리를 완성해 나갑니다.
LLM(대규모 언어 모델)이 똑똑해지기 위해서는 ‘무엇을 학습하는가’가 매우 중요합니다. 모델의 성능은 학습에 사용된 데이터의 품질과 범위에 크게 영향을 받기 때문에, 좋은 데이터를 얼마나, 어떻게 준비하느냐가 모델의 능력을 결정짓는 핵심 단계입니다.
학습 데이터의 역할
모델은 주어진 데이터를 통해 언어의 패턴, 문맥, 단어와 문장 간의 관계를 학습합니다. 따라서 데이터가 다양하고 품질이 높을수록, 모델이 더 넓고 정확한 언어 이해 능력을 갖출 수 있습니다.
어떤 데이터를 준비할까?
모델이 학습할 데이터는 크게 두 가지 유형으로 구분됩니다.
일반적인 지식과 언어 구조를 학습하기 위한 데이터 백과사전적 지식, 일상 회화, 뉴스 기사, 문학 작품 등. 예) OpenWebText, Wikipedia, Common Crawl, GitHub 공개 코드, arXiv 연구 논문.
특정 도메인에 특화된 데이터 의료, 법률, 과학, 금융, 고객 상담 로그 등 특정 분야에서 정확도를 높이기 위한 데이터. 예) PubMed(의료), 법령 DB(법률), 재무제표 및 투자 보고서(금융).
이 외에도 회사 내부의 FAQ, 상담 데이터, 제품 설명서 등 실제 업무에 특화된 내부 데이터도 학습에 활용할 수 있습니다.
좋은 데이터의 기준
다양성(Diversity): 다양한 주제, 문체, 언어 스타일을 포함하고 있어야 합니다.
품질(Quality): 오타, 욕설, 스팸, 불필요한 기호 등이 제거된 깨끗한 데이터여야 합니다.
최신성(Freshness): 최신 정보와 트렌드를 반영할 수 있어야 합니다.
정답 레이블(Label): 지도 학습을 할 경우, 입력과 정답이 명확히 구분되어야 합니다.
왜 데이터 준비가 중요한가?
모델 구조와 알고리즘이 동일하더라도, 학습에 사용된 데이터가 무엇이냐에 따라 모델의 ‘성격과 성능’이 달라집니다. 예를 들어, 일반 지식 학습만 한 모델은 법률 문서를 정확히 해석하기 어렵지만, 법률 특화 데이터를 함께 학습하면 정확도가 크게 향상됩니다. 즉, 데이터 준비는 모델의 기반 체력을 만드는 단계라고 할 수 있습니다.
대규모 언어 모델(LLM)이 똑똑하게 학습하기 위해서는 데이터가 깨끗하고 학습하기 좋은 형태로 준비되어야 합니다. 수집한 원본 데이터에는 광고, 중복 문장, 스팸, 불필요한 기호, HTML 태그, 욕설, 민감한 정보 등이 포함될 가능성이 높기 때문입니다.
(1) 데이터 정제(Cleaning)
먼저, 데이터의 품질을 높이는 클리닝 작업을 진행합니다.
광고 문구, 스팸, HTML 태그 제거
불필요한 특수 기호, 이모지, 공백 정리
중복 문장 삭제
욕설, 차별적 표현, 민감한 개인 정보 필터링
이 과정을 통해 모델이 불필요한 정보에 자원을 낭비하지 않도록 하며, 깨끗한 데이터만 학습하게 하여 성능 저하를 방지합니다.
(2) 학습 방식에 따른 데이터 구성
전처리된 데이터는 LLM의 학습 방식에 따라 구성됩니다.
비지도 학습(Unsupervised Learning)
정답(레이블)이 없는 데이터로 패턴을 스스로 학습하는 방식입니다. LLM은 대규모 비지도 학습을 통해 기본적인 언어 구조, 문맥, 단어 관계를 이해하도록 훈련됩니다.
예를 들어 “나는 오늘 아침에 ___을(를) 마셨다.”라는 문장이 있으면 모델은 빈칸에 들어갈 가능성이 가장 높은 단어를 예측하며 언어 패턴을 학습합니다. 이 과정은 언어 이해 능력을 키우는 데 효과적이지만, 번역이나 요약 같은 특정 작업 수행 능력을 바로 만들지는 못합니다.
지도 학습(Supervised Learning)
정답(레이블)이 포함된 데이터셋으로 학습하는 방식입니다. 예로 질문과 정답(QA 데이터셋), 번역 데이터셋 등이 있을 수 있습니다. 모델은 입력과 정답의 짝을 보고 정답을 맞추도록 훈련되며, 이를 통해 특정 태스크(번역, 요약, Q&A 등)를 수행할 수 있는 능력을 갖추게 됩니다.
(3) 토큰화(Tokenization)
마지막으로, 정제된 텍스트 데이터를 모델이 학습할 수 있는 형태로 변환하는 단계가 필요합니다. 신경망 모델은 텍스트 자체를 학습하지 못하므로, 텍스트를 숫자로 표현되는 ‘토큰(Token)’ 단위로 변환해야 합니다. 토큰화 방법 예시는 아래와 같습니다.
Word Tokenization (단어 단위)
“I love NLP” → [“I”, “love”, “NLP”]
Subword Tokenization (서브워드 단위)
“unhappiness” → [“un”, “happiness”]
Character Tokenization (문자 단위)
“Hello” → [“H”, “e”, “l”, “l”, “o”]
대규모 언어 모델에서는 주로 서브워드 단위 토큰화(BPE, WordPiece, SentencePiece 등)를 사용합니다. 이는 언어의 유연성을 높이고, 희귀 단어를 효과적으로 처리하며, 메모리 사용량을 줄일 수 있기 때문입니다.
사전학습(Pre-Training)은 LLM(대규모 언어 모델)이 ‘언어를 이해하고 예측할 수 있는 기본 능력’을 기르는 핵심 단계입니다. 모델은 이 과정을 통해 문법, 어휘, 문맥, 단어의 관계 등 언어의 기본 패턴과 구조를 폭넓게 학습합니다.
(1) 학습 목표 정의
먼저 학습의 목표를 정의합니다. GPT 계열 모델은 다음 단어 예측이 목표입니다.
예) “나는 오늘 아침에 ___을 마셨다.” → 빈칸에 들어갈 단어 예측
BERT 계열 모델은 Masked Language Model 방식으로, 일부 단어를 마스킹한 뒤 이를 복원하는 것이 목표입니다.
예) “나는 오늘 [MASK]을 마셨다.” → [MASK]에 해당하는 단어를 복원
이러한 목표는 모델이 자연스럽게 문장 속 단어의 의미와 문맥을 이해하도록 돕습니다.
(2) 입력값과 정답값의 구성
모델이 학습하는 데이터는 입력값(Input)과 정답값(Target)으로 구성됩니다.
입력값(X): 모델이 학습에 사용하는 실제 문장 데이터
정답값(Y): 모델이 예측해야 하는 정답 데이터
모델은 입력값 X에 대해 예측값 Y’을 출력하며, 이 예측값과 실제 정답값 Y 사이의 차이를 계산합니다.
이 차이는 손실 함수(Loss Function)를 통해 수치화되며, 손실을 줄이는 방향으로 가중치(Weight)를 지속적으로 업데이트합니다. 이 과정을 수천만~수억 회 이상 반복하면서, 예측값 Y’이 실제값 Y에 점차 가까워지도록 모델이 학습됩니다.
(3) 검증 데이터(Validation Data)
모델은 학습이 진행될수록 훈련 데이터(Training Data)에 맞춰 가중치와 편향이 최적화됩니다. 그러나 훈련 데이터에만 너무 맞춰져 새로운 데이터를 잘 처리하지 못하는 ‘과적합(Overfitting)’ 문제가 발생할 수 있습니다. 이를 방지하기 위해 검증 데이터(Validation Data)를 사용하여 학습 중 모델의 일반화 성능을 평가합니다.
검증 데이터는 학습 도중 가중치를 업데이트하지 않으며, 하이퍼파라미터(학습률, 배치 크기 등)를 조정하는 기준으로만 사용됩니다.
(4) 하이퍼파라미터 튜닝
하이퍼파라미터(Hyperparameter)는 모델 학습의 효율과 성능을 결정하는 중요한 설정값으로, 사람이 직접 설정하거나 자동화된 탐색으로 조정합니다. 적절한 하이퍼파라미터 설정은 모델의 성능을 높이고, 학습 속도와 정확도 사이의 균형을 맞추는 데 중요합니다.
하이퍼파라미터의 예시
학습률(Learning Rate): 가중치를 업데이트할 때 이동하는 크기
배치 크기(Batch Size): 한 번에 학습할 데이터의 개수
에포크 수(Epochs): 데이터셋 전체를 학습하는 횟수
드롭아웃 비율(Dropout Rate): 과적합을 방지하기 위해 일부 뉴런을 랜덤으로 비활성화하는 비율
하이퍼파라미터는 학습의 방향과 속도를 결정하기 때문에, 상황에 맞게 조정하며 최적의 성능을 찾는 과정이 필요합니다.
(5) 테스트 데이터(Test Data)
테스트 데이터는 모델의 최종 성능을 평가하는 용도로 사용되며, 학습 및 검증 과정에서는 절대 사용되지 않습니다. 테스트 데이터를 통해 실제 환경에서 모델이 얼마나 잘 작동하는지 확인합니다. 테스트 과정에서는 가중치나 하이퍼파라미터가 변경되지 않습니다. 이를 통해 모델의 일반화된 성능을 객관적으로 측정할 수 있습니다.
모델의 성능을 측정하고 개선 사항을 도출하는 과정입니다. 성능 측정 지표를 통해 모델이 원하는 태스크에서 얼마나 잘 작동하는지 평가하게 됩니다. 실제 데이터 또는 유사 환경에서 테스트를 수행하여 일반화 성능(Generalization)을 확인합니다.
모델의 어떤 부분을 평가하고 문제를 정의하는 것일까요? 주로 모델이 특정 태스크에서 과적합(Overfitting) 또는 과소적합(Underfitting)되었는지를 확인합니다. 그리고 데이터가 부족한지, 모델 구조에 문제가 있는지, 하이퍼파라미터 설정에 오류가 있는지를 확인합니다. 그 결과에 따라 해결방안을 도출합니다.
Q. 모델이 과적합(Overfitting) 또는 과소적합(Underfitting) 되었는가?
과적합: 학습 데이터에서는 성능이 좋지만 새로운 데이터(테스트 데이터)에서는 성능이 낮아짐
과소적합: 학습 데이터에서도 성능이 낮으며, 모델이 충분히 패턴을 학습하지 못한 상태
해결 방안: 모델의 복잡도를 조정하거나, 데이터셋을 확장하고 하이퍼파라미터를 튜닝해야 함
Q. 데이터가 충분한가? 데이터 품질은 적절한가?
모델이 일반화되기 위해 충분한 학습 데이터가 필요함
데이터에 노이즈가 많거나, 라벨 오류가 있을 경우 모델 성능이 저하됨
해결 방안: 데이터 증강(Data Augmentation), 데이터 필터링(노이즈 제거), 더 많은 데이터 확보
데이터 증강(Data Augmentation)은 새로운 학습 데이터를 생성하는 방법으로 데이터셋이 제한적일 경우 효과적일 수 있습니다. 이미지나 텍스트의 기존 데이터로부터 새로운 데이터를 파생해 내는데 이미지의 색, 크기 등을 변형하거나 텍스트의 단어나 문장 레벨에서 단어 교체를 통해 추가 변경합니다.
Q. 하이퍼파라미터 설정이 적절한가?
학습률(Learning Rate), 배치 크기(Batch Size), 드롭아웃(Dropout) 비율 등의 하이퍼파라미터가 적절하게 설정되었는지 점검
해결 방안: 하이퍼파라미터를 재조정하여 학습이 더 효과적으로 진행되도록 변경
자동 학습률 조절 (Learning Rate Scheduling)으로 학습이 일정 수준에서 정체되면 학습률을 자동으로 조절해 성능을 향상시킬 수 있습니다.
Q. 모델 구조가 적절한가?
레이어 수, 뉴런 수, Attention Head 수 등을 조정해 모델의 용량과 성능을 최적화해야 합니다. 너무 복잡한 구조는 과적합을 유발하며, 너무 단순한 구조는 학습을 제대로 하지 못할 수 있습니다.
Q. 최적화 알고리즘이 적절한가?
Adam, SGD, RMSProp 등의 최적화 알고리즘이 문제에 적합한지 평가해야 합니다. 최적화 알고리즘이 잘못 설정되면 학습 속도가 너무 느리거나, 지역 최적값(Local Minima)에 빠질 가능성이 있습니다.
보통은 테스트 후 파인튜닝으로 부분적인 개선을 진행합니다. 특정 도메인 성능을 개선하려는 경우나 일반적인 성능은 양호하지만 특정 태스크에서만 문제가 있는 경우입니다. 그러나 필요하다면 사전학습을 다시 수행할 수 있습니다. 모델이 처리해야 할 데이터의 특성이 완전히 바뀌었거나 새로운 데이터를 통합해야 하는 경우입니다. 그리고 레이어 추가, Attention Head 변경 등 근본적인 구조 변경이 있을 때 기존 가중치가 더 이상 적합하지 않다면 사전학습을 다시 수행해야 합니다.
평가지표로는 아래와 같은 것들이 활용되며 실제 사용 환경에서 모델의 동작을 테스트해 성능 검증하기도 합니다.
Perplexity: 언어 모델의 문맥 이해도를 측정하며 낮을수록 좋음
BLEU/ROUGE: 번역 및 요약 성능을 측정하는 지표로 BLEU는 기계 번역, ROUGE는 텍스트 요약에서 사용됨
Accuracy: 분류 문제에서의 정확도를 사용하며 맞춘 비율을 측정
F1 Score: Precision(정밀도)과 Recall(재현율)의 조화 평균을 나타내는 지표임. Recall은 실제 정답 중 모델이 맞춘 비율이며 Precision은 모델이 정답이라고 예측한 것 중 실제 정답의 비율임
학습 데이터에서 정답셋(레이블)을 정확히 정의하고 분류하는 것은 모델 성능의 핵심입니다. 정답값은 모델이 학습 과정에서 손실을 계산하고 가중치를 최적화하는 기준이 됩니다. 특히, 학습 데이터에서 입력(Input)과 정답(Target)을 명확히 분리하지 못하면 모델은 잘못된 학습을 하게 되어 성능이 저하될 수 있습니다.
그러나 위키피디아와 같은 텍스트에는 정답셋이라고 할 수 있는 데이터가 없습니다. 그러면 어떻게 정답셋을 준비해 학습을 진행할까요? 이때 자가 지도 학습(Self-Supervised Learning) 기법을 사용합니다. 이 접근법에서는 입력 데이터에서 스스로 레이블을 생성할 수 있습니다. 다음 두 가지 예시를 보겠습니다.
Masked Language Model(BERT 스타일)
문장에서 일부 단어를 마스킹(숨김)해 모델이 이 단어를 복원하도록 학습합니다. 입력값이 “The capital of France is [MASK].”일 때 정답값은 “[MASK]”에 해당하는 “Paris”입니다. 모델은 마스킹된 단어를 복원하며 문맥 정보를 학습합니다.
Autoregressive 모델(GPT 스타일)
모델은 이전 단어들을 사용하여 다음 단어를 예측합니다. 입력값이 “The capital of France is”일 때 정답값은 “Paris”입니다. 모델은 입력값 다음에 올 가장 적합한 단어를 생성하도록 학습합니다.
즉, 문서 자체에서 텍스트를 분할해 입력값과 정답값으로 나눈 뒤 가중치와 하이퍼파라미터 튜닝을 통해 최적화하면서 스스로 그 답을 찾아가는 것입니다.
하이퍼파라미터들은 모델 설계자가 미리 설정하거나 자동 튜닝 방식을 통해 조정됩니다. 최적화 알고리즘은 하이퍼파라미터의 일부를 조정해 더 나은 학습을 도모합니다. 예를 들어 학습률이나 배치 크기 등의 값을 레이어나 파라미터에 따라 어떻게 설정할지를 판단하는 것입니다.
최적화 알고리즘은 학습 과정에서 모델 파라미터를 업데이트하는 방법론을 정의합니다. 모델이 학습 데이터로부터 패턴을 추출하도록 하는 “학습 방법”이라 할 수 있으며, 하이퍼파라미터를 알고리즘의 일부로 사용합니다. 그러나 하이퍼파라미터 튜닝은 최적화 알고리즘과 별개로, 학습에 영향을 미치는 변수들의 최적값을 찾는 과정입니다. 최적화 알고리즘에 사용되는 학습률, 배치 크기, 드롭아웃 확률 등을 실험적으로 조정하는 작업이라 할 수 있습니다.
하이퍼파라미터 튜닝은 최적화 알고리즘의 성능을 최대로 끌어올리기 위한 별도의 실험 과정으로 이해하시면 좋을 것입니다. 최적화 알고리즘은 하이퍼파라미터 튜닝을 “포함한 학습 알고리즘”으로 볼 수 있으나, 두 개념을 완전히 동일시할 수는 없습니다.
ChatGPT와 같은 LLM이 ‘사람처럼 말하는 능력’을 갖추기까지는 모델 설계, 데이터 수집과 정제, 사전학습, 하이퍼파라미터 튜닝, 평가와 개선이라는 꼼꼼한 과정을 거치게 됩니다. 이 과정에서 모델은 수많은 문장 속 규칙과 패턴을 스스로 찾아내며, 예측과 오류 수정의 반복을 통해 조금씩 똑똑해집니다.
우리가 보는 ChatGPT의 ‘자연스러운 답변’은 단순한 출력이 아닙니다. 그것은 무수한 시도와 실패, 그리고 개선을 반복해온 결과물이며, 동시에 지금 이 순간에도 더 나은 대답을 하기 위해 발전해 나가고 있습니다.
이제 ChatGPT가 답을 만들어내는 이면의 원리를 이해할 수 있게 되었습니다. 앞으로 ChatGPT를 사용할 때마다 “이 대답 뒤에는 어떤 학습과 선택의 과정이 있었을까?”라는 시선으로, AI의 대답을 더 깊이 이해하고 활용할 수 있으리라 생각합니다.