LLM 모델 원리를 간단히 설명하면,
2026.8월 기준으로 사용하고 있는 많은 AI모델은 LLM모델입니다. LLM모델은 과거 문맥을 참고하여 다음에 올 토큰을 확률적으로 계산합니다.
예를 들면 I drink a을 보고 다음에 올 토큰을 추측한다면, coffee확률이 62%가 가장 높기 때문에 coffee가 선택됩니다.

LLM은 끝이라는 토큰이 나올때까지 과거 문맥을 참고하여 계속 토큰을 생성합니다.

LLM 아키텍처
2026.8기준으로 많은 LLM모델은 Transformer 아키텍처를 가지고 있습니다. Transformer는 “Attention Is All You Need” 논문에서 쉽게 설명합니다.
- https://arxiv.org/abs/1706.03762

Transformer아키텍처는 결국 정답에 가까운 확률을 구하기 위해 많은 행렬연산과정을 거칩니다.

행렬연산을 하는 이유는 컴퓨터는 문자를 이해하지 못하기 때문에, 문자를 숫자로 변경하고 이 숫자를 행렬로 표현하여 연산합니다.
- 출처: https://youtu.be/HnvitMTkXro?si=1fnk11y5zH86tj7N

각 행렬들은 모델에서 정의한 행렬연산을 수행하고 다음에 올 토큰을 확률적으로 계산합니다.
- 참고자료: https://youtu.be/wrguEHxk_EI?si=Og143PHTX7Qutn20

이 행렬 연산과정에서 관여하는 변수(w)가 있는데 이 변수를 가중치라고 부릅니다. 가중치는 최대한 정답에 가깝게 하기 위해 변경되는 값이고, 학습과정에서 가중치가 조절됩니다. 가중치를 조절하여 행렬연산하는 형태는 사람의 뉴런을 모방했다고 합니다.

수많은 행렬(뉴런)들이 모이면 사람의 신경망처럼 되고 아래그림과 비슷한 구조가 됩니다. 수많은 행렬들이 있는 모양입니다.
- 참고자료: https://youtu.be/wrguEHxk_EI?si=Og143PHTX7Qutn20

이러한 행렬연산이 모이면 아래그림과 같은 수많은 레이어가 쌓이게 됩니다.
- 출처: https://bbycroft.net/llm

레이어가 많을수록 행렬연산이 많아지고 그만큼 가중치도 같이 증가하고 AI모델크기도 같이 커집니다.

Attention
Attention이란
LLM은 결국 수많은 행렬연산인데, 이 행렬연산을 어떻게 할지를 정의하는게 AI모델알고리즘입니다. Transformer는 수많은 알고리즘 중에 Attention이라는 방법때문에 정확도가 많이 올라갔다고 합니다.
Attention은 한국말로 주의인데, 각 토큰이 문장 또는 문맥속에 어떤 의미를 찾는 과정입니다. 예를 들어 인도라는 토큰은 국가 인도라는 의미도 있고 사람이 걷는 인도가 있습니다. 이처럼 문맥에 따라 의미가 전혀 달라지고 마지막에 생성할 토큰 확률에 영향을 끼칠 수 있습니다. 그래서 정답에 가까운 토큰 확률을 올리기 위해 다른 토큰과의 관계도를 분석하여 행렬연산의 정확도를 높이도록 가중치를 조절합니다.


벡터 내적
Attention을 위한 연산은 벡터내적을 사용합니다. 비슷한 의미를 갖는 토큰을 대상으로 벡터내적을 하면 값이 크고, 비슷한 의미가 아니면 값이 작아집니다. 예를 들어 “사과했다” “사죄했다”는 벡터내적 값이 큰데, “사과했다” “바나나”는 벡터내적이 작습니다. 사과단어가 문맥에 따라 전혀 다른 의미를 갖는데 수학적으로는 벡터내적으로 계산합니다.

Q, K, V
Attention을 위한 계산과정을 Q, K, V라고 부릅니다. Q, K, V에 필요한 가중치를 WQ, WK, WV라고 하는데 이 가중치는 AI모델이 가지고 있고 모델마다 다릅니다.
- Q(Query): 현재 토큰이 다른 토큰에게 던지는 질문입니다. "나와 관련 있는 토큰이 누구야?"라고 묻는 역할입니다.
- K(Key): 각 토큰이 자신의 의미를 알려주는 값입니다. Q와 K를 벡터내적하면 토큰 사이의 관계도 점수가 나옵니다.
- V(Value): 토큰이 실제로 가지고 있는 의미 정보입니다. 관계도 점수를 V에 곱해서 문맥이 반영된 의미를 만듭니다.
예를 들어 나는 사과를 했다를 Q,K,V연산을 한다고 가정해봅시다.
1. 먼저 나는 사과를 했다의 행렬 값을 구합니다.
- 나는 = [1.0, 0.0, 0.0]
- 사과를 = [0.0, 1.0, 0.0]
- 했다= [0.0, 0.0, 1.0]\
2. Attention 연산 Q,K,V를 수행합니다. 가중치 WQ,WK,WV 가중치는 모델이 가지고 있습니다.

Q,K연산을 먼저 해야하는데 Q를 행, K를 열로 배치하고 softmax함수로 확률로 변경하면, QK 연산의 결과의 예는 아래와 같습니다. WQ, WV가중치가 정해졌다고 가정하고 결과 예시를 든겁니다.

