[Home] AI로 돌아가기

Transformer란 무엇인가?

[LINK][YouTube] Transformer Explainer: Learn how transformer works in LLM like GPT!

1. Transformer 개요

Transformer는 자연어 처리(NLP) 및 인공지능 모델에서 가장 널리 사용되는 아키텍처 중 하나다.

Transformer는 인공지능 접근 방식을 근본적으로 변화시킨 신경망 아키텍처(architecture)이다. Transformer는 2017년 논문 "Attention is All You Need" 에서 처음 소개되었으며, 이후 OpenAI의 GPT, Meta의 Llama, Google의 Gemini와 같은 텍스트 생성 모델을 구동하는 대표적인 딥러닝 아키텍처가 되었다. 또한, Transformer는 텍스트뿐만 아니라 오디오 생성, 이미지 인식, 단백질 구조 예측, 게임 플레이 등 다양한 분야에서도 활용되며 그 다재다능함을 입증하고 있다.

본질적으로, 텍스트 생성 Transformer 모델은 다음 단어 예측(next-word prediction) 원리에 기반하여 작동한다. 즉, 사용자로부터 입력된 텍스트 프롬프트(prompt)에 대해 가장 가능성이 높은 다음 단어를 예측하는 방식이다. Transformer의 핵심 혁신과 강점은 자기 주의 메커니즘(Self-Attention Mechanism) 을 활용하여 전체 시퀀스를 처리하고, 이전 아키텍처보다 더 효과적으로 장기 의존성(Long-range Dependency)을 포착할 수 있다는 점에 있다.

GPT-2 모델 계열은 대표적인 텍스트 생성 Transformer 모델이다. Transformer Explainer는 1억 2400만 개의 매개변수(parameters)를 가진 GPT-2 (소형) 모델을 기반으로 작동한다. 이 모델은 최신이거나 가장 강력한 Transformer 모델은 아니지만, 현재 최첨단 모델에서 사용되는 많은 아키텍처적 요소와 원리를 공유하고 있어 Transformer의 기초를 이해하는 데 이상적인 출발점이 된다.

2. Transformer 아키텍처

모든 텍스트 생성 Transformer 모델은 다음의 세 가지 핵심 구성 요소로 이루어져 있다.

임베딩 (Embedding)

임베딩은 입력 데이터를 벡터 표현으로 변환하는 과정이다.

  • 입력된 텍스트는 토큰(tokens)이라고 불리는 작은 단위로 나뉜다. 토큰은 단어 또는 서브워드(subword) 단위일 수 있다.
  • 이 토큰들은 임베딩(embedding)이라는 수치 벡터(numerical vectors)로 변환되며, 단어의 의미적 정보를 포함하게 된다.

Transformer 블록

Transformer는 다층 인코더-디코더 구조로 구성되며, 각 블록은 어텐션 메커니즘을 포함한다.

  • Transformer 모델의 기본적인 처리 단위로, 입력 데이터를 변환하고 학습하는 역할을 한다.

  • 각 Transformer 블록은 다음과 같은 두 가지 주요 구성 요소로 이루어져 있다.

    ① 어텐션 메커니즘 (Attention Mechanism)

    • Transformer 블록의 핵심 요소로, 토큰들이 서로 정보를 주고받으며 문맥(context)과 단어 간의 관계를 학습할 수 있도록 한다.
    • 특히, 자기 주의(Self-Attention) 기법 을 사용하여 문장의 전반적인 의미를 효과적으로 파악할 수 있다.

    ② MLP (Multilayer Perceptron) 레이어

    • 개별 토큰에 대해 독립적으로 작동하는 피드포워드 신경망(FNN, Feedforward Neural Network)이다.
    • 어텐션 레이어가 토큰 간 정보 교환을 담당 하는 반면, MLP 레이어는 각 토큰의 표현을 더욱 정제(refine)하는 역할을 한다.

출력 확률 (Output Probabilities)

Softmax 함수를 사용하여 최종 출력을 확률 분포로 변환한다.

  • 최종적으로, 선형(Linear) 및 소프트맥스(Softmax) 레이어를 통해 모델이 처리된 임베딩을 확률 값으로 변환한다.
  • 이를 통해 다음에 올 토큰을 예측하는 것이 가능해진다.

임베딩(Embedding)

Transformer 모델을 사용하여 텍스트를 생성한다고 가정해 보자. 예를 들어, 다음과 같은 프롬프트를 입력한다고 가정해 보자.

➡ “Data visualization empowers users to”

