티스토리 뷰
안녕하세요 Diana 입니다.
오늘은 요즘 AI의 중심에 있는 Transformer(트랜스포머)에 대해 알아보려고 합니다.
이 글은 3Blue1Brown의 트랜스포머, ChatGPT가 트랜스포머로 만들어졌죠 (DL5) 영상을 기반으로 하고 있으며, 트랜스포머의 핵심인 Attention은 다음 글에서 따로 다룰 예정입니다. 이번 글에서는 "트랜스포머가 전체적으로 어떻게 생겼는지" 큰 그림을 잡는 것을 목표로 진행하도록 하겠습니다.
영상을 기반으로 학습 후 작성하는 내용이므로 잘못된 부분이 있을 수 있음을 미리 알려드립니다.
그럼 시작하겠습니다.
✅ GPT란?
우리가 매일 쓰는 ChatGPT의 GPT는 Generative Pretrained Transformer의 약자입니다.
- Generative(생성형) : 새로운 텍스트를 만들어내는 모델
- Pretrained(사전학습된) : 방대한 데이터로 미리 학습을 마쳤고, 이후 특정 목적에 맞게 추가 학습(파인튜닝)이 가능
- Transformer(트랜스포머) : 특정한 종류의 신경망 구조
즉 트랜스포머는 "요즘 AI 붐의 핵심에 있는 신경망 구조 그 자체"입니다.
트랜스포머는 2017년 Google에서 번역을 목적으로 처음 소개되었지만, 지금은 음성 → 텍스트, 텍스트 → 이미지, 텍스트 → 음성 등 다양한 곳에서 사용되고 있습니다.
✅ LLM의 동작

ChatGPT 같은 모델이 하는 일은 사실 하나입니다.
주어진 텍스트 뒤에 올 다음 단어를 예측하는 것
정확히는 "다음에 올 단어 하나"를 딱 정하는 게 아니라, 올 수 있는 모든 단어들을 나열한 뒤 각 단어들의 확률 분포를 출력합니다.
예를 들어 "고양이는 매트 위에" 라는 문장이 주어지면 "앉았다 40%, 누웠다 30%, 있다 20% ..." 처럼 다음 단어 후보들의 확률을 내놓는 거죠.
그런데 이걸로 어떻게 긴 글을 쓸 수 있을까요?
방법은 단순합니다.
- 텍스트를 넣는다
- 다음 단어의 확률 분포를 얻는다
- 그 중 하나를 뽑는다(샘플링)
- 뽑은 단어를 텍스트 뒤에 붙인다
- 1번으로 돌아가 반복한다
이 과정을 반복하면 한 단어씩 문장이 만들어지고, 우리가 보는 ChatGPT의 답변이 됩니다. 실제로 답변이 한 글자씩 타이핑되듯 나오는 이유도 이것 때문입니다.
챗봇처럼 대화하는 것도 원리는 같습니다. "아래는 사용자와 AI 어시스턴트의 대화입니다." 같은 문장(시스템 프롬프트)을 앞에 붙이고 사용자의 질문을 넣으면, 모델은 그 뒤에 이어질 "AI 어시스턴트의 답변"을 한 단어씩 예측하는 것뿐입니다.
✅ 트랜스포머 안의 데이터 흐름
이제 트랜스포머 내부를 크게 훑어보겠습니다. 전체 흐름은 아래와 같습니다.

1. 토큰(Token)으로 쪼개기
입력 텍스트는 먼저 토큰이라는 작은 조각으로 나뉩니다. 대략 단어 하나라고 생각하셔도 되지만, 정확히는 단어의 일부나 문장부호가 토큰이 되기도 합니다. 이미지라면 이미지의 작은 패치가, 소리라면 짧은 구간이 토큰이 됩니다.
2. 임베딩(Embedding) - 토큰을 벡터로
각 토큰은 숫자들의 나열, 즉 벡터로 바뀝니다. 이 과정을 임베딩이라고 하며 뒤에서 자세히 다루겠습니다.

3. Attention Block - 벡터들끼리 대화하기
벡터들은 Attention Block이라는 곳을 통과합니다. 여기서 각 벡터는 다른 벡터들과 값을 주고 받으며 자기 값을 업데이트합니다.
왜 이게 필요할까요? "머신러닝 모델"의 모델과 "패션 모델"의 모델은 같은 단어지만 뜻이 다릅니다. 처음 임베딩된 값은 둘 다 똑같은 "모델" 벡터인데, 주변 단어(머신러닝 / 패션)를 참고해서 각각 다른 의미의 벡터로 바뀌어야 하죠. 이렇게 문맥에 따라 단어의 의미를 조정하는 것이 Attention의 역할입니다.