그리고 WV가중치가 [0.1, 0.1, 0.1]로 가정하면 아래처럼 예가 나옵니다.
- 나는: [0.605, 0.255, 0.105]
- 사과를: [0.100, 0.200, 0.700]
- 했다: [0.155, 0.455, 0.355]

마스킹
Attention 연산에서는 뒤에 있는 토큰은 Attention에 포함시키지 않을 수 있는데 이 과정을 마스킹이라고 부릅니다. AI모델을 사용할 때는 뒤 토큰을 알 수 없으니 학습할 때도 뒤 토큰을 attention연산에서 제외합니다. 모든 LLM이 뒤 토큰을 연산에서 제외하진 않습니다. BERT가 대표적으로 연산에서 제외하지 않습니다.

멀티헤드 어텐션
토큰 하나는 여러 관계를 동시에 가지고 있습니다. 예를 들어 “나는 어제 산 사과를 먹었다”에서 “먹었다”라는 토큰은 누가 먹었는지(나), 무엇을 먹었는지(사과), 언제 먹었는지(어제)를 모두 봐야 합니다. WQ, WK, WV 가중치가 가중치가 한 세트면 이 관계들을 하나의 점수로 뭉뚱그리게 됩니다.
그래서 WQ, WK, WV를 여러 세트 만들어놓고 Attention 연산을 동시에 수행합니다. 이 세트 하나를 헤드라고 부르고, 여러 헤드를 사용하는 방식을 멀티헤드 어텐션이라고 합니다. 각 헤드는 서로 다른 가중치를 가지고 있어서 서로 다른 관점으로 관계도를 계산하고, 마지막에 헤드별 결과를 이어붙여 하나로 합칩니다.
헤드를 늘린다고 연산량이 그만큼 늘어나지는 않습니다. 벡터 차원을 헤드 개수만큼 쪼개서 나눠 갖기 때문입니다. 예를 들어 차원이 512이고 헤드가 8개면 헤드마다 64차원씩 담당합니다. GPT를 포함해서 우리가 쓰는 대부분의 LLM은 멀티헤드 어텐션을 사용합니다. 다만 요즘 모델들은 메모리를 아끼기 위해 K와 V를 헤드끼리 공유하는 변형(MQA, GQA)을 쓰기도 합니다.
위치정보
Attention에는 한 가지 빈틈이 있습니다. 벡터내적은 토큰의 순서를 신경 쓰지 않습니다. 그래서 Attention 연산만으로는 "나는 사과를 먹었다"와 "사과는 나를 먹었다"가 똑같이 계산됩니다. 또는 "개가 사람을 물었다"와 "사람이 개를 물었다"도 똑같이 계산됩니다.
사람은 단어 순서로 의미를 구분하는데 모델은 순서를 모르는 상황입니다. 그래서 토큰을 숫자로 바꿀 때 이 토큰이 문장에서 몇 번째인지를 나타내는 숫자를 같이 넣어줍니다. 이것을 위치정보라고 부릅니다.

마무리
지금까지 나온 개념을 정리하면 아래와 같습니다.
| 토큰 | LLM이 문자를 다루는 단위. 과거 문맥을 보고 다음 토큰을 확률적으로 계산합니다 |
| 행렬연산 | 컴퓨터는 문자를 이해하지 못하므로 문자를 숫자로 바꿔 행렬로 연산합니다 |
| 가중치(w) | 행렬연산에 관여하는 변수. 정답에 가까워지도록 학습과정에서 조절됩니다 |
| 레이어 | 행렬연산이 쌓인 층. 레이어가 많을수록 가중치가 늘고 모델크기도 커집니다 |
| Transformer | 현재 대부분의 LLM이 쓰는 아키텍처 |
| Attention | 각 토큰이 문맥 속에서 어떤 의미인지 찾는 과정이고 Transformer의 핵심 알고리즘 |
| 벡터내적 | 토큰 사이 관계도를 계산하는 수학적 방법. 관계가 클수록 값이 큽니다 |
| 마스킹 | 뒤에 있는 토큰을 연산에서 제외하는 것. 학습할 때 정답을 미리 보지 않게 합니다 |
| Q, K, V | Attention연산은 Q,K,V이고 연산에 사용하는 WQ, WK, WV 가중치는 AI모델이 가지고 있습니다. |
| 멀티헤드 어텐션 | 가중치 세트를 여러 개 두고 여러 관점으로 관계도를 동시에 계산합니다 |
| 위치정보 | 토큰의 순서를 모델에게 알려주는 값. sin/cos, RoPE 방식이 있습니다 |
'전공영역 공부 기록' 카테고리의 다른 글
| 다운로드한 AI 모델을 실행하려면 무엇이 필요할까?(서빙) (0) | 2026.08.09 |
|---|---|
| AI모델 파일의 구조 (0) | 2026.08.08 |
| CodeBuild connection 임시 토큰을 스크립트에서 재사용하는 방법(git credential helper) (0) | 2026.07.26 |
| JVM 옵션 하나로 OOM 순간의 heap dump 남기기 (2) | 2026.07.19 |
| Claude Code 권한 관리 - deny, Auto mode, Skill 자동 호출 제어 (0) | 2026.07.17 |