이러한 입력은 모델이 이해하고 처리할 수 있는 형식으로 변환되어야 한다. 여기서 임베딩(embedding)이 중요한 역할을 하며, 텍스트를 수치적 표현(numerical representation)으로 변환하여 모델이 학습하고 예측할 수 있도록 한다.

프롬프트를 임베딩으로 변환하는 과정은 다음 네 단계로 이루어진다.

(1) 토큰화(Tokenization)

  • 입력 문장을 토큰(token)으로 나눈다.
  • 토큰은 단어 또는 서브워드(subword) 단위로 구성될 수 있다.

(2) 토큰 임베딩(Token Embedding)

  • 토큰을 고유한 수치 벡터(numerical vector) 로 변환한다.
  • 이 벡터는 해당 단어의 의미적 정보를 포함한다.

(3) 위치 인코딩(Positional Encoding)

  • Transformer 모델은 RNN과 달리 순서를 직접 인식하지 못하기 때문에, 각 토큰의 위치 정보를 추가해야 한다.
  • 이를 통해 모델이 문장에서 단어 순서의 영향을 받을 수 있도록 한다.

(4) 최종 임베딩(Final Embedding)

  • 토큰 임베딩과 위치 인코딩을 더하여 최종 임베딩 벡터를 생성한다.
  • 이 벡터가 Transformer 모델의 입력으로 사용된다.

[그림 1] 임베딩 레이어를 확장하여 입력 프롬프트가 벡터 표현으로 변환되는 과정을 시각적으로 나타내었다. 이 과정은 (1) 토큰화 → (2) 토큰 임베딩 → (3) 위치 인코딩 → (4) 최종 임베딩 순서로 진행된다.

Transformer 블록

Transformer 모델의 핵심 처리 단위는 Transformer 블록이니다. 이 블록은 다중 헤드 자기 주의(Multi-Head Self-Attention)와 다층 퍼셉트론(MLP, Multi-Layer Perceptron) 레이어로 구성된다. 대부분의 Transformer 모델은 이러한 블록을 여러 개 쌓아 순차적으로 처리하며, 입력된 토큰의 표현을 각 층을 거치며 점진적으로 정교하게 발전시킨다. 이러한 층(layer) 기반 접근법은 입력에 대한 더 높은 수준의 표현을 구축하게 만든다.


1. 다중 헤드 자기 주의 (Multi-Head Self-Attention)

자기 주의(self-attention) 메커니즘은 입력 시퀀스 내에서 토큰 간의 복잡한 관계와 의존성을 포착할 수 있도록 모델이 중요한 부분에 집중(focus)할 수 있게 한다. 다음은 이 자기 주의가 계산되는 단계별 과정이다.


Step 1: Query, Key, Value 행렬 생성

[그림 2] Query, Key, Value(Q, K, V) 행렬이 입력 임베딩에서 생성되는 과정

  • 각 토큰의 임베딩 벡터는 Query(Q)Key(K)Value(V) 세 가지 벡터로 변환된다.
  • 이 벡터들은 입력 임베딩 행렬과 Q, K, V를 위한 학습된 가중치 행렬(weight matrix) 을 곱하여 생성된다.
Q, K, V의 역할을 이해하기 위한 예시: 웹 검색
  • Query(Q): 검색창에 입력한 텍스트(사용자가 더 많은 정보를 알고 싶은 토큰)
  • Key(K): 검색 결과의 웹 페이지 제목(각 토큰이 다른 토큰과 연결될 수 있는 잠재적 키)
  • Value(V): 검색 결과에 포함된 실제 웹 페이지 내용(관련 키와 연결된 정보)

이러한 Q, K, V 벡터를 사용해 어텐션 스코어(attention scores) 를 계산한다. 이 스코어는 예측을 생성할 때 각 토큰이 얼마나 중요한지(얼마나 집중해야 하는지)를 결정한다.


Step 2: 마스킹(Masked Self-Attention)

마스킹된 자기 주의는 시퀀스를 생성할 때 미래의 토큰을 보지 않고(next token prediction) 입력의 중요한 부분에 집중할 수 있도록 모델을 학습시키는 기법이다.

