LLM, 어떻게 작동하는 걸까?
LLM은 트랜스포머(Transformer) 아키텍처를 기반으로 하며, 토큰화부터 예측까지 핵심 메커니즘을 설명함
토큰화, 임베딩, 위치 인코딩, 어텐션, FFN, 잔차 연결 등 각 구성 요소의 역할과 중요성을 상세히 다룸
멀티 헤드 어텐션, RoPE, GQA, MoE 등 최신 LLM 아키텍처의 발전과 효율성 개선 방안을 소개함
수학적 복잡성을 배제하고 직관적인 이해를 돕는 설명으로, LLM 입문자에게 유용함
토큰화(Tokenization)의 중요성과 서브워드(Subword) 전략
LLM은 텍스트를 직접 이해하는 것이 아니라 정수 ID 시퀀스로 변환하는 토큰화(Tokenization) 과정을 거친다. 전체 단어 대신 서브워드(Subword) 조각을 사용하는 이유는 어휘 크기(Vocabulary Size) 관리와 신조어/희귀어 처리 효율성(Handling Rare Words) 때문이다. GPT는 BPE(Byte Pair Encoding) 변형을, LLaMA 계열은 SentencePiece를 사용하는 등 모델마다 다른 토크나이저를 사용하며, 이는 계산 비용(Compute Cost)과 다국어 지원(Multilingual Coverage)에 영향을 미친다.
임베딩(Embedding) 공간의 의미론적 구조와 위치 정보의 필요성
토큰 ID는 임베딩 행렬을 통해 의미론적 벡터로 변환된다. 이 벡터 공간에서는 의미가 유사한 토큰(Semantically Similar Tokens)들이 가까이 위치하며, '왕 - 남자 + 여자 ≈ 여왕'과 같은 벡터 연산(Vector Arithmetic)으로도 의미론적 관계를 파악할 수 있다. 하지만 임베딩 자체만으로는 토큰의 순서 정보를 알 수 없어, 이를 보완하기 위해 위치 인코딩(Positional Encoding)이 필수적이다.
어텐션 메커니즘(Attention Mechanism)과 Q, K, V 벡터의 역할
어텐션 메커니즘은 각 토큰이 다른 토큰들과 정보를 교환하며 관계의 중요도를 계산한다. 이를 위해 토큰은 쿼리(Query), 키(Key), 밸류(Value) 세 가지 벡터로 변환된다. 쿼리는 '무엇을 찾고 있는가', 키는 '무엇과 일치하는가', 밸류는 '매치 시 전달될 정보'를 나타낸다. 스케일드 닷 프로덕트(Scaled Dot Product)로 유사도를 측정하고, 소프트맥스(Softmax)를 통해 가중치를 부여하여 정보를 종합한다. GPT와 같은 디코더(Decoder) 모델은 인과 마스킹(Causal Masking)을 통해 미래 토큰을 참조하지 않는다.
멀티 헤드 어텐션(Multi-Head Attention)과 KV 캐시의 메모리 압박
언어에는 다양한 관계가 존재하므로, 단일 어텐션으로는 부족하다. 멀티 헤드 어텐션은 여러 개의 독립적인 어텐션 헤드(Attention Head)를 병렬로 실행하여 다양한 관계를 동시에 파악한다. 각 헤드는 고유한 투영 행렬(Projection Matrix)을 사용하여 Q, K, V 벡터를 생성한다. 추론 시 KV 캐시(KV Cache)는 이전 토큰들의 Key와 Value 벡터를 저장하여 재계산을 방지하지만, 긴 컨텍스트 길이에서는 상당한 메모리 부담을 유발한다. 이를 완화하기 위해 그룹화 쿼리 어텐션(Grouped-Query Attention, GQA)이 사용된다.
피드 포워드 네트워크(Feed-Forward Network)와 MoE 아키텍처
어텐션 이후 각 토큰은 독립적으로 피드 포워드 네트워크(FFN)를 거친다. FFN은 벡터를 확장하고 비선형 함수(Non-linearity)를 적용한 후 다시 압축하는 과정을 통해 모델의 사실적, 의미론적 구조 저장에 기여한다. 최근 대규모 모델에서는 Mixture of Experts (MoE) 아키텍처를 도입하여, 각 토큰마다 일부 전문가(Expert) FFN만 활성화시켜 파라미터 수를 늘리면서도 추론 비용 증가를 억제한다. Mixtral 8x7B 모델이 대표적인 예다.
잔차 연결(Residual Connection)과 정규화(Normalization)의 역할
수십, 수백 개의 레이어를 깊게 쌓을 수 있는 핵심 비결은 잔차 연결(Residual Connection)이다. 이는 각 서브 블록의 출력을 원래 벡터에 더해주는 방식으로, 정보와 그래디언트가 깊은 네트워크를 쉽게 통과하도록 돕는다. 레이어 정규화(Layer Normalization)는 이 과정에서 발생하는 수치 불안정성(Exploding/Collapsing Gradients)을 제어하기 위해 벡터를 안정적인 범위로 재조정한다. 현대 모델들은 사전 정규화(Pre-Norm)와 RMSNorm을 주로 사용한다.