ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Transformer의 진화: 아키텍처 변형부터 최신 LLM 레시피까지
    AI 2026. 3. 15. 04:41

    트랜스포머(Transformer) 모델은 NLP를 넘어 비전, 오디오 등 AI 전 분야를 장악했습니다. 하지만 "Attention is All You Need" 이후 등장한 수많은 변형 모델(X-formers)들을 체계적으로 이해하는 것은 쉽지 않습니다. 2021년 발표된 "A Survey of Transformers" 논문의 분류 체계와 최신 LLM(Llama, DeepSeek 등)에서 필수적으로 사용되는 기술들을 중심으로 트랜스포머의 핵심을 정리해 보겠습니다.

     

     

    Transformer의 체계적 분류 (Taxonomy)

    기본 아키텍처와 '무한한 변형' 

    트랜스포머의 인코더(Encoder) 와 디코더(Decoder) 블록입니다.

    연구자들은 Attention, FFN, Positional Encoding 를 하나씩 뜯어고치기 시작했습니다. 이것이 바로 수천 개의 'X-formers'가 탄생하게 된 배경입니다.

     

    Architecture Modification (구조적 변형)

    "트랜스포머라는 기계를 어떻게 더 효율적이고 강력하게 개조할 것인가?"

     

    이를 다시 두 단계로 나눕니다.

    • 모듈 수준(Module-level):  Attention: 연산량을 줄이기 위한 Sparse Attention(이미지 속 band, dilated 등)과 메모리 효율을 위한 GQA/MQA(KV 캐시 최적화).
      • Position Encoding: 긴 문맥 처리를 위한 RoPE(회전식 인코딩).
      • Activation: ReLU를 대체하는 SwiGLU.
    • 아키텍처 수준(Arch-level):
      • MoE (Mixture of Experts): 파라미터는 거대하게, 연산은 가볍게 만드는 전문가 시스템.
      • Lightweight & Hierarchy: 모델을 가볍게 만들거나, 정보를 계층적으로 압축하는 구조.
    • PTMs & Applications (학습 및 응용)
      사전 학습(Pre-training) 방식과 텍스트 외의 다양한 도메인(Vision, Audio, Multi-modal)으로의 확장입니다

     

     

     

     

    Attention의 효율화

    바닐라 트랜스포머의 셀프 어텐션은 문장 안의 모든 단어($L$)가 자기 자신을 포함한 모든 단어($L$)를 한 번씩 다 쳐다봐야 합니다. * 계산량: 단어가 1,000개면 $1,000 \times 1,000 = 1,000,000$번의 연산이 필요합니다.

    • 문제점: 문장 길이가 2배 늘어나면 연산량과 메모리는 4배 늘어납니다. 10배 늘어나면 100배가 되죠.
    • 결과: "나는 오늘 점심에 먹은 사과가..." 정도의 짧은 글은 괜찮지만, 책 한 권이나 긴 논문을 넣으려고 하면 최신 GPU로도 메모리가 터져버립니다.

     

    • a) Global: 특정 '반장' 토큰(주로 CLS나 마침표 등)을 정해서 얘네만 전체를 다 보게 하고, 나머지 토큰은 이 반장들만 보게 합니다. 정보의 요약본을 공유하는 방식입니다.
    • (b) Band (Sliding Window): 자기 주변의 인접한 토큰들만 봅니다. 언어는 보통 가까운 단어끼리 관계가 깊다는 특성을 이용한 것으로, 연산량을 획기적으로 줄입니다.
    • (c) Dilated: 징검다리처럼 한 칸씩 건너뛰며 봅니다. Band 방식과 같은 연산량으로 훨씬 멀리 있는 토큰까지 정보를 주고받을 수 있어 '시야'가 넓어집니다.
    • (d) Random: 무작위로 연결합니다. "설마 이게 되겠어?" 싶지만, 이론적으로 몇 단계만 거치면 문장 끝의 정보가 앞까지 전달되는 '좁은 세상(Small World)' 효과를 노립니다.
    • (e) Block Local: 문장을 블록(덩어리)으로 나누고 그 안에서만 어텐션을 합니다. GPU 연산 최적화에 가장 유리해서 실제 많은 모델이 채택하는 방식입니다.

    KV 캐시(KV Cache)란 무엇인가?

    트랜스포머의 디코더(Decoder)는 토큰을 하나씩 생성합니다.

    • 문제: 새로운 5번째 단어를 만들 때, 이미 계산했던 1, 2, 3, 4번째 단어들의 정보가 또 필요합니다.
    • 해결: 매번 처음부터 다시 계산하는 대신, 이전 단계에서 계산해둔 Key(K)와 Value(V) 값을 메모리(VRAM)에 저장해두고 재사용합니다. 이것이 KV 캐시입니다.

    하지만 문장이 길어질수록(Context Length가 늘어날수록) 이 KV 캐시가 차지하는 용량이 기하급수적으로 커집니다.

    • 병목: GPU 메모리(VRAM)는 한정되어 있는데, 캐시가 메모리를 다 점유해버리면 정작 모델이 한 번에 처리할 수 있는 데이터 양(Batch Size)이 줄어들고 속도가 느려집니다.

    어텐션 구조의 진화: MHA → MQA → GQA

    이미지 하단의 그림은 이 메모리 병목을 해결하기 위해 **'헤드(Head)를 어떻게 구성할 것인가'**를 보여줍니다.

     

    ① Multi-head Attention (MHA)

    • 구조: 쿼리(Q), 키(K), 값(V) 헤드의 개수가 1:1:1로 모두 같습니다.
    • 특징: 각 쿼리 헤드가 자신만의 전용 K, V 헤드를 가집니다.
    • 단점: 성능은 가장 정교하지만, 모든 헤드의 K, V 값을 캐시에 저장해야 하므로 메모리 소모가 극심합니다. (그림의 가장 왼쪽)

    ② Multi-query Attention (MQA)

    • 구조: 수많은 쿼리(Q) 헤드가 단 하나의 K와 V 헤드를 공유합니다.
    • 특징: K, V 캐시 용량이 1/헤드개수(예: 1/32)로 획기적으로 줄어듭니다.
    • 단점: "전문가(헤드)는 많은데 참고서(K, V)는 한 권뿐"인 상황입니다. 메모리는 아끼지만 모델의 표현력과 정확도가 떨어지는 치명적인 단점이 있습니다. (그림의 가장 오른쪽)

    ③ Grouped-query Attention (GQA) - ★최신 LLM의 표준

    • 구조: Q 헤드를 여러 그룹으로 묶고, 그룹당 하나의 K, V 헤드를 배정합니다.
    • 특징: MHA의 '정밀함'과 MQA의 '가벼움' 사이에서 최적의 밸런스를 찾은 방식입니다.
    • 왜 쓰는가?: MQA만큼은 아니지만 메모리를 대폭 절약하면서도, 성능은 MHA에 근접하게 유지합니다.
      • Llama 2, Llama 3, Mistral 등 우리가 아는 대부분의 최신 모델이 이 방식을 채택하고 있습니다. (그림의 가운데)

     

     

    RoPE(Rotary Position Embedding): LLM이 위치를 이해하는 가장 우아한 방법

    기존 트랜스포머의 '절대적 위치 인코딩(Absolute Position Encoding)'은 문장이 길어지면 성능이 급격히 떨어지는 한계가 있었습니다. 이를 해결하고 Llama, PaLM 등 최신 LLM의 표준이 된 기술이 바로 RoPE입니다. 제공된 이미지를 중심으로 그 핵심 원리를 파헤쳐 보겠습니다.

     

    1. 핵심 개념: "위치 정보를 '회전'으로 정의하다"

    이미지 상단의 그래프를 보면 벡터 $(x_1, x_2)$가 특정 각도($m\theta_1$)만큼 회전하여 $(x'_1, x'_2)$가 되는 것을 볼 수 있습니다.

    • 원리: 각 토큰의 임베딩 벡터를 2개씩 짝을 지어 2차원 평면상의 좌표로 간주합니다.
    • 회전: 토큰의 위치($m$)에 따라 이 벡터를 특정 각도만큼 회전시킵니다.
    • 결과: "단어 벡터의 의미(방향)는 유지하되, 위치에 따라 공간상의 위상만 변화"시키는 것입니다.

    2. 수학적 메커니즘: 블록 대각 행렬 (Matrix Representation)

    이미지 하단의 복잡한 행렬식은 RoPE가 실제로 컴퓨터 연산에서 어떻게 구현되는지 보여줍니다.

    • Pair-wise Rotation: $d$차원의 벡터를 $d/2$개의 쌍으로 나눕니다. 행렬을 보시면 $2 \times 2$ 크기의 회전 행렬들이 대각선으로 배열된 Block Diagonal Matrix 형태임을 알 수 있습니다.
    • 주파수(Frequency)의 차이:
      • Higher Frequency (상단 행렬): 앞쪽 차원들은 아주 빠르게 회전합니다. 이는 가까운 거리의 미세한 위치 관계를 포착하는 데 유리합니다.
      • Intermediate/Lower Frequency (하단 행렬): 뒤쪽 차원들로 갈수록 천천히 회전합니다. 이는 문장 전체의 거시적인 흐름과 먼 거리의 의존성을 파악하는 데 도움을 줍니다.
    $$\begin{pmatrix} \cos m\theta & -\sin m\theta \\ \sin m\theta & \cos m\theta \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix}$$

    위와 같은 기본 회전 공식이 각 차원 쌍마다 다른 $\theta$값으로 적용되는 구조입니다.

     

    3. 왜 RoPE인가? (3가지 결정적 이유)

    이 기술이 "A Survey of Transformers"에서 중요한 구조적 변형으로 다뤄지는 이유는 다음과 같습니다.

    ① 상대적 거리의 자연스러운 학습 (Relative Distance)

    어텐션 메커니즘에서 두 단어 사이의 점수를 계산할 때(Dot Product), RoPE를 적용하면 두 단어 사이의 **'상대적인 각도 차이'**만 남게 됩니다. 즉, 모델이 "아, 이 두 단어는 5칸 떨어져 있구나"라는 것을 수학적으로 아주 깔끔하게 이해할 수 있습니다.

    ② 외삽성 (Extrapolation)

    학습할 때 2048 토큰만 봤더라도, 회전 각도만 더 돌리면 되기 때문에 4096, 8192 토큰이 들어와도 모델이 크게 당황하지 않습니다. 이것이 최신 모델들이 **Context Window(문맥 길이)**를 획기적으로 늘릴 수 있었던 비결입니다.

    ③ Decay property (거리 감쇠)

    멀리 떨어진 단어일수록 어텐션 점수가 자연스럽게 낮아지는 특성이 있습니다. 이는 인간이 문장을 읽을 때 가까운 단어에 더 집중하는 방식과 유사합니다

     

     

    SwiGLU: FFN의 성능을 폭발시킨 ‘게이팅’의 마법

    기본 트랜스포머는 FFN(Feed-Forward Network)에서 ReLU를 사용했습니다. 하지만 최신 LLM(Llama, PaLM 등)은 100% SwiGLU를 씁니다. 왜일까요?

    ① 정체는 무엇인가? (Swish + GLU)

    SwiGLU는 이름 그대로 Swish 활성화 함수와 **GLU(Gated Linear Unit)**를 결합한 형태입니다.
    SwiGLU는 "데이터를 통과시킬지 말지 결정하는 스마트한 밸브" 역할을 합니다.

    • Swish: $x \cdot \sigma(\beta x)$ 형태의 함수입니다. ReLU와 달리 $0$ 부근에서 부드러운 곡선을 그리며, 음수 영역에서도 약간의 정보를 살려둡니다.
    • GLU (Gated Linear Unit): 두 개의 선형 변환 결과 중 하나를 다른 하나의 ‘게이트(Gate, 필터)’로 사용하는 방식입니다.

    ② 수학적 구조 (어려워 보이지만 원리는 간단!)

    기존 ReLU FFN은 단순히 한 번 꺾고 끝났다면, SwiGLU는 다음과 같이 작동합니다.

    $$SwiGLU(x, W, V, b, c) = Swish(xW + b) \otimes (xV + c)$$

    여기서 $\otimes$는 **Element-wise product(원소별 곱)**입니다.

    • 한쪽(Swish): 정보를 처리하고,
    • 다른 한쪽(Linear): 게이트 역할을 하며 어떤 정보를 통과시킬지 결정합니다.

    ③ 왜 쓰는가? (The Benefits)

    1. Dead ReLU 방지: ReLU는 값이 음수가 되면 아예 꺼져버리는(0) 문제가 있지만, Swish는 부드러운 곡선 덕분에 학습이 훨씬 안정적입니다.
    2. 강력한 표현력: 게이팅(Gating) 메커니즘 덕분에 모델이 데이터의 복잡한 비선형 관계를 훨씬 더 잘 포착합니다.
    3. 성능 증명: 수많은 벤치마크에서 ReLU 대비 동일 파라미터로 훨씬 높은 정확도를 보여주었습니다.
    함수 이름 숫자 요리법 (직관적 설명) 특징
    Sigmoid 모든 숫자를 0~1 사이로 꽉 눌러버림 "이거 맞을 확률이 얼마야?"라고 물을 때 씀
    ReLU 마이너스는 무조건 0, 플러스는 그대로 통과 단순하지만 마이너스 데이터를 다 죽여버림 (Dead ReLU)
    Swish ReLU와 비슷한데, 0 근처에서 부드러운 곡선을 그리며 마이너스도 살짝 살려둠 정보 손실이 적고 학습이 매끄러움
    SwiGLU Swish선형 변환 두 개를 곱함 "똑똑한 필터링". 한쪽이 데이터면, 다른 한쪽은 그 데이터를 얼마나 보낼지 결정하는 밸브임

     

     

     

    Cosine Schedule + Annealing: 최적의 학습률을 찾는 여정

    아무리 좋은 모델(SwiGLU)과 재료(Data)가 있어도, **불 조절(Learning Rate)**을 못 하면 요리를 망칩니다. 이를 가장 완벽하게 조절하는 방법이 바로 이 조합입니다.

    ① Warm-up (예열 단계)

    학습 초기에는 모델이 아무것도 모르는 상태라 학습률이 너무 높으면 날뛰어버립니다.

    • 방법: 처음 몇 천 스텝 동안 학습률을 아주 0에서부터 최고점까지 서서히 높입니다.
    • 이유: 엔진을 예열하듯 학습 초기의 불안정성을 잡는 과정입니다.

    ② Cosine Decay (본격적인 조절)

    학습률 최고점에 도달한 뒤, 코사인($\cos$) 그래프를 그리며 학습률을 부드럽게 낮춥니다.

    • 왜 코사인인가?: 선형(Linear)으로 낮추는 것보다 초기에는 높은 학습률을 길게 유지해 전역 최적점(Global Minima) 근처로 빠르게 이동하고, 막판에는 아주 천천히 낮추며 정교하게 수렴하기 때문입니다.

    ③ Annealing (풀림/담금질)

    금속을 가열했다가 천천히 식히며 단단하게 만드는 '어닐링' 공정에서 이름을 따왔습니다.

    • 방법: 학습의 극후반부에 학습률을 아주 낮은 수준으로 유지하거나 미세하게 조정하며 모델을 '담금질'합니다.
    • 효과: 이 과정에서 모델은 손실 함수(Loss)의 가장 깊고 뾰족한 골짜기가 아니라, 넓고 평평한 골짜기를 찾아 들어갑니다. 이렇게 '평평한' 곳에 안착해야 나중에 새로운 데이터가 들어와도 성능이 널뛰지 않는 일반화(Generalization) 능력이 생깁
Designed by Tistory.