화이트 모드로 보시길 권장합니다

이 글은 [LLM] 시리즈로
LLM의 개념을 정리해둔 시리즈이다.

Transformer

What is Attention?

가중치(weight)를 사용하여 어떤 입력이 더 중요한지 계산하고, 그 정보를 반영하는 과정이다.

주어진 입력 데이터에서 각 요소가 출력에 얼마나 중요한지를 학습하여 가중치를 다르게 부여하는 방식이다.

 

What is Transformer?

자연어 처리(NLP) 및 시퀀스 데이터 처리에 사용되는 인공지능(AI) 모델로, Attention 메커니즘을 활용하여 문맥을 이해하고 병렬 연산이 가능하여 높은 성능을 보인다.

대형 언어 모델(LLM)들의 기반이 되는 가장 강력한 딥러닝 모델 중 하나이다.

 

정의 : 

기존 RNN(Recurrent Neural Network)과 LSTM(Long Short-Term Memory) 모델의 한계를 극복한 딥러닝 모델로, 기계 번역, 텍스트 요약, 문장 생성 등의 자연어 처리 작업에서 SOTA(State-of-the-art performance)성능을 달성했다.

 

개념 : 

Attention 메커니즘을 기반으로 동작하며, 자연어 문장에서 중요한 단어를 강조하고, 병렬 연산을 통해 빠르게 학습 및 추론이 가능한 모델이다.

기존 RNN/LSTM과 달리, Transformer는 한 번에 전체 문장을 처리할 수 있어 학습 속도가 빠르다.
Self-Attention을 사용하여 문장의 문맥을 효과적으로 반영한다.

핵심 개념 : 

  • Self-Attention을 사용하여 단어 간 관계를 학습 (입력된 문장 내에서 중요한 단어를 강조)
  • 병렬 연산이 가능하여 학습 속도가 빠름 (RNN처럼 순차적으로 처리하지 않음)
  • 위치 정보(Positional Encoding)로 단어 순서를 학습 (순차적 처리가 없으므로 위치 정보를 따로 추가)
  • Encoder-Decoder 구조를 사용하여 문장 이해 및 생성 (GPT와 같은 모델은 Decoder-only 사용)

 

Transformer 특징

Self-Attention Mechanism : 

  • 문장의 각 단어가 다른 모든 단어들과의 관계를 학습함.
  • 기존 RNN/LSTM은 순차적으로 데이터를 처리하지만, Transformer는 병렬 연산이 가능하여 훨씬 빠르게 학습할 수 있음.

병렬 연산 가능(Parallelization) : 

  • RNN/LSTM은 단어를 하나씩 처리해야 하므로, 긴 문장을 학습하는 데 시간이 오래 걸림.
  • Transformer는 모든 단어를 한 번에 입력받아 병렬 연산이 가능하여 학습 속도가 빠름.

순차적 정보 학습(Positional Encoding) :

  • Transformer는 순서를 직접 인식할 수 없기 때문에, Positional Encoding을 사용하여 단어의 순서를 학습함.

확장성 : 

  • 모델 크기를 쉽게 확장할 수 있으며, 대규모 데이터에서도 강력한 성능을 발휘함.
  • GPT, BERT, T5 같은 대형 언어 모델(LLM)들은 Transformer를 기반으로 만들어짐.

Transformer 주요 동작 구조

Transformer는 인코더(Encoder)와 디코더(Decoder)로 나뉜다.

Transformer Architecture

Encoder(인코더) :

입력 문장을 분석하여 각 단어의 의미를 학습하는 역할을 한다.

입력 문장을 문맥 정보를 포함한 벡터로 변환한다.

Encorder 주요 과정 :

  • 입력 문장을 토큰화하여 숫자로 변환 (Tokenization)
  • 각 단어를 벡터로 변환 (Word Embedding)
  • 위치 정보를 추가 (Positional Encoding)
  • Self-Attention을 수행하여 문맥을 학습
  • Feedforward Neural Network (FFN) 적용
  • Layer Normalization 및 Residual Connection을 Self-Attention과 FFN 이후 연산에 각각 적용

Decoder(디코더) :

Encoder의 출력 벡터를 받아 문장을 생성하는 역할을 수행한다.

단어를 한 개씩 예측하며 문장을 완성한다.

  • 입력 토큰을 받아 문장 생성 시작
  • Masked Self-Attention 적용 (이전 단어까지만 참고하여 다음 단어 예측)
  • Encoder에서 나온 문맥 정보와 결합하여 Attention 수행
  • Feedforward Neural Network (FFN) 적용
  • Softmax를 사용하여 다음 단어를 예측
  • 반복적으로 단어를 예측하여 문장 완성