[그림 3] Query, Key, Value를 사용하여 마스킹된 자기 주의를 계산하는 과정

  1. 어텐션 스코어(Attention Score):

    • Query와 Key 행렬의 내적(dot product)을 통해 각 쿼리가 키와 얼마나 잘 정렬(aligned)되어 있는지를 계산한다.
    • 결과는 모든 입력 토큰 간 관계를 나타내는 정방 행렬(square matrix)을 생성한다.
  2. 마스킹(Masking):

    • 어텐션 행렬의 상단 삼각형(upper triangle)에 마스크를 적용하여 미래 토큰에 대한 접근을 차단한다.
    • 마스크된 값은 음의 무한대(−∞)로 설정되어, softmax 연산 후 무시되도록 만든다.
  3. 소프트맥스(Softmax):

    • 마스킹 후, 각 어텐션 스코어를 소프트맥스 연산을 통해 확률 값으로 변환한다.
    • 행렬의 각 행은 1로 합산되며, 왼쪽에 있는 다른 토큰이 얼마나 중요한지를 나타낸다.

Step 3: 출력(Output)

마지막으로, 마스킹된 자기 주의 스코어를 Value 행렬과 곱하여 최종 자기 주의 출력을 얻는다.

  • GPT-2에는 12개의 자기 주의 헤드(self-attention heads) 가 있으며, 각 헤드는 입력 토큰 간의 다양한 관계를 포착한다.
  • 이 헤드들의 출력은 연결(concatenate) 된 후 선형 변환(linear projection) 을 통해 다시 압축된다.

2. MLP (다층 퍼셉트론)

[그림 4] MLP 레이어는 자기 주의 표현을 더 높은 차원으로 투영하여 모델의 표현력(representational capacity)을 강화한다.

  • 다중 헤드 자기 주의가 입력 토큰 간의 다양한 관계를 포착한 후, 이 출력은 다층 퍼셉트론(MLP) 레이어를 통과한다.
  • MLP 블록은 두 개의 선형 변환(Linear Transformation)과 그 사이에 GELU 활성화 함수(activation function)로 구성된다.
MLP 동작 과정
  1. 첫 번째 선형 변환: 입력의 차원을 768에서 4배(3072) 로 증가시켜 더 풍부한 표현을 만든다.
  2. GELU 활성화 함수: 비선형성을 추가하여 모델이 더 복잡한 패턴을 학습할 수 있도록 한다.
  3. 두 번째 선형 변환: 차원을 다시 768로 줄여 다음 레이어로 전달한다.
  4. 독립적 처리: MLP는 토큰을 독립적으로 처리하며, 단순히 한 표현을 다른 표현으로 매핑하는 역할을 한다.

결론

Transformer 블록의 다중 헤드 자기 주의(Multi-Head Self-Attention)와 MLP 레이어는 함께 작동하여 입력 시퀀스에서 중요한 관계를 학습하고, 더 높은 수준의 표현을 구축한다.
이러한 구조 덕분에 Transformer는 텍스트, 이미지, 오디오 등 다양한 데이터 유형에 대해 뛰어난 성능을 발휘한다.

출력 확률 (Output Probabilities)

Transformer 블록을 모두 거친 후, 최종 출력을 선형(Linear) 레이어를 통해 처리하여 토큰 예측을 준비한다.

  • 이 레이어는 최종 표현을 50,257 차원 공간으로 투영(projection)하며, 여기서 각 단어(token)에는 logit 값(원시 출력값, raw output)이 할당된다.
  • 모든 단어가 다음 단어가 될 가능성이 있으므로, 이 과정에서는 가능성이 높은 순으로 토큰을 정렬할 수 있다.
  • 이후, 소프트맥스(Softmax) 함수를 적용하여 logit 값을 확률 분포(probability distribution) 로 변환한다.
  • 확률 값이 1이 되도록 정규화되며, 이를 통해 다음 단어를 확률적으로 샘플링할 수 있다.

확률 기반 토큰 선택

[그림 5] 각 어휘(vocabulary) 내의 토큰은 모델의 logit 값에 따라 확률이 할당된다. 이 확률은 해당 토큰이 다음 단어가 될 가능성(likelihood)을 나타낸다.

  • 최종 단계에서는 이 확률 분포에서 다음 토큰을 샘플링하여 텍스트를 생성한다.
  • 샘플링 방식은 단순한 확률 선택이 아니라, 온도(temperature) 하이퍼파라미터 에 의해 조정된다.

온도(Temperature) 하이퍼파라미터

온도(temperature) 값은 출력 확률 분포의 형태를 조절하여 생성된 텍스트의 다양성과 결정론적 성향을 조정하는 중요한 요소이다.

수학적으로, 온도는 다음과 같이 동작한다.

logit÷temperature\text{logit} \div \text{temperature}logit÷temperature

즉, 모델의 logit 값을 온도로 나누는 간단한 연산을 수행한다.

온도 조절이 미치는 영향

(1) 온도 = 1 (기본값)

  • Logit 값을 그대로 사용하며, softmax 출력에 영향을 주지 않음.

