요즘 우리가 사용하는 대부분의 인공지능 모델—ChatGPT, BERT, LLaMA, Qwen 같은 LLM—의 공통된 기반에는 Transformer 모델이 있습니다. Transformer는 단순히 "성능이 좋은 모델”을 넘어, 자연어 처리의 패러다임을 완전히 바꾼 구조라고 할 수 있습니다.
본 글에서는 Transformer가 무엇인지 살펴보고, 실제 Hugging Face의 LLaMA 모델을 예시로 하여 Transformer를 구성하는 Neural Network 레이어들을 살펴볼께요. .
먼저 Transformer는 왜 등장했을까요?
Transformer 이전의 자연어 처리 모델은 주로 RNN(Recurrent Neural Network) 계열이었습니다. 기존 RNN 계열은,
- 문장을 앞에서부터 순차적으로 처리
- 문장이 길어질수록 앞부분 정보를 잘 잊음
- 병렬 처리가 불가능해 학습 속도가 느림
과 같은 한계가 있었고, 이를 극복하기 위해 문장을 한 번에 보고, 중요한 관계만 골라보자 라는 발상에서 Transformer가 등장했습니다.
Transformer의 핵심 아이디어: Attention
Transformer를 이해하는 가장 중요한 키워드는 Attention 입니다. 특히 self-attention은 문장 내 각 토큰이 “이 문장에서 나와 가장 관련이 깊은 다른 토큰은 무엇인가?”와 같은 질문을 스스로에게 던지는 과정입니다.
예를 들어,
나는 어제 먹은 사과가 맛있었다.
라는 문장에서,
- 맛있었다”는 “사과”와 강하게 연결되고,
- “먹은” 역시 “사과”와 높은 연관성을 가지며,
- “어제”는 “먹은”이라는 행위와 연결됩니다.
Transformer는 이러한 토큰 간 관계의 중요도를 수치로 계산하고, 중요한 관계에 더 많은 가중치를 부여합니다. 이 메커니즘이 바로 Self-Attention입니다.
Transformer는 문장을 어떻게 처리할까?
Transformer는 문장을 순서대로 읽지 않습니다. 대신 문장 전체를 동시에 처리합니다.
단어 → 숫자 벡터(Embedding) → Self-Attention → Feed Forward Network → (이 블록을 여러 층 반복)
- Embedding : 단어를 숫자 벡터로 변환, 의미가 비슷한 단어는 비슷한 위치에 매핑됨
- Self-Attention : 단어들 간의 관계 중요도를 계산, 문맥 이해의 핵심 단계
- Feed Forward Network : Attention 결과를 기반으로 정보를 정제, 모델의 표현력을 높이는 역할
Qwen2 트랜스포머 아키텍처 이해하기
Hugging Face에서 출력한 Qwen2 모델 구조를 출력해 보고, 이를 = 바탕으로 Transformer 아키텍처가 실제로 어떻게 구현되어 있는지 살펴보겠습니다.
!pip install -q --upgrade bitsandbytes accelerate
from google.colab import userdata
from huggingface_hub import login
from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer, BitsAndBytesConfig
import torch
import gc
from transformers import AutoModelForCausalLM, AutoTokenizer
#hugging face 로그인
hf_token = userdata.get('hugging')
login(hf_token, add_to_git_credential=True)
Qwen = "Qwen/Qwen2.5-1.5B-Instruct"
model = AutoModelForCausalLM.from_pretrained(Qwen, device_map="auto", torch_dtype=torch.float16)
model
model을 프린트해보면 다음과 같이 표시됩니다.

1. Embedding Layer
Embedding(151936, 1536)
어휘 크기(Vocab Size)가 151,936이고, 히든 차원(Hidden Size)이 1,536이라는 것은 각 토큰이 모델 내부에서 1,536개의 숫자로 이루어진 벡터로 변환된다는 의미입니다. 여기서 어휘 크기란 사전(dictionary)에 들어 있는 단어의 총 개수입니다. 즉 토크나이저가 151,936개의 서로 다른 토큰을 정의하고 있다는 뜻입니다.
여기서 중요한 질문은 다음과 같습니다.
“각 토큰마다 실제로 몇 개의 숫자가 입력으로 들어가며, 그 숫자들은 어떤 값의 범위를 가질까?”
입력으로 들어오는 것은 단순한 **토큰 ID(정수 하나)**이지만, Embedding 레이어를 통과하면 이 토큰은 1,536개의 실수 값으로 이루어진 벡터로 변환됩니다. 즉, 각 토큰마다 1,536개의 숫자가 모델에 입력되는 것입니다. 이 숫자들은 미리 정해진 값이 아니라,
모델이 학습 과정에서 획득한 **“해당 토큰을 가장 잘 표현한다고 판단한 값들”**입니다.
각 차원은 특정 의미를 명시적으로 갖고 있지는 않지만, 전체 벡터 공간에서 이 숫자들의 조합이 토큰의 의미, 문맥적 특성, 사용 패턴을 함께 담아내는 역할을 합니다. 정리하면, Transformer 모델은 입력으로 들어온 토큰들을 그대로 처리하는 것이 아니라,
각 토큰을 수천 개의 실수로 이루어진 고차원 벡터로 변환하여 자신이 이해할 수 있는 형태로 표현한 뒤, 이 벡터들을 기반으로 Attention과 MLP 연산을 수행하게 됩니다.
즉, Embedding은 “토큰 하나를 숫자 하나로 보는 단계”에서
“토큰 하나를 의미를 담은 수많은 숫자의 집합으로 확장하는 단계”라고 이해할 수 있습니다.
2. Decoder Layer 반복 구조
(0-27): 28 x Qwen2DecoderLayer
Qwen2는 총 28개의 Decoder Layer를 쌓아 올린 Decoder-only Transformer 모델입니다. 각 레이어는 동일한 구조를 가지며, 다음 세 가지 핵심 블록으로 구성됩니다.
3. Self-Attention 구조
q_proj: 1536 → 1536
k_proj: 1536 → 256
v_proj: 1536 → 256
o_proj: 1536 → 1536
- Query는 전체 차원(1536)을 유지
- Key / Value는 **저차원(256)**으로 투영
4. LM Head (출력 레이어)
Linear(1536 → 151936)
- 각 위치의 hidden state를 어휘 전체에 대한 로짓(logits)으로 변환
- 다음 토큰을 예측하는 언어 모델링의 최종 단계입니다.
Transformer는 문장을 어떻게 처리할까?
Transformer는 Encoder와 Decoder 두 부분으로 구성되는데요,
Encoder
- 입력 문장을 이해하는 역할
- 문장의 의미를 벡터 표현으로 변환
Decoder
- Encoder의 결과를 바탕으로 새로운 문장을 생성
- 예: 번역, 요약, 텍스트 생성
'제품 > AI' 카테고리의 다른 글
| Hugging Face Transformers (0) | 2025.12.08 |
|---|---|
| Ollama 설치부터 구글 Gemma 모델 실행까지 (0) | 2025.12.07 |
| AI 에이전트의 종류와 특징 (1) | 2025.05.11 |