Self-Attention: Transformer 핵심 메커니즘

Transformer가 단어 간의 관계를 학습하는 핵심 메커니즘이다.

Query, Key, Value 벡터 생성 : 

  • X : 입력 단어의 벡터
  • W_{Q}, W_{K}, W_{V} :
    학습 가능한 가중치 행렬.
    가중치 행렬을 통해 입력 벡터 X 가 다양한 관점에서 변환.
  • Query (Q) :
    입력된 단어(토큰)가 다른 단어들과 얼마나 관련이 있는지 판단하기 위한 벡터.
    "이 단어가 다른 단어들과 얼마나 연관이 있는가?"
  • Key (K) :
    각 단어를 나타내는 고유한 벡터로, Query와의 유사도를 계산하는 데 사용.
    " 이 단어가 어떤 정보를 갖고 있는가?"
  • Value (V) :
    Query와 Key의 연산 결과를 반영하여 최종적으로 모델이 출력할 정보를 결정하는 벡터.
    "그 정보를 모델이 어떻게 활용할 것인가?"

Attention Score 계산 :

  • 각 단어가 문장 내 다른 단어들과 얼마나 관련이 있는지를 평가하기 위해 사용.
  • 각 단어의 Query 벡터와 Key 벡터 간의 내적(dot product)을 수행하여 유사도를 측정.
  • d_{k} :
    Key 벡터의 차원 수이며, 스케일링을 통해 안정적인 학습을 유도.
    벡터 차원이 커질수록 내적 값이 커지므로, 이를 조정하여 숫자가 너무 커지는 것을 방지.

Softmax를 사용한 Attention 가중치 계산 :

  • Softmax 함수를 적용하여 확률 분포를 생성하고, 각 단어가 다른 단어에 대해 가지는 중요도를 결정.
  • Softmax를 적용하면, 각 단어에 대한 가중치 값이 확률값(0~1) 형태로 변환된다.
단어 The cat sat on the mat
The 0.2 0.1 0.05 0.02 0.3 0.05
cat 0.1 0.4 0.3 0.1 0.05 0.05
sat 0.05 0.3 0.5 0.2 0.1 0.1
  • "sat"은 "cat"과 "on"에 더 높은 가중치를 할당함 → 문맥적으로 관련이 많음

Value 벡를 가중합하여 최종 출력 벡터 생성 :

  • 각 단어의 Value 벡터를 가중 평균하여 최종 출력 벡터를 생성.
  • Transformer는 문장의 문맥을 반영한 벡터 표현을 가지게 됨.

Multi-Head Attention: 다양한 관점에서 문맥을 학습

Self-Attention은 문장에서 각 단어가 다른 단어들과의 관계를 학습하는 방식이지만, 단어 간의 관계는 단 하나의 의미로만 해석되지 않는다.

단순한 Self-Attention은 다의적(Polysemous) 의미를 반영하지 못한다.

Multi-Head Attention을 사용하면, 단어의 다양한 의미를 여러 개의 독립적인 Self-Attention으로 분석할 수 있다.

각각의 Head는 다른 해석을 학습하여 더 정교한 문맥 이해가 가능해진다.

 

Muti-Head Attention 동작 과정 :

Step 1. 입력 데이터를 여러 개의 Head로 분할기 위한 변환 :

  • Q, K, V : 
    각 단어(토큰)에 대해 d_{model} 차원의 벡터가 생성되며, 전체 문장은 seq_len개의 단어로 이루어짐.
    각 행렬의 크기 : seq_{len}(입력 문장의 단어 수)*d_{model}(모델의 차원 수)
    • W_{Q}, W_{K}, V_{K} : 
      입력 벡터의 차원 d_{model} 을 유지하면서 변환하는 역할.
      각 행렬의 크기 : d_{model}*d_{model}
      각 단어에 대해 d_{model} 차원의 벡터 가중치를 적용한 d_{model}차원의 새로운 벡터로의 변환을 수행한다.
  • Transformer에서 입력 벡터 X 는 d_{model} 차원의 벡터를 가짐.
  • X를 여러 개의 Head로 분할하기 위해, 독립적인 가중치 행렬을 곱해 Query, Key, Value 벡터로 변환.

