LLM 동작 심화

shin·2026년 4월 19일

Google AI

목록 보기
8/8

1. LLM은 어떻게 동작하는가

  • LLM은 “문장을 이해하는 모델”이 아님
  • 다음 토큰을 예측하는 확률 모델임

핵심은 아래 하나로 정리됨

P(다음 토큰 | 이전 토큰)
  • 즉, 지금까지 입력된 문맥을 기반으로 가장 그럴듯한 다음 단어를 계속 이어붙이는 구조

2. Transformer와 Self-Attention

——

  • LLM 성능의 핵심은 Transformer 구조임
  • 그 중심에는 Self-Attention이 있음

각 토큰은 다음 3가지로 변환됨

  • Query (Q)
  • Key (K)
  • Value (V)

동작 방식

  1. Q와 K를 비교해서 중요도 계산
  2. Softmax로 확률화
  3. 그 결과를 V에 반영

-> 이를 통해 “어떤 단어를 더 참고할지” 결정함


장점

  • 문장 전체를 한 번에 봄 (병렬 처리 가능)
  • 먼 단어 간 관계도 잡아냄

간단한 Attention 계산 예시

import numpy as np

# Query, Key, Value (예시)
Q = np.array([[1, 0, 1]])
K = np.array([[1, 1, 0],
              [0, 1, 1],
              [1, 0, 1]])
V = np.array([[1, 0],
              [0, 1],
              [1, 1]])

# Attention score
scores = Q @ K.T

# Softmax
weights = np.exp(scores) / np.sum(np.exp(scores))

# 결과
output = weights @ V

print(output)

의미

어떤 단어가 더 중요한지 가중치로 반영하는 과정


3. Tokenization의 중요성

——

  • LLM은 문장이 아니라 토큰 단위로 처리함

예시:

  • “Hello world” → [“Hello”, “ world”]

문제점

  • 토큰 수 = 비용

  • 토큰 분해 방식에 따라 결과 달라짐
    -> 특히 한국어는 비효율적인 경우 많음


결과

  • 같은 의미라도 비용 차이 발생
  • 긴 문장은 성능 저하 발생

4. In-Context Learning

—-

  • LLM은 학습 없이도 “학습한 것처럼” 동작

예시:

Input:
A: 1 + 1 = 2
A: 2 + 2 = 4
A: 3 + 3 = ?
  • 모델은 패턴을 보고 6을 출력함
  • 실제로는 weight 업데이트 없음
    • 그냥 context 안에서 패턴을 따라가는 것임

핵심

프롬프트 = 임시 학습 데이터 역할


5. Temperature와 출력 제어

——

  • LLM 출력은 항상 같지 않음
import openai

response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "송금 실패 이유 설명"}],
    temperature=0.2
)
  • temperature 낮음 → 안정적, 반복적

  • temperature 높음 → 다양성 증가


6. Embedding과 의미 공간

——

  • 텍스트는 벡터로 변환됨
from sklearn.metrics.pairwise import cosine_similarity

vec1 = [0.1, 0.2, 0.3]
vec2 = [0.1, 0.25, 0.35]

similarity = cosine_similarity([vec1], [vec2])
print(similarity)

의미

  • 벡터가 가까울수록 의미가 비슷함

활용

  • 검색
  • 추천
  • 이상 탐지

7. RAG 구조 (실무 핵심)

  • LLM 단독 사용은 한계 있음
  • 그래서 RAG 구조를 사용함

흐름:

  1. 사용자 질문 입력
  2. 벡터 DB에서 관련 문서 검색
  3. 문서 + 질문 → LLM 입력
  4. 답변 생성

간단 예시:

def rag_pipeline(query):
    docs = vector_db.search(query)
    prompt = f"문서: {docs}\n질문: {query}"
    return llm(prompt)

장점

  • 최신 데이터 반영 가능
  • hallucination 감소

8. Hallucination의 본질

  • LLM은 사실을 말하는 모델이 아님
  • “그럴듯한 문장”을 생성하는 모델임

그래서 발생하는 문제점

  • 존재하지 않는 정보 생성
  • 틀린 정보 확신있게 말함

해결 방법

  • RAG 사용
  • 결과 검증 로직 추가
  • 외부 API 연동

9. Fine-tuning의 오해

많이 하는 착각:

  • ❌ 새로운 지식 학습
  • ⭕ 출력 스타일 조정

예:

  • 말투 변경
  • 특정 포맷 강제
  • 실무에서는 Fine-tuning보다 Prompt + RAG가 더 많이 쓰임

10. LLM의 구조적 한계


1. 같은 입력 → 다른 결과 나올 수 있음
2. context 길이 제한 존재
3. 계산 비용 높음 (O(n²))
4. 지속적인 기억 불가능


결론

완벽한 시스템이 아니라 “확률 기반 생성기”임



정리


LLM은 다음 3가지로 이해하면 됨

  • Transformer 기반 구조
  • 토큰 단위 확률 생성
  • Embedding 기반 의미 처리
profile
Backend development

0개의 댓글