(2) 온도 < 1 (낮은 온도)

  • 확률 분포가 더 뾰족(sharpened) 해져서, 가장 가능성이 높은 토큰을 더 강하게 선택함.
  • 결과적으로 모델이 더 결정론적(deterministic) 이고 예측 가능한 출력을 생성함.

(3) 온도 > 1 (높은 온도)

  • 확률 분포가 더 평탄(flatter) 해져서, 낮은 확률을 가진 토큰도 선택될 가능성이 증가함.
  • 결과적으로 모델이 더 다양하고 창의적인(creative) 출력을 생성함.

👉온도를 조정하면서 결정론적(예측 가능한) 출력과 다양한(창의적인) 출력 사이에서 균형을 맞출 수 있다!

3. 고급 아키텍처 기능 (Advanced Architectural Features)

Transformer 모델의 성능을 향상시키는 몇 가지 고급 아키텍처 기능이 있다. 이러한 요소들은 모델의 전체적인 성능에 중요한 영향을 미치지만, Transformer의 핵심 개념을 이해하는 데는 필수적이지 않다.

특히, 레이어 정규화(Layer Normalization), 드롭아웃(Dropout), 잔차 연결(Residual Connections) 은 훈련 과정에서 중요한 역할을 한다.

  • Layer Normalization → 훈련을 안정화하고 수렴 속도를 높임
  • Dropout → 특정 뉴런을 비활성화하여 과적합(overfitting) 방지
  • Residual Connections → 그래디언트 흐름을 원활하게 하여 기울기 소실 문제(vanishing gradient problem) 해결

레이어 정규화 (Layer Normalization)

(1) 훈련 과정의 안정성을 높이고 수렴 속도를 개선하는 역할

  • 레이어 정규화는 특성(feature) 전체에 걸쳐 입력을 정규화(normalization) 하여, 활성값(activation)의 평균(mean)과 분산(variance)을 일정하게 유지하도록 한다.
  • 이를 통해 내부 공변량 변화(Internal Covariate Shift) 문제를 줄이고, 모델이 더 효과적으로 학습할 수 있도록 돕는다.
  • Transformer 블록 내에서 두 번 적용되며,
    1) 자기 주의(Self-Attention) 메커니즘 전에 적용
    2) MLP 레이어 전에 한 번 더 적용

👉결과적으로, 모델이 초기 가중치에 덜 민감해지고 훈련 과정이 더 안정적으로 진행된다.


드롭아웃 (Dropout)

(1) 과적합(overfitting)을 방지하여 모델의 일반화 성능을 향상

  • 드롭아웃은 신경망 학습 중 일부 뉴런을 무작위로 비활성화(drop) 하여 특정 뉴런에 대한 의존성을 줄이는 기법이다.
  • 훈련 중 무작위로 일부 가중치를 0으로 설정하여 더 강건한(robust) 특성(feature)을 학습하도록 유도한다.
  • 모델이 새로운 데이터를 더 잘 일반화(generalize)할 수 있도록 도와준다.

👉추론(Inference) 과정에서는 드롭아웃이 비활성화되며, 학습된 서브네트워크(sub-networks)의 앙상블(ensemble) 효과를 통해 성능이 향상된다.


잔차 연결 (Residual Connections)

(1) 기울기 소실(vanishing gradient) 문제 해결 & 깊은 신경망 학습 가능

  • 잔차 연결(Residual Connections)은 2015년 ResNet 모델에서 처음 도입된 개념으로, 매우 깊은 신경망을 훈련할 수 있도록 만든 혁신적인 기법이다.
  • 기본 아이디어는 특정 레이어의 출력을 원래 입력과 더해주는 방식으로, 입력값이 직접 전달되는 "지름길(shortcut)"을 만드는 것이다.
  • 이를 통해 기울기 소실 문제를 줄이고, Transformer 블록이 깊어져도 학습이 원활하게 진행된다.

GPT-2에서는 Transformer 블록 내에서 두 번 사용된다.
1) MLP 레이어 전에 적용
2) MLP 레이어 후에 한 번 더 적용

👉 이렇게 하면 그래디언트가 더 원활하게 흐르고, 초기 레이어까지 충분한 업데이트가 이루어질 수 있습니다.


결론

Layer Normalization, Dropout, Residual Connections 는 Transformer 모델의 훈련 안정성과 일반화 성능을 높이는 데 중요한 역할을 한다.

  • 레이어 정규화 → 입력을 정규화하여 훈련 과정 안정화
  • 드롭아웃 → 특정 뉴런을 비활성화하여 과적합 방지
  • 잔차 연결 → 그래디언트가 원활하게 흐르도록 하여 깊은 신경망 학습 가능