Step 2. Head 개수만큼 벡터를 분할 :

  • d_{model} 크기의 벡터를 h개의 Head로 나눔.
  • Head는 d_{k} 차원의 벡터를 가짐.
  • d_{model}차원 벡터를 Head로 나눌 때, 단순한 분할이 아니라, Head별로 독립적인 가중치((W_{Q})^h, (W_{K})^h, (W_{V})^h)를 적용해 새로운 d_{k}차원 벡터(Q_{h}, K _{h} , V_{h})로 변환.
  • 가중치 행렬들은 처음에는 랜덤한 값이지만, 학습 과정에서 오차 역전파(Backpropagation)를 통해 점점 최적화된다.
  • ex) d_{mode} = 512, h = 8
    d_{k} = 512/8 = 64, Head는 64차원의 벡터를 갖게 됨.
    Q_{h}, K _{h} , V_{h} ∈ R^{seq_len*d_{k}}로 변환됨.

Step 3. 각 Head에서 독립적인 Self-Attention 수행 :

  • Query와 Key의 내적 연산을 수행하여 유사도(Attention Score)를 계산.
  • Softmax를 적용하여 가중치를 확률값으로 변환.
  • Value 벡터에 가중치를 적용하여 최종 문맥 벡터를 생성.
  • 이 연산이 Head 개수만큼 병렬적으로 수행됨.

Step 4. 여러 Head의 결과를 다시 하나로 합침(Concatenation) :

  • 각 Head에서 얻은 Attention 결과를 하나의 벡터로 합쳐야 함.
  • W^O :
    출력 차원으로 변환하는 학습 가능한 가중치 행렬.
    각 Head에서 학습한 정보를 하나로 합쳐 최종적인 Attention 벡터가 생성된다.

Feedforward Neural Network(FFN, Muti-Layer Perceptron; MLP)

Self-Attention만으로는 문맥을 이해할 수 있지만, 더 복잡한 관계를 학습하기 위해 추가적인 비선형 변환이 필요하다.

단순한 Fully Connected Layer로 구성되어 있으며, Self-Attention을 통과한 벡터를 추가 변환하여 더 정교한 표현을 생성한다.

  • : 학습 가능한 가중치 행렬
  • b_{1},b_{2} : 바이어스 (bias)
  • ReLU 활성화 함수 max⁡(0,X)를 사용하여 비선형성 추가
  • FFN 필요성 : 
    Self-Attention만으로는 문맥을 학습하지만, 추가적인 변환을 통해 더 깊은 표현을 학습해야 함.
    ReLU 같은 활성화 함수 적용으로 비선형성(Non-linearity) 추가.
    Self-Attention을 통과한 벡터의 특징을 더욱 강화하여 최종적인 표현력을 높임.

Layer Normalization(LayerNorm)

딥러닝 모델에서 각 레이어의 입력을 정규화(Normalization)하는 기법이다.

주로 Transformer 모델과 같은 딥러닝 아키텍처에서 사용되며, 학습 안정성을 높이고, 기울기 흐름(Gradient Flow)을 원활하게 유지하는 역할을 한다.

입력 벡터의 평균(Mean)과 표준편차(Standard Deviation)를 사용하여 정규화하며, 각 뉴런이 독립적으로 학습할 수 있도록 도와준다.

개념 : 

  • 입력을 정규화하여 학습 안정성을 증가시키는 정규화 기법.
  • BatchNorm과 달리 배치 크기에 영향을 받지 않으며, Transformer, RNN 등에 최적화됨.
  • MLP(FeedForward Network) 및 Self-Attention 계층 앞뒤에서 사용.
  • 딥러닝 모델이 안정적으로 학습할 수 있도록 돕는 필수적인 정규화 기법이며, 특히 Transformer 모델에서 강력한 성능을 발휘함.

필요한 이유 : 

  • 신경망에서의 필요성 : 
    • Gradient Vanishing 혹은 Gradient Exploding 문제 : 
      • 입력이 너무 크거나 너무 작으면, 역전파(Backpropagation) 과정에서 기울기 값이 0으로 사라지거나 지나치게 커질 수 있음.
      • 깊은 네트워크(Deep Neural Networks)에서 이런 문제가 심각해짐.
    • 모델 학습 속도 저하 : 
      • 입력값의 분포가 일정하지 않으면, 모델이 최적의 가중치를 학습하는 속도가 느려짐.
      • 이를 해결하기 위해 각 layer에서 데이터를 정규화하여 일관된 입력을 유지해야 함.
  • 모델 학습 속도 저하 : 
    • Batch Normalization (BatchNorm)은 입력을 정규화하는 대표적인 방법이지만, 미니배치(Mini-batch) 단위로 정규화를 수행하기 때문에 단점이 존재.
      • 배치 크기가 작을 경우(예: 1개) → 정규화가 불안정해짐.
      • RNN, Transformer와 같은 시퀀스 모델에서는 배치 단위가 아닌 개별 입력 단위에서 정규화가 필요함.
  • LayerNorm은 이러한 문제를 해결하기 위해 등장했으며, 배치 크기와 무관하게 입력을 정규화할 수 있도록 설계되었기에, Transformer에선 BatchNorm 대신 LayerNorm을 사용함.

