목차
LLM 지도: 딥러닝에서 검색 증강 생성까지
LLM을 이해할 때 자주 나오는 단어가 딥러닝, 임베딩, 언어 모델, 트랜스포머, RAG다. 각 용어를 따로 외우기보다 텍스트가 숫자로 바뀌고, 모델이 그 숫자에서 패턴을 학습해 답변을 만드는 과정으로 연결해서 보자.
flowchart LR
A[원문 텍스트] --> B[토큰화]
B --> C[임베딩: 토큰을 벡터로 표현]
C --> D[언어 모델: 문맥 속 패턴 학습]
D --> E[다음 토큰 예측과 답변 생성]
F[관련 문서 검색] --> G[근거를 프롬프트에 추가]
G --> D
그림의 위쪽은 생성 언어 모델의 기본 경로다. 아래쪽 검색 경로는 최신 또는 특정 문서의 정보가 필요할 때 추가한다. 검색이 모델의 가중치를 바꾸는 것은 아니며, 답변할 때 읽을 근거를 제공한다.
딥러닝(Deep Learning)이란?
딥러닝은 여러 층의 신경망(Neural Network)을 사용해 데이터의 표현과 예측 규칙을 학습하는 머신러닝(Machine Learning)의 한 분야다. 표 형태의 정형 데이터뿐 아니라 텍스트와 이미지 같은 데이터도 다룰 수 있다. LLM은 그중 언어 데이터를 다루는 모델이며, 자연어 처리(NLP)의 질문 답변·분류·요약과 자연어 생성(NLG)에 활용된다.
언어 모델(Language Model)
언어 모델은 토큰들의 패턴을 학습한다. 텍스트를 생성하는 자기 회귀 언어 모델은 앞의 토큰을 바탕으로 다음 토큰의 확률을 계산하고, 선택한 토큰을 입력에 덧붙이는 과정을 반복한다. 여기서 단위는 항상 완전한 “단어”가 아니라 토크나이저가 나눈 토큰이다. 모든 언어 모델이 같은 방식으로 학습하는 것은 아니다. 예를 들어 빈칸을 맞히는 방식으로 학습한 인코더 모델은 분류나 임베딩에 많이 쓴다.
딥러닝의 문제 해결 방법
- 풀려는 문제(분류, 검색, 생성 등)에 맞는 모델과 평가 기준을 정한다.
- 학습·검증·테스트 데이터를 준비하고, 훈련 데이터의 패턴으로 모델을 학습한다.
- 검증 결과와 실제 오류 사례를 보고 데이터와 모델을 조정한다.
💡 전통적인 머신러닝에서는 사람이 입력 특징을 직접 설계하는 경우가 많다. 딥러닝에서는 신경망이 학습 과정에서 여러 단계의 표현을 함께 조정한다. 둘 사이의 차이를 “사람은 특징을 전혀 설계하지 않는다”로 이해하면 곤란하다. 토큰화, 데이터 선택, 모델 구조 같은 결정에는 여전히 사람이 관여한다.
예를 들어 자동차 사진을 분류할 때 사람이 바퀴 모양 등의 특징을 계산해 분류기에 넣을 수 있다. 신경망은 원본 픽셀에서 분류에 도움이 되는 표현을 학습할 수 있다. 두 경우 모두 좋은 데이터와 평가가 필요하다.
임베딩: 딥러닝 모델이 데이터를 표현하는 방식
임베딩(Embedding)은 토큰이나 문장 같은 대상을 숫자 벡터로 표현한 것이다. 모델은 훈련 목적에 맞는 정보를 벡터에 담도록 조정된다. 숫자 자체가 단어의 사전적 의미를 설명하는 것은 아니다.
벡터 간 거리나 유사도를 계산하면 관련 있는 질문과 문서를 가까운 순서로 찾을 수 있다. 단, 어떤 거리를 쓸지와 어떤 데이터로 학습했는지에 따라 “가깝다”의 의미가 달라진다. 예를 들어 검색용 임베딩에서는 “암호를 잊었어요”와 “비밀번호 재설정”이 가까워지는 것이 도움이 된다.
임베딩은 거리를 계산할 수 있기 때문에 다음과 같은 작업에 활용
- 검색 및 추천: 질문과 관련 문서를 찾아 순위를 매긴다.
- 클러스터링 및 분류: 비슷한 문장을 묶거나 예측에 활용한다.
- 이상치(Outlier) 탐지: 다른 항목과의 거리가 유난히 큰 후보를 조사한다.
언어 모델링: 딥러닝 모델의 언어 학습법
생성 모델의 대표적인 학습 목표는 문맥에서 다음 토큰을 예측하는 것이다. “오늘 점심은” 다음에 올 수 있는 토큰의 확률을 계산하고 실제 데이터의 다음 토큰에 더 높은 확률을 주도록 학습한다. 이 과정만으로 특정 작업의 지시를 잘 따른다는 보장은 없어서, 사용 목적에 맞는 추가 학습과 평가가 필요하다.
다음 숫자는 실제 모델의 예측 결과가 아닌 원리를 설명하기 위한 가상 예시다. “오늘 점심은” 다음 토큰 후보의 확률이 김밥: 0.55, 비빔밥: 0.30, 회의: 0.15라면 한 토큰을 선택한 뒤 새 문맥을 만들어 다시 확률을 계산한다. 김밥을 선택했다고 해서 문장 전체가 미리 결정된 것은 아니다. 한 번씩 가장 큰 값만 고르는 방식과 여러 후보를 확률에 따라 뽑는 방식은 결과의 일관성·다양성이 달라진다. 또한 높은 다음 토큰 확률은 사실 검증 점수가 아니다. 그럴듯한 정책 문장이 높은 확률로 나올 수도 있다.
# 실제 모델 호출이 아닌 다음 토큰 선택의 개념 예시
probabilities = {"김밥": 0.55, "비빔밥": 0.30, "회의": 0.15}
next_token = max(probabilities, key=probabilities.get)
print(next_token) # 김밥
이 코드는 가장 높은 확률의 후보를 고르는 탐욕 디코딩(greedy decoding)만 보여준다. 실제 서비스에서는 토크나이저로 분할한 토큰 ID, 종료 토큰, 길이 제한, 샘플링 온도 같은 조건을 함께 다룬다. 확률 표는 문맥이 바뀔 때마다 모델이 다시 계산해야 한다.
- 전이 학습(transfer learning): 한 데이터에서 배운 표현을 다른 과제에 활용한다.
- 사전 학습(pretraining): 대규모 데이터로 일반적인 언어 패턴을 학습한다.
- 미세 튜닝(fine-tuning): 분류나 특정 형식의 답변처럼 다운스트림 과제에 맞는 데이터로 추가 학습한다. 분류 헤드만 학습할 수도 있고 모델의 일부 또는 전체 가중치를 조정할 수도 있다.
- 다운스트림 과제(downstream task): 사전 학습 모델을 활용해 실제로 풀려는 분류·요약·질문 답변 같은 문제다.
전이 학습은 과제별로 처음부터 모델을 학습하는 비용을 줄일 수 있다. 그러나 데이터가 적으면 과적합할 수도 있으므로 기존 모델과 미세 튜닝 모델을 같은 평가 세트에서 비교해야 한다.
언어 모델의 구조: RNN에서 트랜스포머로
RNN에서 트랜스포머 아키텍처로
시퀀스(Sequence)는 순서가 있는 데이터다. 텍스트에서는 토큰들이 순서대로 이어진다. “고양이가 밥을 먹었다”와 “밥이 고양이를 먹었다”는 같은 단어를 사용해도 순서에 따라 뜻이 달라진다.
이런 데이터를 다루는 대표적인 구조로 RNN(순환 신경망)과 Transformer(트랜스포머)가 있다.
트랜스포머 이전에는 RNN 계열 모델이 시퀀스 처리에 널리 쓰였다. 이후 Attention Is All You Need 논문은 순환 구조 없이 어텐션을 중심으로 한 트랜스포머를 제안했다.
순환신경망(RNN : Recurrent Neural Network)
입력 토큰을 순서대로 처리해 잠재 상태(hidden state)를 갱신한다. 다음은 어절을 하나씩 입력하는 개념 예시다. 실제 모델의 토큰 분할과는 다를 수 있다.
| 단계 | 들어온 어절 | 잠재 상태가 반영한 앞부분 |
|---|---|---|
| 1 | 검은 | 검은 |
| 2 | 고양이가 | 검은 고양이가 |
| 3 | 밥을 | 검은 고양이가 밥을 |
| 4 | 먹고 | 검은 고양이가 밥을 먹고 |
| 5 | 물을 | 검은 고양이가 밥을 먹고 물을 |
| 6 | 마신다 | 검은 고양이가 밥을 먹고 물을 마신다 |
표 오른쪽은 잠재 상태의 실제 값을 적은 것이 아니다. 각 단계의 상태가 어느 입력까지 반영하는지를 글로 나타낸 것이다. 이전 단계의 맥락을 제한된 상태에 담으므로 긴 거리의 관계를 학습하기 어려울 수 있고, 학습 중 여러 위치의 계산을 순차적으로 수행해야 한다.
추론할 때는 앞부분의 상태를 이어서 사용할 수 있다는 장점이 있다. 하지만 실제 속도와 메모리는 모델 구조, 구현, 입력 길이에 따라 달라지므로 RNN이 항상 더 빠르다고 단정하지 않는다.
트랜스포머(Transformer)
트랜스포머는 토큰 사이의 관계를 계산하는 셀프 어텐션(self-attention)을 사용한다. 학습할 때 여러 위치를 병렬로 처리할 수 있다는 점이 RNN과 큰 차이다. 생성 과정 자체는 다음 토큰을 하나씩 선택해야 하므로 완전히 병렬화되지는 않는다.
예를 들어 “물을” 다음에 “마신다”를 예측할 때 앞의 “고양이가”, “밥을”, “먹고”와 어떤 관계가 있는지 어텐션으로 반영할 수 있다. 생성용 모델은 미래의 토큰을 미리 보지 않도록 주의를 제한한다.
긴 입력에서는 어텐션의 계산과 중간 값 저장 비용이 커진다. 다만 실제 생성 시스템은 이전 계산 결과를 재사용하는 등 여러 최적화를 적용한다. 따라서 “매 토큰마다 과거 전체를 처음부터 다시 계산한다”거나 “트랜스포머가 언제나 RNN보다 낫다”는 설명은 정확하지 않다. 두 구조의 장단점은 과제와 구현 조건을 함께 보고 판단한다.
LLM의 환각 현상을 대처하는 검색 증강 생성(RAG) 기술
LLM은 유창한 문장을 만들 수 있지만, 질문에 대한 답이 사실과 다르거나 주어진 근거에 없는 내용을 말할 수 있다. 이를 흔히 환각(hallucination)이라고 부른다. 예를 들어 회사의 환불 정책을 모르는 모델이 존재하지 않는 “7일 이내 전액 환불” 규정을 안내하는 경우다.
환각에 원인이 하나만 있는 것은 아니다. 학습 목표, 불완전하거나 오래된 자료, 모호한 질문, 검색 실패 등이 결과에 영향을 줄 수 있다. “모델은 진위를 전혀 학습하지 않는다”거나 “드문 정보가 압축 과정에서 사라지기 때문”이라고 한 가지 이유로 확정할 수 없다. 자연어 생성의 환각 연구 검토도 여러 과제와 대응 방법을 구분해 다룬다.
RAG는 어디에 개입할까?
검색 증강 생성(Retrieval-Augmented Generation, RAG)은 질문과 관련된 외부 문서를 찾고, 그 내용을 질문과 함께 생성 모델에 전달한다. 예를 들어 “환불은 언제 되나요?”라는 질문이 오면 최신 정책 문서에서 해당 조항을 찾아 답변의 근거로 준다. 원래 RAG 논문은 학습된 모델의 지식과 검색 가능한 외부 지식을 결합하는 구조를 제안했다.
flowchart LR
Q[사용자 질문] --> S[관련 문서 검색]
S --> C[근거 문서와 질문 결합]
Q --> C
C --> L[LLM 답변 생성]
L --> V[답변 문장과 근거 대조]
V --> A[출처를 포함한 답변]
그림의 마지막 근거 대조가 중요하다. 문서를 검색했다고 해서 모델이 반드시 그 문서만 사용하거나 올바르게 인용하는 것은 아니다. 검색이 틀린 문서를 가져오거나, 정답 문서가 아예 없거나, 모델이 문서를 잘못 읽으면 여전히 틀린 답을 만들 수 있다.
따라서 RAG 시스템은 검색 품질과 답변의 근거 충실도를 따로 평가한다. 정답 문서가 상위 검색 결과에 들어왔는지, 답변의 핵심 주장마다 제공된 문서가 실제로 뒷받침하는지 확인한다. 근거가 없으면 답을 추측하는 대신 “확인할 자료가 없습니다”라고 말하도록 설계할 수 있다. RAG는 환각을 줄이는 데 도움을 줄 수 있지만, 정확성을 자동으로 보장하는 장치는 아니다.
정리
이 글의 지도는 표현 학습 → 언어 모델링 → 시퀀스 모델 구조 → 외부 근거를 활용한 생성 순서다. 임베딩은 텍스트를 벡터로 나타내고, 언어 모델은 그 표현에서 다음 토큰의 패턴을 학습한다. 트랜스포머는 토큰 간 관계를 어텐션으로 계산하며, RAG는 모델 바깥의 문서를 답변 시점에 제공한다. 각각이 해결하는 문제가 다르므로 원하는 작업과 평가 기준을 먼저 정하는 것이 출발점이다.