4. MLP(다층 퍼셉트론) - 각 벡터를 따로 처리하기
Attention을 지난 벡터들은 MLP(Multi-Layer Perceptron) 를 통과합니다. 여기서 바로 우리가 앞에서 배웠던 인경 신경망 구조가 사용되며 Attention과 다른 점은, 여기서는 벡터들끼리 서로 대화하지 않고 각 벡터가 독립적으로, 병렬로 같은 연산을 거친다는 것입니다.
이 과정에서 정확한 일을 정의하기는 어렵지만 각 벡터가 어떤 역할을 하는지 정의한 것을 나열하여 앞에서 알아보았듯 확률을 구하는 것과 같습니다.
5. 반복, 그리고 마지막 벡터
Attention → MLP → Attention → MLP ... 이 두 블록을 여러 번 반복합니다.
이 과정을 거치면 마지막 위치의 벡터에는 문맥 전체의 의미가 압축되어 담기게 됩니다. 이 마지막 벡터 하나로 다음 단어의 확률 분포를 계산합니다.
✅ 딥러닝의 전제 - 파라미터와 행렬 곱
트랜스포머의 세부 내용으로 들어가기 전에 한번 더 상기시켜야할 것이 있습니다.
지금까지의 글에서 봤듯이 딥러닝 모델은 수많은 파라미터(가중치, Bias) 를 가지고 있고, 학습이란 이 파라미터를 데이터에 맞게 조정하는 과정이었습니다.
GPT-3의 경우 파라미터가 무려 1,750억 개이며, 이 파라미터들은 약 28,000개의 행렬에 나뉘어 담겨 있습니다.
그리고 트랜스포머 안에서 일어나는 연산 대부분은 결국 "가중치 행렬 × 데이터 벡터" 형태의 행렬 곱입니다.
여기서 기억할 것은 딱 하나입니다.
- 파라미터(가중치) : 학습으로 정해지는 값. 모델의 "뇌"
- 데이터(벡터) : 입력에 따라 매번 바뀌는 값. 처리되는 대상
이 구분만 잡고 있으면 뒤의 내용이 훨씬 편해집니다.
GPT-3의 파라미터는 역할에 따라 8가지로 나뉘는데, 오늘은 그중 임베딩(Embedding) 과 언임베딩(Unembedding) 두 가지를 살펴보겠습니다.
✅ 임베딩(Embedding) - 단어를 벡터로
모델은 미리 정해진 단어장(Vocabulary)을 가지고 있습니다. GPT-3의 경우 약 50,257개의 토큰이 있습니다.
임베딩 행렬(Embedding Matrix, W_E)은 이 토큰 하나하나에 대응하는 벡터를 열(column)로 가지고 있는 행렬입니다. GPT-3에서 각 벡터의 차원은 12,288 입니다.
즉 50,257 × 12,288 ≈ 6억 1,700만 개의 파라미터가 임베딩에만 쓰이는 셈이죠.

벡터의 방향에는 의미가 있다
여기서 재미있는 점은, 학습이 끝난 임베딩 공간에서는 방향이 의미를 가진다는 것입니다.
가장 유명한 예시가 이겁니다.
queen − king ≈ woman − man
"king"에서 "queen"으로 가는 방향과 "man"에서 "woman"으로 가는 방향이 거의 같다는 뜻입니다. 즉 이 공간 어딘가에 "성별"이라는 방향이 있는 거죠.
영상에서는 이런 예시도 나옵니다.
- Hitler + Italy − Germany ≈ Mussolini
- Sushi − Japan + Germany ≈ Bratwurst(독일 소시지)