특징 : 

  • Batch 크기에 영향을 받지 않음 : 
    • BatchNorm은 미니배치 크기에 따라 정규화가 달라지지만, LayerNorm은 개별 입력을 기반으로 정규화되므로 일관된 출력을 제공.
  • Transformer, RNN 같은 모델에서 필수적 : 
    • Transformer 모델에서는 시퀀스 단위로 정규화해야 하기 때문에 BatchNorm보다 LayerNorm이 더 적합.
  • 학습 안정성 증가 : 
    • Gradient Vanishing 혹은 Gradient Exploding 문제를 방지하여 더 안정적인 학습 가능.
  • Parameter Tying과 조합 가능 : 
    • 입력 임베딩과 출력 선형 변환 계층 간의 파라미터를 공유(Parameter Tying)하면서도 LayerNorm을 사용하여 학습 효율을 극대화.

수식 : 

  • x-hat_{i} : 정규화된 출력
  • x_{i} : 
    입력 벡터의 개별 요소(d 차원).
  • μ : 입력 벡터 평균.

  • σ : 입력 벡터의 표준편차.

  • ϵ : 수치적 안정성을 위한 작은 값(ex. 10^{-5}
  • γ : 학습 가능한 스케일링 파라미터
  • β : 학습 가능한 Bias 파라미터

동작 원리 : 

  • Step 1. 입력 벡터의 평균 계산 : 
    • 입력 벡터 x의 μ 를 계산.
    • 평균값을 이용해 입력 데이터를 평균 중심화(Mean Centering)  함.
      • Mean Centering : x에서 μ를 빼, 데이터 중심을 0으로 맞추는 과정
  • Step 2.  입력 벡터의 표준편차 계산 : 
    • 각 요소에서 평균을 뺀 후 제곱하고, 전체 차원의 평균을 구한 후 제곱근을 취하여 표준편차 σ를 구함.
    • 입력 값의 분포를 일정한 크기로 조정 가능.
  • Step 3.  정규화 수행 : 
    • 입력 벡터에서 평균을 빼고 표준편차로 나눔 → 입력 값이 평균이 0, 분산이 1인 표준 정규 분포를 따르게 됨.
  • Step 4.  스케일링 및 Bias 적용 : 
    • 정규화된 값에 학습 가능한 파라미터 γβ를 적용하여 모델이 최적의 값으로 조정할 수 있도록 만듦.
    • 는 정규화된 입력을 확장(Scaling), β는 이동(Shifting)하는 역할을 수행.
      • 모델이 더 유연하게 학습할 수 있도록 도와줌.
      • 정규화로 인해 손실될 수 있는 표현력을 보완함.  
      • Scaling : 
        • 정규화된 데이터는 평균 0, 표준편차 1이지만, 모델이 학습하면서 필요에 따라 더 큰 값이나 작은 값을 사용하고 싶을 수 있음.
        • γ를 곱하면 데이터의 크기를 조절(Scaling) 가능.
      • Shifting : 
        • 데이터의 위치(평균)를 이동하는 역할.
        • 정규화된 데이터는 평균이 0이지만, 모델이 더 나은 학습을 위해 특정 값을 중심으로 데이터를 조정하고 싶을 수 있음.
        • β를 더해주면 데이터의 중심을 이동(Shifting) 가능.

Residual Connection(잔차 연결)

뉴럴 네트워크에서 입력을 그대로 다음 레이어로 전달하면서, 변환된 출력과 더하는(Skip Connection ) 방식의 연결 기법이다.

이 기법은 딥러닝 모델이 더 깊어질 때 발생하는 학습 문제(기울기 소실, 기울기 폭발)를 해결하는 데 핵심적인 역할을 한다.

Transformer, ResNet과 같은 최신 모델에서 필수적인 구조로 사용된다.

개념 : 

  • 일반적인 뉴럴 네트워크에서는 각 레이어(layer)가 이전 레이어의 출력을 변환하여 학습을 진행.
  • 네트워크가 너무 깊어지면 Gradient Vanishing 및 Gradient Exploding 문제가 발생하여 학습이 어려워짐.
  • Residual Connection은 이러한 문제를 해결하기 위해, 입력을 직접 다음 레이어로 전달하는 추가적인 경로(Skip Connection)를 제공하는 방식.
  • 기울기 소실 문제를 해결하고, 학습 속도를 향상시키며, 정보 손실을 방지하는 중요한 기법.
  • 학습이 더 쉬워지고, 깊은 네트워크에서도 정보 손실 없이 안정적인 학습이 가능.
  • Transformer에서 중요한 역할을 하며, MLP(FeedForward Network) 및 Self-Attention 계층 앞뒤에서 사용.
  • '입력+변환된 결과'를 합하는 방식.

특징 : 

  •  Gradient Vanishing 문제 해결 : 
    • 깊은 네트워크에서는 역전파 과정에서 기울기가 점점 작아져서 학습이 어려워지는 문제가 발생.
    • Residual Connection을 사용하면, 입력이 직접 다음 레이어로 전달되므로, 역전파 시 기울기가 직접 전파되어 손실되지 않음.
    • 더 깊은 네트워크에서도 안정적으로 학습이 가능.
  • 학습 속도 향상 : 
    • 입력이 직접 전달되므로, 초기 학습 단계에서 모델이 더 빠르게 수렴할 수 있음.
    • 실험적으로 Residual Connection이 없는 모델보다 잔차 연결이 포함된 모델이 학습 속도가 더 빠름.
      ( Deep Residual Learning for Image Recognition (He et al., 2016))
  • 정보 손실 방지 :
    • 일반적인 딥러닝 네트워크에서는 각 레이어가 입력을 변환하면서 일부 정보가 손실될 가능성이 있음.
    • Residual Connection을 사용하면 원본 입력을 그대로 다음 레이어로 전달할 수 있으므로 정보 손실을 방지할 수 있음.

수식 : 

  • x = 입력 벡터(이전 레이어의 출력)
  • f(x) : NN 연산(ex. 선형변환, 활성화 함수, etc.)
  • y : Residual Connection을 적용한 최종 출력
  • f(x)만 사용하는 기존 네트워크와 달리, x를 그대로 더함으로써 입력을 직접 전달할 수 있음.

동작 원리 :

  • Step 1. 일반적인 NN : 
    • y = f(x) 
    • 입력 x가 함수 f(x)를 거쳐 변환된 후 출력됨.
    • 네트워크가 깊어질 수록 f(x)가 복잡해지고, 기울기 소실 문제 발생 가능.
  • Step 2. Residual Connection 적용 : 
    • y = f(x)+x
    • 일반적인 NN과 달리 입력 x를 그대로 유지하며 f(x)를 더함.
    • 네트워크가 깊어지더라도 원본 정보가 직접 전달되기에 학습이 더 쉬워짐.

 

Transformer 최종 출력

Transformer의 마지막 레이어에서는 출력된 벡터를 확률 분포로 변환하여, 다음 단어를 예측한다.

입력 벡터를 처리하여 숨겨진 표현(Hidden Representation) 생성 :

  • Decoder의 마지막 층을 통과한 벡터는 각 단어에 대한 정보가 포함된 고차원 벡터가 됨.
  • 특정 단어를 예측하기 위해 Decoder의 최종 출력 벡터 (h) 를 Softmax에 입력.

출력 벡터를 단어 임베딩 공간으로 변환 (Linear Projection) :

  • Decoder의 마지막 출력 벡터 hh 는 단어 사전에 있는 모든 단어와 비교할 수 있도록 변환.
  • 출력 벡터에 학습 가능한 가중치 행렬 W_{o} 를 곱하여 단어의 확률 점수(Logits)를 계산.

  • W_{o}의 크기 : R^(d_{model}*V)
    • V : 단어 사전의 크기(50,000)
  • x의 크기 : R^V, 각 단어가 선택될 가능성을 나타내는 Logits를 얻음.

Softmax를 적용하여 확률 분포를 생성 :

  • Logits 벡터 x를 확률 분포로 변환해야 함.
  • Softmax 함수를 적용함.
단어 x_{i}(Logits 값) Softmax 확률
Paris 2.5 0.7 (70%)
London 1.8 0.2 (20%)
Tokyo 0.5 0.08 (8%)
Berlin -0.2 0.02 (2%)

 

최종 출력 단어 선택 :

Softmax를 통해 가장 높은 확률을 가진 단어가 최종 출력 단어로 선택됨.

예측된 단어가 Decoder의 다음 입력으로 추가되며 Transformer는 다음 단어를 예측하는 과정을 반복한다.

'Paper Review' 카테고리의 다른 글

[IBM Granite 3.0] Granite 3.0 Language Model(KR)  (2) 2025.02.06

+ Recent posts