👉 이러한 요소들이 결합되어 Transformer 모델이 더 강력하고 효과적으로 동작할 수 있다! 

4. 인터랙티브 기능 (Interactive Features)

Transformer Explainer는 사용자가 Transformer 모델의 내부 동작을 직접 탐색할 수 있도록 설계된 인터랙티브한 도구이다.
다음과 같은 기능을 활용하여 Transformer의 작동 방식을 실험해 볼 수 있다.


1. 입력 텍스트 실험

✅ 자신만의 텍스트 시퀀스를 입력하여 모델이 어떻게 처리하는지 확인

  • 직접 입력한 문장이 Transformer 모델을 거쳐 다음 단어를 예측하는 과정을 확인할 수 있다.
  • 어텐션 가중치(attention weights)중간 연산(intermediate computations)최종 출력 확률(final output probabilities) 을 탐색할 수 있습니다.

2. 온도(Temperature) 슬라이더 조절

✅ 모델의 예측 결과를 더 결정론적(deterministic) 또는 더 창의적(creative)으로 조절 가능

  • 온도(temperature) 값을 조절하여 모델의 출력에 영향을 미칠 수 있다.
    • 낮은 온도(예: 0.5): 모델이 더 예측 가능하고 일관된 출력을 생성
    • 높은 온도(예: 1.5): 모델이 더 다양하고 창의적인 출력을 생성
  • 모델의 출력을 어떻게 변화시킬 수 있는지 직접 실험해 볼 수 있다.

3. 어텐션 맵(Attention Maps) 상호작용

✅ Transformer 모델이 특정 입력 토큰에 얼마나 집중하는지(어텐션 가중치)를 시각적으로 확인 가능

  • 어텐션 맵을 사용하여 모델이 어떤 단어에 더 집중하는지 탐색
  • 특정 토큰 위에 마우스를 올려 해당 토큰이 문장에서 다른 단어들과 어떻게 연결되는지 확인 가능
  • Transformer가 문맥(context)과 단어 간의 관계를 어떻게 학습하는지 직접 분석 가능

결론

Transformer Explainer는 단순한 모델이 아니라, 직접 실험하고 이해할 수 있는 도구이다.

  • 자신의 문장을 입력하여 모델의 동작을 탐색
  • 온도를 조절하며 결정론적 vs. 창의적인 출력을 비교
  • 어텐션 맵을 통해 Transformer가 어떻게 문맥을 학습하는지 분석

👉 이러한 기능들을 활용하여 Transformer 모델의 작동 원리를 더 깊이 이해할 수 있다! 🚀

5. Transformer Explainer의 구현 방식

Transformer Explainer는 브라우저에서 실시간으로 작동하는 GPT-2 (소형) 모델을 사용하여 사용자 입력에 따라 즉각적으로 시각적 변화를 보여주는 도구입니다.


🔧 구현 기술

  1. 모델 및 백엔드

    • 사용된 모델은 GPT-2 (소형) 이며, Andrej Karpathy의 nanoGPT 프로젝트의 PyTorch 구현을 기반으로 하고 있습니다.
    • 이 모델은 ONNX Runtime으로 변환되어 브라우저 상에서 원활하게 실행됩니다.
    • 사용자가 입력할 때마다 수치 계산이 실시간으로 업데이트되며, 모델이 다음 단어를 예측하는 과정을 즉시 시각화합니다.
  2. 프론트엔드 구성 요소

    • JavaScript와 Svelte: Svelte를 사용하여 사용자 인터페이스(UI)를 구성하고 반응형 상호작용을 제공합니다.
    • D3.js: 어텐션 맵과 확률 분포 등 동적 시각화(Dynamic Visualizations) 를 구현하는 데 사용됩니다.
    • 실시간 업데이트: 사용자 입력에 따라 중간 연산 결과와 예측 확률 등이 즉시 시각적으로 반영됩니다.

6. 개발팀

이 프로젝트는 조지아 공과대학교(Georgia Institute of Technology) 소속의 다음 연구자들에 의해 개발되었습니다:

  • Aeree Cho
  • Grace C. Kim
  • Alexander Karpekov
  • Alec Helbling
  • Jay Wang
  • Seongmin Lee
  • Benjamin Hoover
  • Polo Chau

이들은 Transformer의 내부 작동 원리를 직관적으로 이해할 수 있도록 설계된 인터랙티브 도구를 개발함으로써 교육과 연구 분야에서 Transformer 모델의 접근성을 크게 향상시켰습니다. 🚀