물론 실제로 이렇게 깔끔하게 떨어지진 않고, 12,288차원 공간을 사람이 볼 수도 없습니다. 하지만 "의미가 비슷하면 벡터가 가깝고, 의미의 차이가 방향으로 나타난다" 정도로 이해하시면 됩니다.
내적(Dot Product)으로 방향 비교하기
두 벡터가 얼마나 같은 방향을 향하는지는 내적(Dot Product) 으로 잴 수 있습니다.
- 같은 방향 → 양수
- 수직 → 0
- 반대 방향 → 음수
영상에서는 "cats − cat" 을 복수 방향이라고 두고, 이 벡터와 one, two, three, four... 를 내적하면 숫자가 커질수록 값이 커진다는 예시를 보여줍니다. 즉 "복수"라는 개념이 어떤 방향으로 인코딩되어 있다는 거죠.
이 내적은 다음 글에서 다룰 Attention의 핵심 연산이기도 하니 기억해두시면 좋습니다.
임베딩 벡터는 단어 이상의 정보를 담는다
처음 임베딩된 벡터는 단순히 "그 단어"의 의미만 담고 있습니다. 하지만 Attention과 MLP를 지나면서 이 벡터에는 문맥, 위치, 심지어 앞으로 어떤 단어가 나올지에 대한 예측까지 점점 더 많은 정보가 채워지게 됩니다.
그리고 모델이 한 번에 처리할 수 있는 벡터의 개수는 정해져 있는데, 이를 Context Size라고 합니다. GPT-3의 경우 2,048개였습니다. 예전 챗봇이 대화가 길어지면 앞 내용을 까먹는 것처럼 보였던 이유가 바로 이 제한 때문입니다.
✅ 언임베딩(Unembedding) - 벡터를 다시 확률로
이제 마지막 단계입니다.
모든 블록을 통과한 마지막 위치의 벡터를 다시 "단어별 점수"로 바꿔야 합니다. 이때 쓰이는 것이 언임베딩 행렬(W_U) 입니다.
12,288차원의 벡터에 이 행렬을 곱하면 50,257개의 값이 나오고, 각 값은 "이 토큰이 다음에 올 점수"를 의미합니다.
Softmax - 점수를 확률로
그런데 이 점수들은 음수일 수도 있고 다 더해서 1이 되지도 않습니다. 확률이 되려면 모든 값이 0~1 사이이고 합이 1이어야 하죠.
이걸 해주는 함수가 Softmax입니다.
- 각 값에 e를 거듭제곱한다 (모두 양수로 만듦)
- 전체 합으로 나눈다 (합이 1이 되게 만듦)
이렇게 하면 가장 큰 값은 1에 가까워지고 작은 값들은 0에 가까워지지만, 완전히 0이 되지는 않아 "약간의 가능성"은 남게 됩니다.
참고로 Softmax에 들어가기 전의 원본 점수를 Logit(로짓) 이라고 부릅니다.
Temperature - 얼마나 모험할 것인가
Softmax에는 Temperature(온도, T) 라는 값을 추가할 수 있습니다. e의 거듭제곱을 하기 전에 각 값을 T로 나눠주는 건데요.
- T가 크면 → 확률이 고르게 퍼져서 낮은 확률의 단어도 자주 뽑힘 (창의적이지만 엉뚱해질 수 있음)
- T가 작으면 → 가장 높은 확률의 단어만 뽑힘 (안정적이지만 뻔함)
- T = 0 → 항상 최고 확률 단어만 선택
ChatGPT API 등에서 temperature 값을 조절하는 게 바로 이겁니다.
✅ 정리
오늘 알아본 트랜스포머의 큰 그림을 정리하면 다음과 같습니다.
- 텍스트를 토큰으로 나눈다
- 각 토큰을 임베딩해서 벡터로 만든다
- Attention(벡터끼리 문맥 주고받기)과 MLP(벡터 각각 처리하기)를 여러 번 반복한다
- 마지막 벡터를 언임베딩해서 점수를 얻는다
- Softmax로 확률 분포를 만들고 다음 단어를 뽑는다
- 뽑은 단어를 붙이고 1번부터 반복한다
다음 글에서는 오늘 "벡터끼리 대화한다"고만 넘어갔던 Attention을 자세히 다뤄보겠습니다.
감사합니다
출처
'AI' 카테고리의 다른 글
| Claude Code 기본 구조 이해하기(Agent, Skill, Context) (0) | 2026.08.25 |
|---|---|
| AI를 프로젝트에 적용하는 방법 (Context Engineering) (0) | 2026.08.23 |
| AI - 역전파(Back Propagation) (0) | 2026.08.05 |
| AI - 경사하강법(Gradient Descent) (0) | 2026.08.03 |
| AI - Neural Network(인공신경망) (0) | 2026.07.30 |
- Total
- Today
- Yesterday
- kakaomapssdk
- opaquetype
- ComtextEngineering
- AI
- Concurrency
- swift
- 스위프트
- coredata
- SwiftUI
- Xcode
- webrtc
- opaque
- 경사하강법
- 코어데이터
- BoxedType
- 동시성
- 인공신경망
- Actor
- Tuist
- Algorithm
- ViewBuilder
- iphone
- ios
- GradientDescent
- 인공지능
- tuist v4
- ClaudeCode
- SocialLogin
- CD/CI
- 알고리즘
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |