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

이 글은 [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

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


이 글은 [Paper review] 시리즈로
인공지능 모델들의 논문을 Review 하며
글쓴이의 지식을 키워 나가는 시리즈이다.


IBM Research. (2024). Granite 3.0 Language Models [Computer software]. GitHub.
https://github.com/ibm-granite/granite-3.0-language-models/blob/main/paper.pdf
본 번역본은 IBM Research의 Granite 3.0 Language Models 문서를 기반으로 작성되었습니다.
원문은 GitHub 저장소(https://github.com/ibm-granite/granite-3.0-language-models/blob/main/paper.pdf)에서 확인하실 수 있습니다.

[Paper Review] - [LLM] What is Transformer?

본 번역본의 이해를 돕는 'What is Transformer'를 읽고 오시는걸 추처드립니다.

초록(ABSTRACT)

 본 보고서는 4억에서 80억 개의 활성 매개변수에 이르는 새로운 경량 최첨단 개방형 기초 모델 세트인 Granite 3.0을 소개한다. 이 모델은 다국어, 코딩, 함수 호출 기능을 기본적으로 지원하며, 강력한 안전성 성능을 갖추고 있다. 이 모델들은 온프레미스(on-premise) 및 온디바이스(on-device) 환경을 포함한 기업용 사례를 타깃으로 한다.

 

 종합적인 작업 세트에 대한 평가 결과, Granite 3.0 모델들은 크기 대비 state-of-the-art performance(해당 분야에서 가장 뛰어난 성능)을 보여주었다(Figure 1, Figure 2 참조). 또한, 본 보고서에서는 사전 학습(pre-training) 및 후 학습(post-training)에 대한 기술적 세부 사항을 공개하여 연구 커뮤니티가 오픈 기반 모델 개발을 가속화할 수 있도록 지원한다.

 

 모든 Granite 3.0 모델의 사전 학습 및 후 학습 버전은 연구 및 상업적 사용이 가능한 표준 허용 Apache 2.0 라이선스 하에 공개된다. 오픈 소스 커뮤니티의 지원을 받아 Granite 3.0 모델들은 양자화(quantization), 미세 조정(fine-tuning), 배포(deployment)를 위한 다양한 기존 도구들과 호환되도록 통합되었다.

Figure 1. 6개 분야의 19개 작업에 대한 기본 모델 의 평균 성능
Figure 2. 8개 분야의 23개 작업에 대한 지시형 모델(Instruct Models)의 평균 성능
Figure 3. Granite-3.0-8B와 다른 모델들의 다양한 분야별 상대 성능. 각 분야에 벤치마크(평가 기준)의 세부 사항은 표 8 과 표 9 를 참조.


1. 서론(INTRODUCTION)

 

대규모 언어 모델(LLM)의 다양한 응용 분야에서의 채택은 빠르게 확산되고 있다. 웹 인터페이스나 API 호출을 통해 제공되는 소비자용 상용 옵션은 널리 이용 가능하지만, on-premise 모델에 대한 수요 역시 존재한다. on-premise  환경에서 사전 학습된 LLM을 손쉽게 미세 조정(fine-tune)하려면, 하드웨어 요구 사항이 낮은 모델이 필요하다.

 

 Gemma(Team et al., 2024)와 Llama(Dubey et al., 2024)와 같은 경량화된 모델들이 존재하며, 이 모델들은 좋은 성능을 발휘하고 요구 조건을 충족한다. 그러나 기업 환경에서는 LLM 채택에 추가적인 제약이 발생할 수 있다. 데이터 사용 및 처리에 대한 출처(provenance)와 투명성(transparency)은 법적 및 규제 준수 문제를 초래할 수 있다. 특히, LLM이 제공되는 라이선스는 기업이 특정 용도에 모델을 사용하는 것을 제한할 수 있다.

 

 본 보고서에서는 다국어, 코딩, 추론, 도구 활용을 기본적으로 지원하며, 제한된 컴퓨팅 자원에서도 실행할 수 있는 Granite 3.0 언어 모델 제품군을 소개한다. 모든 모델은 연구 및 상업적 용도로 사용할 수 있도록 Apache 2.0 라이선스 하에 공개된다. 모델의 데이터 큐레이션 및 교육 절차는 IBM의 표준 데이터 정리 프로세스 및 문서 품질 검사 외에도 거버넌스, 리스크 및 규정 준수(GRC) 기준을 위해 데이터셋을 평가하는 프로세스를 염두에 두고 기업 사용 및 커스터마이징을 위해 설계되었다.

구체적으로, Granite 3.0은 다음과 같은 다양한 크기의 4가지 모델로 구성된다:

  • Dense Models: 총 12조 개의 토큰으로 학습된 2B 및 8B 매개변수 모델.
  • Mixture-of-Expert (MoE) Models: 각각 400M 및 800M 활성 매개변수를 가진 희소(sparse) 1B 및 3B MoE 모델로, 총 10조 개의 토큰으로 학습됨

위와 같이 이 모델은 다양한 연산 요구 사항에 맞춘 여러 선택지를 제공하며, 하위 작업에서의 성능과 적절한 균형을 이룰 수 있도록 설계되었다. 각 모델 크기마다 사전 학습 후 체크포인트로 저장된 기본 모델과 대화, 지시 따르기, 유용성, 안전성을 위해 미세 조정된 지시형 체크포인트 모델을 공개한다. 기본 모델은 처음부터 새로 학습되었으며, 2단계 학습 절차를 거쳤다.

  1. Dense 모델과 MoE 모델이 각각 10조 개와 8조 개의 토큰으로 학습되었다.
    • 학습 데이터는 학계, 인터넷, 기업(예: 금융, 법률), 코드 등 다양한 출처의 비정형 다국어 데이터로 구성되었으며, 모두 허용적 라이선스가 적용된 공개 데이터셋을 사용했다.
  2. 2조 개의 토큰으로 혼합된 데이터를 사용하여 추가 학습이 이루어졌다.
    • 2단계의 일부 데이터 출처는 1단계와 동일하지만, 여기에 고품질 오픈 소스 및 합성 코퍼스가 소량 추가되어 있으며, 이들 역시 허용적 라이선스를 따른다.
    • 데이터 혼합물은 다양한 도메인과 작업 전반에 걸친 강건성에 초점을 맞춘 데이터 혼합 검색을 통해 도출된다.

 지시형 모델(instruct models)은 사전 학습된 체크포인트를 기반으로 감독 학습(Supervised Fine-Tuning, SFT)을 통해 미세 조정된 후, 강화 학습 기법인 PPO와 BRAIn(Pandey et al., 2024)을 활용하여 모델 정렬을 진행했다.

  • SFT와 PPO/BRAIn은 하위 자동 평가(downstream automatic evaluations) 성능 향상과 대화 능력 개선에 중요한 역할을 하는 것으로 나타났다.

(SFT 설명)

더보기

SFT(Supervised Fine-Tuning)

  • 사람이 직접 라벨링한 데이터를 활용하여 지도 학습(Supervised Learning) 방식으로 모델을 미세 조정하는 과정이다.
  • 주어진 질문에 대해 정확하고 일관된 답변을 학습하며, 명령어 수행 및 대화 능력을 강화한다.
  • Granite 모델은 기본적으로 SFT를 통해 초기 정렬을 수행하며, 이를 기반으로 강화 학습을 추가 적용(PPO, BRAIn)한다.
  • 다양한 문맥과 추론 능력을 학습할 수 있도록 데이터 구성을 최적화한다.
  • 커리큘럼 기반 학습(curriculum-based approach)을 사용하여 2단계로 SFT를 수행한다.
    1. 다양한 데이터를 사용하여 기본적인 언어 이해 및 응답 학습.
    2. 고품질 다중 턴(multiturn) 추론 데이터를 중심으로 일부 1단계 데이터를 재사용하여 심화 학습.
  • 모델 정렬 :
    • 모델이 특정한 목표(ex: 사용자 친화적 응답, 윤리적 가이드라인 준수, 일관된 스타일 유지 등)에 맞게 출력을 조정하는 과정.

(PPO/BRAIn 설명)

더보기

PPO(Proximal Policy Optimization)

  • 정책 최적화(Policy Optimization)를 기반으로 한 강화 학습 기법으로, 주어진 상황에서 최적의 행동을 학습하는 과정.
  • Granite 모델에서는 trlX 라이브러리를 사용하여 PPO를 적용하며, LoRA(Low-Rank Adaptation) 기반으로 미세 조정을 수행한다.
  • KL 발산(Kullback-Leibler Divergence, KLD) : 
    • 강화 학습에서 두 확률 분포 사이의 차이를 측정하는 지표이다.
    • 두 개의 확률 분포 P Q가 얼마나 다른지를 측정하는 방법이다.
    • : 실제 데이터 분포 (이상적인 정책)
    • Q(x): 모델이 예측한 분포 (현재 정책)
    • KL 발산이 작을수록 두 분포가 비슷한 형태를 띄며, KL 발산이 크면 두 분포가 차이가 많이 난다는 뜻.
  • 역방향 KL 발산(reverse KL divergence)을 최소화하는 방식을 사용하여 정책을 최적화한다
    • 역방향 KL 발산(reverse KL divergence) : 
      • 모델이 Q(x가 높은(= 자주 선택하는) 행동을 더 강하게 학습하도록 유도함.
      • 만약 Q(x)가 높은데 P(x)가 낮다면, KL 발산이 커지고 모델이 해당 행동을 수정하려고 함.
      • 반대로, Q(x)가 낮은 행동은 거의 영향이 없기 때문에 학습이 덜 됨.
      • 즉, 모델이 P(x)가 낮은 데이터도 어느 정도 학습하도록 유도됨.
      • 역방향 KL 발산은 모델이 이미 예측한 행동이 정답과 다를 경우에도 일정 부분 학습을 시도함.
  • 개념 : 
    • 점진적 업데이트(Proximal Update)
      • 모델이 한 번에 크게 변하지 않고 천천히 점진적으로 업데이트되도록 조절하여 학습 안정성을 유지합니다.
    • 클리핑(Clipping)
      • 학습 과정에서 모델이 너무 급격하게 변화하지 않도록 제한하는 기술을 사용합니다.
      • 이를 통해 성능 저하 없이 안정성을 유지할 수 있습니다.
    • Granite 모델 적용 방식
      • 학습률은 5e−75e-7, KL 페널티 계수는 초기값 0.05에서 최종적으로 2로 증가하는 방식으로 조정된다.

BRAIn(Batch Reinforcement Learning with Advantage-weighted Importance)

  • 배치 강화 학습(Batch Reinforcement Learning) 기반의 강화 학습 기법으로, 실시간 데이터 수집 없이, 미리 준비된 배치(batch) 데이터를 활용하여 학습한다.
  • PPO와 달리, 순방향 KL 발산(forward KL divergence)을 최적화하는 방식으로 정책을 조정한다.
    • 순방향 KL 발산(forward KL divergence) :
      • 희귀한 행동을 무시하고 일반적인 행동을 더 잘 학습함.
        • 가 높은 데이터(자주 등장하는 일반적인 행동)는 중요하게 반영되지만, 가 낮은 데이터(희귀한 행동)는 모델이 굳이 학습하지 않아도 됨.
      • 주어진 정책을 보수적으로 조정하여 이상적인 정책과 차이가 줄어들도록 유도함.
      • 일반적으로 나타나는 데이터만 학습하고, 드문 행동은 학습하지 않는 경향을 보임.
  • Granite 3.0 모델에서는 PPO 이후 BRAIn을 적용하여 모델 정렬을 더욱 강화한다.
  • 개념 : 
    • 배치 강화 학습 (Batch Reinforcement Learning)
      • 실시간 데이터 수집 없이, 저장된 배치 데이터를 기반으로 학습하여 더 효율적인 강화 학습을 수행합니다.
      • 기존 강화 학습 방식의 비효율성과 높은 연산 비용 문제를 해결할 수 있다.
    • 이점 가중치(Advantage-weighted Importance)
      • 특정 행동이 얼마나 유리한지(advantage)를 평가하여, 보다 효과적인 행동을 강화하는 방식으로 학습한다.
    • Granite 모델 적용 방식
      • PPO와 BRAIn을 순차적으로 적용하여, 모델 정렬을 더욱 강화하는 방식으로 활용된다.

 이 모델들은 기존 문헌에 제시된 다양한 기법들을 활용하여 학습되었다. µP(Micro Parameterization)(Yang & Hu, 2020; Yang et al., 2022; 2023)는 소규모 모델에서 하이퍼파라미터 검색 후 이를 대규모 모델로 전이할 수 있도록 하였으며, Power scheduler(Shen et al., 2024c)는 배치 크기와 전체 학습 토큰 수에 따라 학습률 전이를 가능하게 했다. MoE 모델의 경우, Dropless MoE(Gale et al., 2023) 접근 방식을 사용하여 ScatterMoE(Tan et al., 2024) 구현을 통해 모델 성능을 향상시켰다.

(µP 설명)

더보기

µP(Maximal Update Parameterization)

  • 초기화(initialization), 층별 학습률(layer-wise learning rates), 활성화 크기(activation magnitudes)를 조정하여 수학적으로 안정적인 학습(analytically stable training)을 보장하는 기법이다.
  • 개념 : 
    • 학습의 안정성 보장 : 
      • 모델의 너비(width)와 깊이(depth)에 관계없이 일관된 학습 동역학(learning dynamics)을 유지하도록 설계됨.
      • 초기화 방법과 학습률을 조정하여 너비 확장(wide scaling) 시에도 학습 불안정성이 발생하지 않도록 설계됨.
    • 하이퍼파라미터 전이(µTransfer) 지원:
      • 작은 모델(proxy model)에서 찾은 최적의 하이퍼파라미터를 큰 모델로 그대로 전이 가능.
      • 이를 통해 Zero-shot hyperparameter tuning이 가능해지며, 대형 모델에서도 학습률, 가중치 초기화 등이 효과적으로 유지됨.
  •  

(Power Scheduler 설명)

더보기

Power Scheduler

  • 딥러닝 모델의 학습 과정에서 학습률(learning rate)을 동적으로 조정하여 학습 안정성을 유지하고 효율성을 높이는 학습률 스케줄링(Learning Rate Scheduling) 기법이다.
  • 학습 초반에는 높은 학습률을 사용하여 빠르게 최적화하고, 학습이 진행될수록 점진적으로 학습률을 감소시켜 모델이 최적의 성능으로 수렴하도록 한다.
  • 개념 :
    • 학습률을 동적으로 조정
      • 학습이 진행됨에 따라 학습률을 줄여 과적합(overfitting) 방지 및 수렴 안정성 향상.
      • 학습 초반에는 높은 학습률로 빠르게 최적값을 찾고, 후반부에는 작은 학습률로 정밀한 최적화를 수행.
    • 배치 크기(batch size)에 따른 학습률 조정
      • 배치 크기가 크면: 한 번에 많은 데이터를 처리할 수 있으므로 더 큰 학습률을 사용할 수 있음.
      • 배치 크기가 작으면: 학습률이 너무 크면 불안정해질 수 있으므로 더 작은 학습률이 필요함.
      • Power Scheduler는 배치 크기에 맞춰 학습률을 자동 조정하여 모델 학습을 최적화함.
    • 총 학습 토큰 수(total training tokens)에 따른 조정
      • 모델이 학습하는 전체 데이터 양이 많아질수록 학습률을 점진적으로 줄여야 모델이 안정적으로 수렴할 수 있음.
      • Power Scheduler는 학습이 진행될수록 학습률을 감소시키며, 학습 후반부에서 최적의 가중치 조정이 가능하도록 함.
  • 공식 :
하이퍼파라미터 여부 변수 설명 역할
자동 결정 Power(n) 현재 학습률
(learning rate)
학습 스텝 nn에서 적용되는 학습률, Power Scheduler가 조절하는 최종 학습률
n 현재 학습 스텝
(훈련된 토큰 수)
학습이 진행되면서 변화하는 변수, n이 증가할수록 학습률이 변화
N 전체 학습 스텝
(total training steps)
학습이 진행되는 총 스텝 수 (총 epoch 또는 토큰 수)
f(n,N,N_{decay​}) 학습률 감소 함수 학습률이 갑자기 변하지 않고 부드럽게 감소하도록 조정하는 함수
사용자 설정 N_{warmup​} 워밍업 단계
(warmup phase)
학습 초기에 학습률을 점진적으로 증가시키는 단계의 스텝 수
N_{decay} 감소 단계
(decay phase)
학습 후반부에서 학습률을 감소시키기 시작하는 스텝 수
η_{max} 최대 학습률
(maximum learning rate)
학습률이 과하게 커지는 것을 방지하기 위한 상한선
β 배치 크기 조정 계수 학습률을 배치 크기에 맞춰 조정하는 데 활용됨
a 학습률 크기를 조정하는 상수 학습률 기본 크기를 결정하는 고정된 값
b 학습률 감소 또는 증가 속도를 조절하는 지수 학습률 감소 또는 증가 속도를 조절하는 계수
  • 동작 원리 :
    • 초기 단계(warmup phase, n <= N_{warmup}) : 
      • power(n) = n/(N_{warmup} · η_{max}
      • 학습 초반에는 학습률이 선형적으로 증가
      • n이 증가할 수록 학습률도 비례하여 증가한다.
      • 작은 학습률로 시작해 모델이 안정적으로 학습을 시작하도록 보장함.
    • 중간 단계(stable phase, N_{warmup}<n<=N-N_{decay})
      • power(n) = min( η_{max}, βan^{b})
      • βan^(b) 에 의해 학습률이 점진적으로 증가할 수 있지만, 학습률이 최대 학습률(η_{max})를 넘지 않도록 제한.
        • βan^(b)는 학습률이 학습 스텝에 따라 증가 또는 감소하도록 조정하는 공식.
        •  값에 따라 학습률이 증가 또는 감소하는 방식이 결정됨.
          • b>1 : 학습률이 증가하는 형태
          • 0<b<1 : 학습률이 완만하게 증가 또는 유지
          • b<0 : 학습률이 감소하는 형태
      • 학습이 안정적인 구간으로, 학습률을 유지하거나 천천히 감소.
      •  b 값에 따라 학습률이 조금씩 조정될 수 있으며, 일반적으로 b<1이면 학습률이 완만하게 증가하거나 유지된다.
    • 후반 단계(Decay phase, N-N_{decay} < n) :
      • power(n) = f(n, N, N_{decay} · βa(N - N_decay)^{b}
      • f(n, N, N_{decay}) : 학습률을 부드럽게 감소시키는 조정 함수로, 학습 종료 시점에 가까울수록 함수 값이 작아진다.
      • βa(N - N_decay)^{b} : 초기 학습률을 기준으로, 학습 후반부에서 학습률이 점진적으로 감소하는 정도를 결정한다.
      • 학습이 끝날 무렵에는 학습률을 줄여 모델이 더 정밀한 최적화 단계로 진입하도록 한다.
      • 너무 큰 학습률을 유지하면 모델이 최적값을 지나칠 수 있으므로, 학습이 수렴할 수 있도록 점진적으로 감소한다.
    • 초기 단계 : 학습률을 선형적으로 증가시키며, 모델이 안정적으로 학습을 시작하도록 함.
    • 중간 단계 : 학습률이 급격히 변하지 않고, 일정한 범위 내에서 최적의 값을 유지함.
    • 후반 단계 : 학습률을 점진적으로 감소시켜, 최적화가 완료될 수 있도록 함.

(Dropless/Scatter MoE 설명)

더보기

MoE(Mixture of Experts)

  • Experts(전문가 네트워크) : 특정 입력에 대해 최적화된 가중치를 학습하는 개별적인 신경망(서브 네트워크)이다.
  • 여러 개의 Experts 중 일부만 활성화하여 연산량을 줄이면서도 높은 성능을 유지하는 모델 구조이다.
  • 개념 :
    • 전체 모델은  N개의 전문가 네트워크로 구성됨.
    • 입력 데이터마다 최적의 전문가를 선택하여 활성화 함.
    • 모든 전문가를 활성화 하는 것이 아니라, 입력마다 가장 적절한 전문가 몇 개만을 선택하여 연산량을 줄임.
    • 게이트 네트워크(Gating Network)가 존재하여 입력마다 가장 적합한 전문가를 선택함.

Dropless MoE

  • 기존 MoE 모델 문제점 : 특정 전문가에 과부하가 걸리면 일부 토큰을 버리는(Token Dropping) 문제가 발생한다.
  • Dropless MoE는 모든 입력 토큰이 버려지지 않고 처리될 수 있도록 전문가 부하를 균등하게 조절하는 방식이다.
  • 개념 : 
    • 모든 입력이 전문가 네트워크에서 처리될 수 있도록 보장.
    • 특정 전문가에게 너무 많은 토큰이 몰릴 경우, 다른 전문가로 부하를 분산.
    • 학습 데이터가 손실되지 않도록 최적화하여 모델 성능을 향상.

ScatterMoE

  • 기존 MoE 모델의 문제점: 일부 전문가가 과부하 상태가 되고, 일부 전문가는 거의 사용되지 않는 부하 불균형(Load Imbalance Issue) 문제 발생한다.
  • ScatterMoE는 전문가 네트워크 간 부하를 균등하게 배분하여 MoE의 계산 효율성을 극대화하는 기법이다.
  • 개념 : 
    • Dropless MoE와 결합하여 전문가 네트워크가 균등하게 활용될 수 있도록 최적화.
    • 게이트 네트워크를 통해 특정 전문가에 과부하가 걸리지 않도록 조정.
    • 모델의 성능을 유지하면서도 계산 효율성을 개선.

실험 결과, Granite 3.0 모델은 유사한 파라미터 크기를 가진 모델들과 비교하여 다양한 벤치마크에서 우수한 성능을 보이며, 지식(knowledge), 추론(reasoning), 함수 호출(function calling), 다국어(multilingual) 처리, 코드 지원(code support) 뿐만 아니라 사이버 보안(cybersecurity) 및 검색 증강 생성(Retrieval Augmented Generation, RAG)과 같은 엔터프라이즈 작업에서도 강력한 성능을 발휘하는 것으로 나타났다.

 

Figure 3에서는 Granite-3.0-8B 모델이 Llama-3.1-8B 및 Mistral-7B보다 다양한 분야에서 일관되게 우수한 성능을 보임을 보여준다.

 

Granite 3.0 모델의 주요 강점은 다음과 같다:

  • 경량성 (Lightweight):
    Granite 3.0의 가장 큰 Dense 모델은 80억(8B) 개의 파라미터를 가지며, 가장 작은 MoE 모델은 활성화된 파라미터 개수가 4억(400M) 개에 불과하여, 상대적으로 제한된 컴퓨팅 자원에서도 모델 호스팅 및 미세 조정(fine-tuning)이 가능하다.
  • 견고한 모델과 자유로운 라이선스 (Robust Models with Permissive License):
    Granite 3.0 모델은 다양한 벤치마크에서 우수한 성능을 보이며, 엔터프라이즈 환경에서 커스터마이징 하기에 적합하다. 또한, 모든 모델(명령어 수행용 Instruct 모델 포함)은 Apache 2.0 라이선스를 사용하여, 같은 등급의 다른 모델들보다 소비자 및 기업에서 더욱 유연하게 활용할 수 있다.
  • 신뢰할 수 있는 엔터프라이즈급 LLM (Trustworthy Enterprise-Grade LLM):
    모든 모델은 IBM의 AI 윤리 원칙(AI Ethics Principles)을 준수하여 수집된 라이선스 허용 데이터를 사용해 훈련되었다. 또한, 미션 크리티컬(mission-critical) 및 규제가 필요한(regulated) 애플리케이션에서 Granite 모델에 대한 신뢰를 강화하기 위해, 데이터 소스, 데이터 처리 파이프라인, 데이터 혼합(search) 과정에 대해 상세하게 설명하였다.

Granite 모델의 아키텍처 및 MoE 모델에 대한 배경 설명은 2장에서 다루며, 데이터 수집, 필터링 및 전처리 파이프라인은 3장에서 설명한다. 이어 4장에서는 사전 학습을 위한 데이터 혼합 및 하이퍼파라미터 검색 방법, 5장에서는 사후 학습(post-training) 기법, 6장에서는 컴퓨팅 인프라를 상세히 기술한다. 7장에서는 학습된 모델의 평가 결과와 다른 오픈소스 LLM과의 비교를 포함한 종합적인 평가 결과를 다루며, 마지막으로 8장에서는 본 프로젝트의 사회적 위험 요소 및 윤리적 문제를 논의한다.


2. 모델 아키텍처(MODEL ARCHITECURE)

 

Granite 3.0 언어 모델은 디코더(decoder) 기반의 두 가지 아키텍처를 기반으로 한다:

  1. decoder-only Dense Transformer
  2. decoder-only Sparse Mixture-of-Expert(MoE) Transformer

2.1 Dense Models

Granite 3.0의 2B 및 8B Dense 모델은 Llama 및 이전 Granite Code 모델(Mishra et al., 2024)과 유사한 아키텍처를 공유하며, 이를 통해 오픈소스 추론(inference) 및 미세 조정(fine-tuning) 파이프라인과 높은 호환성을 보장한다.

 

Granite 3.0 모델에서는 Grouped Query Attention(GQA; Ainslie et al., 2023)을 활용하며, 8개의 Key-Value 헤드를 사용하여 메모리 비용과 모델 성능 간의 균형을 최적화한다. 또한, Rotary Position Embedding(RoPE; Su et al., 2024)을 적용하여 토큰 간 상대적 위치 정보를 효과적으로 모델링한다.

(GQA 설명)

더보기

GQA(Grouped Query Attention)

  • 개념 :
    • Granite 3.0 모델에서는 Grouped Query Attention(GQA) 기법을 사용하여 메모리 비용과 모델 성능 간의 균형을 최적화한다​.
    • 이를 위해 8개의 Key-Value(KV) 헤드를 사용하며, 이는 기존 Multi-Head Attention(MHA) 기법의 효율성을 향상시키기 위한 방법이다.
  • 동작 원리 : 
    • Query를 8개의 그룹으로 나눠서 각 그룹이 같은 Key-Value 세트를 공유함.
    • MHA는 Query 개수만큼 Key-Value 쌍이 필요했지만, GQA는 여러 Query가 같은 KV 세트를 공유하기에 메모리 사용량을 줄이고, 연산량을 최적화하여 모델의 속도를 향상시킴.
    • head를 그룹화 하는 원리 : 
      • Query Head를 특정한 Key-Value Pair에 최적화되도록 학습.
      • 그룹화는 학습 과정에서 자동으로 최적화.
      • 동일한 의미적 패턴을 가지는 Query Head들을 하나의 그룹으로 묶음
      • 즉, 비슷한 의미적, 문맥적 역할을 하는 Query Head를 같은 그룹으로 배치.
        • ex) 
          • 토큰 간의 긴 거리 관계(Long-range Dependency) 처리하는 Query Head 그룹.
          • 구문(Syntax) 관련 Query Head 그룹.
          • 의미(Semantics) 관련 Query Head 그룹.

(RoPE 설명)

더보기

RoPE(Rotary Position Embedding)

  • 기존 절대적 위치 임베딩 방식 : 
    • Transformer에서는 일반적으로 사인(Sin)과 코사인(Cosine) 함수를 이용한 위치 임베딩을 사용.
    • 절대적인 위치만 반영하며, 단어 간 상대적 관계를 고려하지 않음.
      • "나는 학교에 갔다"와 "학교에 나는 갔다"는 비슷한 의미지만, 모델은 이를 완전히 다르게 인식.
    • 긴 문장에서 성능 저하 (Long Context에서 약함).
      • 문장이 길어질수록 위치 임베딩이 제대로 작동하지 않음.
      • Transformer가 멀리 떨어진 단어 간의 관계를 파악하는 데 어려움을 겪음.
  • RoPE 개념 : 
    • Transformer 모델이 문장 내 단어(토큰) 간의 상대적 위치 정보를 효과적으로 반영할 수 있도록 설계된 기법이다.
    • 기존의 Transformer 모델은 위치 정보를 직접 처리할 수 없기 때문에, 별도로 위치 임베딩(Positional Encoding)을 추가해야 함.
    • 기존 방식(절대적 위치 임베딩)은 문맥 길이가 길어질수록 성능이 저하되는 문제가 있음.
    • RoPE는 이를 해결하기 위해 토큰 간의 상대적 위치 정보를 회전 변환(rotation transformation) 방식으로 인코딩하는 새로운 접근법이다.
  • 동작 원리 : 
    • 각 단어의 벡터에 회전 변환(Rotation Transformation)을 적용한다.
    • 특정 위치에 있는 단어일수록 벡터 회전 각도가 달라지며, 이로 인해 상대적 위치 정보가 내재됨.
    • Query와 Key 벡터가 동일한 회전 변환을 받으므로, Self-Attention에서 상대적 위치 정보가 유지됨.

 

MLP 계층에서는 SwiGLU 활성화 함수를 사용하며, 각 MLP 및 Attention 계층 전에 RMSNorm을 적용하여 입력을 정규화한다. 또한, 입력 임베딩과 출력 선형 변환 계층 간의 파라미터를 공유하여 모델 크기를 줄였다. 이러한 임베딩 공유(parameter tying) 방식은 모델 크기를 감소시킬 뿐만 아니라, Granite 3.0 모델에서 성능에 부정적인 영향을 주지 않고 오히려 긍정적인 영향을 미치는 것으로 관찰되었다.

(SwiGLU 설명)

더보기

Swish Activation Function

ReLU&Swish Activation Function

개념 : 

  • Google에서 제안한 비선형 활성화 함수로, 기존 ReLU 대비 연속적이고 부드러운 변환을 통해 표현력을 향상시키는 특성을 가진다.
  • 입력과 시그모이드(Sigmoid, σ) 함수의 곱으로 정의되며, 입력 값을 (0,1) 범위로 정규화하는 역할을 수행한다.
  • 비선형성과 기울기 흐름(Gradient Flow)의 최적화를 동시에 고려하는 활성화 함수로, 딥러닝 모델의 성능을 향상시키는 효과가 입증되었다.

특징 :

  • 부드러운 비선형(Smooth Non-linearity):
    • ReLU처럼 급격하게 0으로 변하지 않고, 매끄럽게 활성화 값이 조정.
    • 활성화 함수가 미분 가능하여 학습이 원활하게 이루어짐.
    • 입력이 증가할수록 선형적으로 증가하지만, 특정 구간에서는 부드럽게 0에 가까워지는 특성.
    • 신경망이 더 자연스럽게 최적화를 수행할 수 있도록 도움을 줌.
  • ReLU 대비 향상된 표현력 :
    • ReLU는 음수 입력 값을 0으로 제한하여 일부 정보 손실이 발생하지만, Swish는 음수 입력도 작은 값으로 유지하여 정보 손실을 줄임.
    • 작은 음수 입력을 억제하면서도 완전히 제거하지 않음으로써 모델의 학습 안정성을 증가.
  • 자기 게이팅(Self-Gating) 메커니즘 : 
    • Swish는 입력 값 x가 클수록 활성화가 강해지고, 작을수록 활성화가 약해지는 자기 게이팅(Self-Gating) 메커니즘을 가짐.
      • x가 큰 값일 경우 : 
        • 시그모이드 값 σ(x)가 거의 1에 가까워지므로, Swish는 x⋅1=x와 같이 동작 → 거의 원본 값 유지 (강한 활성화)
      • x가 0 근처 값일 경우 : 
        • 시그모이드 값 σ(x)가 0.5 정도가 되므로, Swish는 x⋅0.5처럼 작아짐 → 활성화가 부분적으로 억제됨
      • x가 작은 값일 경우 : 
        • 시그모이드 값 σ(x가 0에 가까워지므로, Swish는 x⋅0 처럼 0에 가까워짐 → 거의 억제됨 (하지만 완전한 0은 아님)
    • 신경망이 보다 세밀한 가중치 조정을 가능하게 하여 일반적인 ReLU보다 더 정교한 특징 학습을 수행할 수 있도록 함.
  • 기울기 흐름(Gradient Flow) 개선 : 
    • 기울기 소실(Gradient Vanishing) 문제를 완화하고, 더 원활한 학습 가능.
    • 기울기 흐름을 부드럽게 만들어 딥러닝 모델의 학습 안정성을 높이는 효과 있음.
    • ReLU는 음수 값에서 기울기가 0이 되어 학습이 멈출 수 있음 (Dying ReLU 문제).
    • Swish는 음수 값에서도 작은 기울기를 유지하므로, 학습이 지속적으로 이루어질 수 있음.
    • 더 깊은 신경망에서도 기울기 소실 문제를 완화할 수 있음.

Gated Linear Unit(GLU) 

게이팅 메커니즘(Gating Mechanism)을 활용하여 입력 정보를 선택적으로 활성화하는 신경망 구조이다.

기존의 Fully Connected Layer(FFN)와 비교했을 때 불필요한 뉴런을 억제하고 중요한 정보만 선택적으로 활성화하는 방식으로, 연산량을 줄이면서도 모델의 성능을 향상시킨다.

Transformer 기반 모델의 Feedforward Network(FFN)를 최적화하는 데 활용되며, Mixture of Experts(MoE) 및 SwiGLU 등 최신 모델에서도 사용된다.

개념 : 

  • 기존 FFN(Feedforward Neural Network) 구조에 게이트(Gate)를 적용하여 입력 뉴런의 활성화를 조절하는 방식을 적용한 신경망 구성 방식.
  • 일반적인 FFN에서는 입력 벡터 X가 선형 변환(Linear Transformation) 후 활성화 함수(Activation Function)를 통과하여 출력이 생성.
  • GLU는 입력 벡터를 두 개의 분기로 나누고, 한쪽에는 시그모이드(Sigmoid) 함수를 적용하여 게이팅(Gating) 역할을 수행.

특징 :

  • Gated Mechanism : 
    • 일반적인 FFN에서는 모든 뉴런이 동일하게 활성화되지만, GLU는 게이팅을 통해 특정 뉴런만 활성화하도록 유도.
    • 시그모이드 활성화 함수(σ(x))를 사용하여 각 뉴런이 활성화될 확률을 조절함.
    • 불필요한 정보는 억제하고, 중요한 정보만 유지하는 역할을 수행하여 연산 효율을 증가시킴.
  • 원소별 곱 : 
    • 입력 벡터를 두 개의 경로로 분리하고, 하나는 정보 전달 경로, 다른 하나는 게이트 역할을 수행.
    • 게이트를 통과한 값과 원본 정보를 원소별 곱(⊙)하여 최종 출력을 생성.
    • 이 방식은 불필요한 뉴런을 제거하고, 중요한 뉴런만 활성화하여 연산량을 줄이는 데 도움을 줌.
  • 기존 FFN 대비 연산량 최적화 : 
    • 기존 FFN에서는 모든 뉴런이 동일한 방식으로 활성화됨 → 비효율적인 연산 발생.
    • GLU는 게이팅을 활용하여 필요하지 않은 뉴런을 억제함으로써 연산량을 줄임.
    • Transformer의 FFN을 GLU로 대체하면 모델 크기를 줄이면서도 성능을 유지할 수 있음.
  • 기울기 흐름(Gradient Flow) 최적화 : 
    • GLU는 시그모이드 함수를 사용하여 기울기 흐름을 조절하고, 뉴런의 활성화 강도를 동적으로 조정할 수 있음.
    • 기울기 소실(Gradient  Vanishing) 문제를 줄이고, 신경망이 보다 깊은 구조에서도 안정적으로 학습할 수 있도록 도움을 줌.

동작 원리 : 

  •  수식 : 
    • : 입력 벡터
    • W_{1},W_{2}: 학습 가능한 가중치 행렬
    • σ(x) : 시그모이드(Sigmoid) 활성화 함수
    •  : 원소별 곱(Element-wise Multiplication)
    • XW_{1}는 기본 정보 경로, XW_{2}는 활성화 게이트 역할을 수행하며, 게이트를 통해 특정 뉴런을 억제하거나 활성화하는 메커니즘을 갖는다.
  • Step 1. 입력 분리 및 선형 변환 : 
    • 입력 벡터 X를 두 개의 선형 변환(Linear Transformation) 수행.
    • XW_{1} → 기본 정보 경로 (정보 유지)
    • XW_{2} → 게이트 역할 (Sigmoid 활성화 적용)
  • Step 2. Sigmod 함수 적용 : 
    • 두 번째 변환된 벡터에 시그모이드 활성화 함수 적용.
    • G=σ(XW_{2}) : 값은 0~1 사이의 값이므로, 이를 게이트(문)로 사용하여 중요 정보만 통과.
  • Step 3. 원소별 곱(Element-wise Multiplication) 수행 : 
    • 시그모이드로 게이팅된 값과 첫 번째 변환된 값을 곱하여 최종 출력 생성.
    • 값이 1에 가까운 경우, XW_{1}의 정보가 온전히 유지.
    • G 값이 0에 가까운 경우, XW_{1}의 정보가 차단됨.

SwiGLU(Swish-Gated Linear Unit)

Granite 3.0에서는 MLP(Feedforward Network, FFN) 계층에서 SwiGLU 활성화 함수를 사용하여 성능을 최적화한다.

Swish 활성화 함수와 Gated Linear Unit(GLU) 구조를 결합한 방식이다.

Transformer 기반 모델에서 Feedforward Network(FFN)를 최적화하여 연산량을 줄이면서도 높은 성능을 유지할 수 있도록 개발된 활성화 함수이다.

 개념 : 

  • Swish Activation Function : 
    • 기존 ReLU와 달리, 입력 값을 부드럽게 변형하여 표현력을 증가시키는 활성화 함수.
    • Swish(x) = x · σ(x) ( σ(x)는 sigmoid 함수)
  • Gated Linear Unit(GLU) 구조 : 
    • 입력 데이터를 두 개의 분기로 나눈 후, 하나는 Swish 함수를 적용하고, 다른 하나는 그대로 유지한 후 원소별 곱(Element-wise Multiplication)을 수행).
  • 기존 GLU의 게이팅 메커니즘에서 σ(XW_{2})(Sigmoid 게이트)를 Swish(XW_{1})로 대체한 구조.

특징 : 

  • 수식 : 
    • : 입력 벡터
    • W_{1},W_{2}: 학습 가능한 가중치 행렬
    • Swish(x)=x⋅σ(x) : Swish 활성화 함수 입력 벡터 XX를 두 개의 선형 변환(Linear Transformation) 수
    •  : 원소별 곱(Element-wise Multiplication)
  • Swish 활성화 함수 적용 : 
    • 입력이 0보다 클 때 선형적으로 증가하지만, 특정 구간에서는 부드럽게 0에 가까워지는 특성을 가짐.
    • ReLU처럼 갑자기 0으로 잘리지 않으며, 부드러운 활성화 곡선을 제공하여 정보 손실을 줄임.
    • 기울기 흐름(Gradient Flow)이 원활하여 학습 안정성이 높아짐.
    • ReLU보다 더 부드러운 활성화 곡선을 제공하여 정보 손실을 최소화하며, 이로 인해 Dying ReLU 문제를 해결하고 더 정교한 학습이 가능하다.
  • Gated Mechanism (GLU 구조 적용)
    • 입력 벡터를 두 개의 경로로 나누고, 하나는 활성화된 정보 경로, 다른 하나는 게이팅 역할을 수행.
    • Swish를 적용한 XW_{1}과 원본 XW_{2}를 곱하여, 중요한 정보만 선택적으로 활성화.
    • 불필요한 정보는 자연스럽게 억제되며, 모델의 연산 효율성이 증가.
    • GLU의 게이팅 메커니즘 덕분에 중요한 정보만 남기고, 불필요한 정보는 차단하는 방식으로 최적화가 가능하다.
  • 기존 FFN 대비 연산 최적화 : 
    • 기존 FFN보다 불필요한 계산을 줄이고, 중요한 정보만 유지하여 연산량을 최적화.
    • Transformer 모델의 FFN 구조를 SwiGLU로 대체하면 모델 크기와 연산량을 줄이면서도 성능을 유지할 수 있음.
  • 기울기 흐름(Gradient Flow) 최적화 : 
    • SwiGLU는 Swish와 GLU의 특성을 결합하여, 기울기 흐름을 조절하고 뉴런의 활성화 강도를 동적으로 조정할 수 있음.
    • 기울기 소실(Gradient Vanishing) 문제를 줄이고, 신경망이 보다 깊은 구조에서도 안정적으로 학습할 수 있도록 도움을 줌.

동작 원리 : 

  • SwiGLU는 입력 값이 게이트를 통과하면서 특정 뉴런은 활성화되고, 특정 뉴런은 억제되는 방식으로 동작한다.
  • Step 1.입력 분리 및 선형 변환 : 
    • 입력 벡터 X를 두 개의 선형 변환(Linear Transformation) 수행.
    • → Swish 활성화 함수 적용
    • XW_{2} → 게이트 역할 (정보 유지)
  • Step 2. Swish 활성화 함수 적용 :
    • 첫 번째 변환된 벡터에 Swish 활성화 함수 적용.
    • A=Swish(XW_{1})=XW_{1}σ(XW_{1})
    • 는 Sigmoid 함수로, Swish는 부드러운 활성화를 제공.
  • Step 3. 원소별 곱(Element-wise Multiplication) 수행 :
    • Swish 활성화된 값과 두 번째 변환된 값을 곱하여 최종 출력 생성.
    • SwiGLU(X)=AXW_{2}
    • Swish를 적용한 값과 원본 정보를 원소별 곱하여 게이팅 효과를 적용.

(RMSNorm 설명)

더보기

RMSNorm(Root Mean Square Normalization)

LayerNorm의 계산량을 줄이면서도 비슷한 정규화 효과를 내는 방법이다.

LayerNorm이 평균과 분산을 사용하여 정규화하는 반면, RMSNorm은 평균을 제거하지 않고 RMS(Root Mean Square) 값만을 이용하여 정규화한다.

이를 통해 계산 효율성을 높이고, 학습 안정성을 개선할 수 있다.

개념 : 

  • RMSNorm은 뉴런의 입력 벡터를 정규화하는 기법이다.
  • 입력 값의 크기를 정규화하여 학습 안정성 향상.
  • LayerNorm보다 계산량을 줄여 더 효율적인 연산 가능.
  • 모델 학습 시 특정 뉴런이 너무 큰 값을 가지는 현상을 방지.
  • LayerNorm과 비슷한 역할을 하지만, 평균 제거를 하지 않는다는 점에서 차이점이 있다.

특징 : 

  • 평균 제거 없음 → LayerNorm은 평균을 제거하지만, RMSNorm은 평균을 고려하지 않고 크기(RMS)만 정규화.
  • 계산량 감소 → 평균과 분산을 계산할 필요가 없어서 LayerNorm보다 빠름.
  • 메모리 사용량 감소 → LayerNorm보다 연산량이 적어 메모리 효율성이 높음.
  • 모델 성능 유지 또는 향상 가능 → 대규모 모델에서 LayerNorm보다 더 안정적인 성능을 보일 수 있음.

수식 : 

  •  RMS(x) : rms 계산 값.
  • d : 입력 벡터 차원 수.
  •  x-hat : 정규화가 수행된 값.
  • ϵ : 수치적 안정성을 위한 작은 값(ex. 1e-5).
  • y : 스케일링이 적용된 RMSNorm 최종 값.
  • : 학습 가능한 스케일링 파라미터

동작 원리 : 

  • Step 1. 입력 벡터의 RMS 값 계산 : 
    • 입력 벡터의 각 요소를 제곱한 후, 루트를 취함.
  • Step 2. RMS 값으로 정규화 : 
    • 입력 벡터를 RMS값으로 나누어 크기를 조정.
  • Step 3. 스케일링 적용 : 
    • 학습 가능한 파라미터 γ\gamma를 곱하여 정규화된 출력을 생성.

(parameter tying 설명)

더보기

Parameter Tying 

딥러닝 모델에서 여러 레이어 또는 연산에서 동일한 가중치를 공유하여 모델의 메모리 사용량을 줄이고, 학습을 안정화하는 방법이다.

모델의 가중치 수를 줄일 수 있으며, 학습 시 동일한 가중치를 공유하기 때문에 더 일관된 표현을 학습할 수 있다.

같은 가중치를 반복적으로 학습하고 적용하여 모델의 크기를 줄이고, 학습을 안정적이고 효율적으로 수행하는 방법이다.

Transformer 기반 모델이나 대규모 신경망에서 사용되며, 계산량과 메모리 사용량을 줄이는 데 효과적이다.

개념 : 

  • 일반적으로 신경망 모델에서는 각 층(layer)마다 별도의 가중치 행렬을 학습하지만, Parameter Tying을 적용하면 동일한 가중치를 여러 곳에서 재사용할 수 있다.
  • 입력 임베딩(Input Embedding)과 출력 선형 변환(Output Linear Transformation)을 동일한 행렬을 공유(Parameter Tying)하는 방식을 사용하여 모델의 메모리 효율성을 높이고, 계산량을 최적화한다.
  • 입력 임베딩(Input Embedding) : 
    • 텍스트 데이터를 뉴럴 네트워크에서 처리할 수 있도록 벡터로 변환하는 과정.
    • 각 단어(토큰)를 정수 인덱스로 변환한 후, 사전에 학습된 임베딩 행렬을 사용하여 벡터를 가져옴.
  • 출력 선형 변환(Output Linear Transformation) : 
    • Transformer의 마지막 디코더 층에서 나온 출력을 단어 분포로 변환하는 과정.
    • 출력 벡터를 단어 사전(vocabulary) 크기의 확률 분포로 변환하기 위해 선형 변환(linear transformation)을 수행하고, 소프트맥스(Softmax)를 적용.

특징 : 

  • 모델의 메모리 사용량 감소 : 
    • 동일한 가중치를 여러 레이어에서 사용하므로 불필요한 파라미터가 줄어듦.
  • 연산 효율성 증가 : 
    • 학습 시 동일한 가중치를 공유하므로 계산량이 줄어들고, 학습 속도가 빨라질 수 있음.
  • 일관된 표현 학습 가능 : 
    • 같은 가중치를 공유함으로써 학습이 더 일관되게 진행됨.
  • 과적합 방지 : 
    • 불필요한 파라미터를 줄여 모델이 과적합되는 것을 방지하는 데 도움을 줄 수 있음.

수식 : 

  • 입력 임베딩 :
    • W_{emb} : 입력을 벡터로 변환하는 임베딩 행렬
    • x : One-hot 인코딩된 입력 벡터
    • h : 임베딩 벡터
  •  출력 가중치와 임베딩 행렬 공유 : 
    • 일반적으로 출력층에서는 새로운 가중치 행렬 W_{out}을 사용하는데, Parameter Tying을 적용하면 W_{out} 대신 W_{emb}^T 를 사용할 수 있음.
    • 입력 임베딩 행렬과 출력 가중치 행렬을 동일하게 설정하여 파라미터 수를 줄이고, 모델의 효율성을 높일 수 있음.

동작원리 : 

  • Step 1. 입력 임베딩 변환 : 
    • 입력된 단어 인덱스 x를 One-hot 벡터로 변환하거나 직접 인덱스를 사용.
    • 이를 기반으로 W_{emb}에서 해당하는 임베딩 벡터를 추출.
    • h = W_{emb} ⋅ x
  • Step 2. Transformer 연산 : 
    • 변환된 입력 h는 Transformer 블록을 통과하면서 연산.
    • 디코더의 마지막 층에서 출력 벡터 z가 생성됨.
  • Step 3. 출력 선형 변환 및 소프트맥스 적용 : 
    • Transformer의 최종 출력 z에 대해 출력 선형 변환을 수행하여 단어 logits 계산.
    • Softmax를 적용하여 확률 분포를 생성.

 

2.2 Mixture-of-Expert Models

Granite 3.0의 1B 및 3B MoE 모델은 Granite Dense 모델과 유사한 아키텍처를 사용하지만, MLP(다층 퍼셉트론, Multi-Layer Perceptron, FFN) 레이어가 MoE 레이어로 대체되었다. MoE 레이어는 N 개의 모듈 (Expert;전문가) f_{1},…,f_{N} 과 라우터 g(e∣x)로 구성된다. 입력 x가 MoE 레이어에 주어지면, 라우터는 N 개의 모듈에 대한 확률 분포를 예측한다. 

 

이후, 확률이 높은 상위 k 개의 전문가(Experts)를 선택하여 연산을 수행한다. 만약 k<N 인 경우, 우리는 희소 전문가 혼합(Sparse Mixture of Experts, SMoE) 구조를 사용한 것이며, 이는 Shazeer et al. (2017)에서 제안된 방식이다. 본 Granite MoE 모델 시리즈에서는 라우터를 선형(Linear) 레이어로 모델링한다 : 

( Sparse Mixture of Experts, SMoE 설명)

더보기

Sparse Mixture of Experts, SMoE
Mixture of Experts (MoE) 모델의 일종으로, 여러 전문가(Experts) 중 일부만 활성화하여 연산을 수행하는 방식이다.

모든 전문가(FFN)를 사용하는 것이 아니라, 가장 적합한 일부 전문가만 선택하여 연산을 수행함으로써 연산량을 절감하고 성능을 유지하는 구조이다.
핵심 개념 : 

  • MoE 모델은 기본적으로 다수의 전문가(Experts)와 라우터(Router)로 구성되며, SMoE에서는 전문가 중 일부(Top-k)만 활성화하여 Sparse(희소한) 연산을 수행한다.
  • 주요 구성 요소 : 
    • 전문가(Experts) : 
      • 여러 개의 독립적인 FFN(MLP)으로 구성됨.
      • 각 전문가가 서로 다른 패턴을 학습함.
      • Granite 1B MoE에서는 총 32개의 전문가가 존재.
    • 라우터(Router) : 
      • 입력을 기반으로 어떤 전문가를 활성화할지 결정하는 역할 수행.
      • 일반적으로 Softmax를 사용하여 확률을 계산한 후, Top-k 전문가를 선택.
      • Granite 1B MoE에서는 32개 중 8개만 활성화됨.

장점 : 

  • 연산량 감소(Computational Efficiency): 
    • 모든 전문가가 아닌 일부 전문가만 연산을 수행하여 계산 비용 절감.
    • 모델을 확장할 때도 연산량이 크게 증가하지 않음.
  • 모델 확장성 증가(Scalability) : 
    • 전문가의 개수를 늘리면서도 실제 연산량은 유지할 수 있음.
    • GPT-4, DeepSpeed-MoE, Switch Transformer 등 대형 모델에서 활용.
  • 전문가별 특화 학습 가능(Scalability) : 
    • 각 전문가가 특정한 패턴을 학습하여 더 강력한 표현력을 가짐.
    • Granite MoE에서 32개의 전문가 중 8개만 활성화하는 방식으로 학습 효율을 높임.

단점 : 

  • 전문가 불균형 문제(Expert Imbalance) : 
    • 일부 전문가가 과도하게 활성화되고, 일부는 거의 사용되지 않는 문제 발생.
  • 추가적인 라우팅 비용(Routing Overhead) : 
    • 라우터가 전문가를 선택하는 과정에서 추가적인 연산 비용이 발생.

라우터 수식 설명

라우터는 입력 데이터를 분석하고 적절한 전문가(Experts)들을 선택하는 역할을 수행하는 선형 레이어이다.

라우터의 선형 변환 :

  • s = W_{router^x} 
  • X : 입력 벡터
  • W_{router} : 라우터의 가중치 행렬
    입력 x를 전문가(Experts)들에게 매핑하기 위한 학습 가능한 가중치 행렬.
  • s : 전문가 점수 벡터(logits)
    각 전문가(Expert)에 대한 점수를 포함하는 벡터로, 입력 x를 가중치 행렬 W_{router}에 곱하여 얻음.
    s 벡터의 각 요소 s_{i}입력 x가 전문가 i에게 얼마나 적절한지를 나타냄.

전문가 선택 및 확률 계산 :

  • Topk(s) : 전문가 활성화 개수 수식
    벡터 s에서 가장 큰 k개의 값을 선택하는 연산.
    점수가 높은 상위 k개의 전문가(Expert)만 활성화 됨.
    Granite MoE 모델은 k=8로 설정됨.
  • Softmax 적용 :
    선택된 k개의 전문가에 대해 Softmax 연산을 수행하여 확률을 계산.
    선택된 전문가들에 대해서만 확률값이 부여되며, 나머지 전문가에 대해서는 확률이 0이 됨.
  • g(e|x) : 전문가 선택 확률 :
    입력 x가 전문가 e를 활성화할 확률을 의미함.
    s_{i}가 Top-k에 포함되면, softmax를 적용하여 확률을 할당.
    s_{i}가 Top-k에 포함되지 않으면, 확률이 0이 되어 해당 전문가의 연산이 수행되지 않음.

여기서 W_{router} 는 전문가 임베딩 행렬(Expert Embedding Matrix) 이며, 그 크기는 (N,Demb)이다. 또한, Topk 연산자는 s 에서 가장 높은 k 개의 로짓(logits)을 선택하는 역할을 한다. 이후, 희소 전문가 혼합(SMoE, Sparse Mixture-of-Experts)의 최종 출력은 다음과 같이 정의된다.

더보기

Sparse Mixture of Experts (SMoE) 모델의 최종 출력

각 항목의 의미 :

  • f_{e}(X) : 전문가 연산 결과
    e번째 전문가가 입력 x에 대해 수행한 연산 결과.
    각 전문가 f_{e}는 MLP와 같은 구조를 가짐.
    f_{e}는 해당 전문가의 FFN을 통과한 출력.
  • g(e|x) : 전문가 선택 확률(Routing Probability)
  • 합산 연산 : 
    모든 전문가 e에 대해 확률 g(e|x)와 연산 결과 f_{e}(X)를 곱한 후 합산하여 최종 출력을 생성.

일 때, fe(x) 는 평가할 필요가 없으므로, 학습 및 추론 과정에서 연산 비용이 감소한다.

Granite MoE 모델의 주요 설계 원칙은 다음과 같이 요약된다 :

  • Dropless Token Routing : 
    각 토큰은 독립적으로 전문가(Experts)를 선택하므로, 일부 전문가가 다른 전문가보다 더 많은 토큰을 할당받을 수 있다.이전 MoE 모델들(Switch Transformer, Fedus et al., 2022 및 Deepseek-V2, Liu et al., 2024a)에서는 각 전문가 또는 디바이스에 토큰 처리 용량(capacity cap)을 설정하고, 이 용량을 초과하는 추가 토큰을 삭제(drop)하는 방식을 사용했다. 그러나 Gale et al. (2023) 연구에서는, 이러한 토큰 삭제가 모델 학습 안정성과 손실(Loss)에 부정적인 영향을 미친다는 점을 관찰했다. 이에 따라, Granite MoE 모델의 학습에서는 ScatterMoE (Tan et al., 2024) 를 사용하여 토큰 삭제 없이(Dropless) MoE를 구현하고, 이 방식으로 토큰 손실을 방지하며 학습 효율을 향상시켰다.
  • Fine-grained Experts :
    최근 연구(Krajewski et al., 2024; Dai et al., 2024)에 따르면, MoE 모델에서 전문가(Expert)의 크기를 기존의 FF 레이어와 동일하게 설정하는 것은 최적의 방식이 아니다. 대신, 전문가의 세분화 수준을 높이고(Fine-grained Experts), 전문가의 수를 증가시키며(Number of Experts), 활성화되는 전문가의 수를 늘리면(Number of Activated Experts), 더 많은 전문가 조합이 가능해지면서 모델 성능이 향상될 수 있음이 제안되었다. 이러한 연구 결과를 반영하여, Granite 3.0 MoE 모델에서는 보다 세분화된 전문가(Fine-grained Experts)와 더 많은 활성화된 전문가를 사용한다. 구체적으로,
    • 1B MoE 모델에서는 32개의 전문가 중 상위 8개(Top-k=8)를 활성화하고,
    • 3B MoE 모델에서는 40개의 전문가 중 상위 8개(Top-k=8)를 활성화한다.
      더보기
      Granite 3.0 1B MoE 모델일 경우 Granite 3.0 dense 모델의 FFN 구조가 32개의 FFN을 가지는 MoE 구조로 대체되며, 한 번의 연산에 8개의 FFN만을 선택하는 구조이다.
  • Load Balancing Loss :
    토큰이 항상 동일한 전문가에게 라우팅되는 현상을 방지하고, 다른 전문가들의 여유 용량이 낭비되지 않도록 하기 위해, 우리는 Fedus et al. (2022) 에서 제안한 빈도 기반 보조 손실(Frequency-Based Auxiliary Loss) 을 적용한다. 이 손실 함수는 다음과 같이 정의된다(formula 1. 참조).
    formula 1. Frequency-Based Auxiliary Loss

    더보기
    빈도 기반 보조 손실 수식(Frequency-Based Auxiliary Loss)
    MoE(Mixture-of-Experts) 모델에서 특정 전문가가 지나치게 자주 선택되는 문제를 완화하는 역할을 한다.
    각 전문가에 할당된 실제 토큰 비율(f_{i})과 라우터가 예측한 확률(P_{i}) 간의 관계를 평가한다.
    특정 전문가에게 과도하게 많은 토큰이 몰릴 경우, 이 값이 커지면서 손실이 증가한다.
    모든 전문가가 균등하게 선택되면 L_{b}  값이 작아지고, 손실이 감소하여 균형 잡힌 전문가 분배가 이루어진다.
    역할 : 
    • 특정 전문가에게만 토큰이 과도하게 몰리는 현상을 방지.
    • 라우터가 전문가를 균등하게 활용하도록 유도.
    • 불균형한 전문가 활용을 방지하여 모델의 일반화 성능을 향상.
      각 전문가에게 균등하게 토큰이 분배되도록 강제하여 "로드 밸런싱(Load Balancing)"을 유도하는 역할.

    수식 설명 : 
    • N : 전문가의 개수
    • f_{i} : 
      실제 전문가 i가 처리한 토큰의 비율을 의미함.
      각 전문가가 전체 입력 중 얼마나 많은 토큰을 처리했는지 비율로 나타낸 값.
    • f_{i} = (전문가 i가 처리한 토큰 수)/(전체 토큰 수)
    • P_{i} : 
      라우터가 전문가 i에 할당한 확률의 비율을 의미함.
      라우터가 특정 전문가에게 토큰을 보낼 확률을 계산한 값.
      특정 전문가가 얼마나 자주 선택될 가능성이 높은지를 나타냄.
    • P_{i} = (라우터가 전문가 i를 선택한 확률 합)/(전체 전문가 선택 확률 합)
    여기서 N 는 전문가(Experts)의 수를 의미한다. f_{i}는 전문가 i에 할당된 토큰의 비율이다. P_{i}는 라우터가 전문가 i에 할당한 확률의 비율이다. 이 손실 함수는 특정 전문가의 과도한 사용을 패널티로 부과하여, 전문가 간 부하를 '균형 조정' 한다. 또한, 모델 학습 안정성을 개선하기 위해, 우리는 Zoph et al. (2022) 에서 제안한 라우터 Z-손실(Router Z-Loss) 도 함께 사용한다(formula 2. 참조).
    formula 2. router z-loss
    더보기
    라우터 Z-손실 수식(Router Z-Loss)
    Mixture of Experts (MoE) 모델에서 라우터(Router)가 극단적인 확률 분포를 출력하는 것을 방지하기 위해 추가하는 정규화 손실 항이다.
    라우터가 특정 전문가(Expert)만을 과도하게 선택하는 현상을 줄이고, 보다 균형 잡힌 전문가 활용을 유도하는 역할을 한다.
    역할 : 
    • Granite 3.0 MoE 모델에서 라우터(Router)는 각 토큰을 특정 전문가(Expert)에게 할당하는 확률을 계산.
    • Router Z-Loss는 이 확률값이 너무 극단적으로 0 또는 1에 수렴하지 않도록 정규화.
    • 라우팅 확률이 지나치게 확신(confident)하지 않도록 조절
    • 모든 전문가가 균형 있게 활용될 수 있도록 유도
      라우터의 출력을 정규화하여 학습을 안정화하고, 전문가들이 더욱 고르게 활용될 수 있도록 유도하는 역할

    수식 설명 : 
    • B : 토큰 개수
    • N : 전문가의 개수
    • x : 라우터가 출력한 Logits
    • x_{j}^i : i번째 토큰이 j번째 전문가에게 할당된 라우팅 점수(Logits)
    • ∑exp(x_{j}^i)_{j=1}^N : Softmax 연산의 분모 부분
    • log∑exp(x_{j}^i)_{j=1}^N : 라우터가 출력한 전문가 선택 확률의 log-sum-exp 변환
    여기서 B 는 토큰의 개수이며, x 는 라우터(Router)가 출력한 로짓(Logits) 을 의미한다.최종 손실 함수는 언어 모델 손실(Language Model Loss)과 두 개의 보조 손실(Auxiliary Losses)의 가중 합으로 정의된다. 이 손실 함수는 라우터의 로짓 값이 극단적인 값을 가질 경우 패널티를 부과하여, 라우터가 학습 과정에서 더 적절하게 적응할 수 있도록 돕고, 전문가(Expert)를 보다 효과적으로 할당할 수 있도록 한다.
    더보기
    최종 손실 함수
    기본적인 언어 모델 손실에 Load Balancing Loss  Router Z-Loss 를 추가하여 MoE 모델이 더 균형 잡힌 학습을 할 수 있도록 설계됨.
    수식 설명 : 
    • L_{LM} : 언어 모델의 기본 손실 함수
    • L_{b} : Frequency-Based Auxiliary Loss
    • L_{z} : Router Z-Loss
    • λ_{z} : Router Z-Loss의 가중치

3. 학습 데이터(TRAINING DATA)

 

Granite 3.0 언어 모델은 IBM이 선별한 웹상의 비정형 자연어 텍스트 및 코드 데이터, IBM이 생성한 합성 데이터셋 모음,적절한 라이선스를 가진 공개적으로 이용 가능한 고품질 데이터셋 등 다양한 출처의 데이터를 활용하여 학습된다.

거버넌스를 위해, 우리의 데이터는 기술적, 비즈니스적, 거버넌스적 검토를 거치는 데이터 승인 절차(Data Clearance Process) 를 거친다. 이 포괄적인 과정에서는 데이터의 내용 설명, 소유권, 의도된 사용 목적, 데이터 분류, 라이선스 정보, 사용 제한, 데이터 획득 방법, 개인정보 및 민감한 정보 평가(예: 개인 정보 포함 여부) 등을 포함한 중요한 정보를 수집한다.

 

코드 데이터의 경우, 우리는 각 코드 파일에 해당 저장소의 라이선스 정보를 주석(annotation)으로 추가하며, GitHub API를 통해 라이선스를 확인하고 허용된 라이선스를 가진 파일만 모델 학습에 사용한다. 또한, IBM의 URL 차단 목록과 일치하는 출처에서 가져온 모든 데이터를 필터링하여 제외한다. 아래에서는 데이터 처리 단계에 대한 간략한 개요를 제공하며, 각 학습 단계에서 사용된 개별 데이터셋에 대한 자세한 내용은 부록 B.1(Appendix B.1) 을 참고한다.

(Appendix B.1)

더보기

B.1 사전 학습 데이터 (Pre-training Data)

본 섹션에서는 Granite 3.0 모델의 사전 학습(Pre-training) 과정에서 사용된 데이터셋을 설명함.
모델의 학습을 위해 다양한 출처의 데이터가 사용되었으며, 이를 범주별로 나누어 정리함.

특정한 속성을 가진 데이터셋을 구분하기 위해 다음과 같은 태그를 사용함.

  • P1: 1단계 사전 학습(Stage 1 Pre-training)에서 사용된 데이터셋
  • P2: 2단계 사전 학습(Stage 2 Pre-training)에서 사용된 데이터셋
  • ML12: 12개 언어(영어, 독일어, 스페인어, 프랑스어, 일본어, 포르투갈어, 아랍어, 체코어, 이탈리아어, 한국어, 네덜란드어, 중국어)로 구성된 데이터셋
  • IBM-Curated: IBM이 직접 선별한 데이터셋
  • IBM-Synthetic: IBM이 생성한 합성 데이터(Synthetic Data)

B.1.1 웹 데이터 (Web)

사용된 데이터셋 및 설명

  • FineWeb (P1)
    • 15조 개 이상의 토큰으로 구성된 고품질 영어 웹 데이터셋.
    • CommonCrawl에서 수집된 데이터를 정제하여 사용함.
  • Webhose (P1, P2, IBM-Curated)
    • IBM이 수집한 웹 콘텐츠로, 머신러닝 학습에 적합한 형태로 변환됨.
  • DCLM-Baseline (P2)
    • 4조 개의 토큰, 30억 개의 문서로 구성된 대규모 학습 데이터셋.
    • 강력한 언어 모델 성능을 보장하는 데이터셋 중 하나로 평가됨.

설명:

웹에서 수집한 방대한 데이터를 활용하여 Granite 3.0을 학습함. FineWeb과 DCLM 데이터셋은 고품질 웹 데이터를 필터링하여 구성되었으며, Webhose는 IBM이 직접 정제한 데이터셋임.

B.1.2 코드 데이터 (Code)

사용된 데이터셋 및 설명

  • Code Pile (P1, P2, IBM-Curated)
    • GitHub Code Clean, StarCoderData와 같은 오픈소스 코드 저장소에서 수집된 코드 데이터셋.
    • 116개 프로그래밍 언어를 포함하며, 라이선스가 허용된 코드만을 학습에 활용함.
  • FineWeb-Code (P2, IBM-Curated)
    • FineWeb에서 코드 관련 문서만 필터링하여 구축한 데이터셋.
    • Mixtral-8x22B 모델을 활용하여 데이터 정제 및 주석(annotation) 작업 수행.
  • CodeContests (P2)
    • 다양한 프로그래밍 대회 문제 및 해결책을 포함한 데이터셋.
    • 정답뿐만 아니라 오답 데이터도 포함되어 있어, 모델이 코드의 오류를 학습하는 데 도움을 줌.

설명:
Granite 3.0은 소프트웨어 개발 및 코드 생성 능력을 향상시키기 위해 대규모 코드 데이터셋을 학습함.
특히, FineWeb-Code는 웹 데이터에서 코드 관련 문서를 선별하여 학습에 활용하는 데이터셋임.

B.1.3 도메인별 데이터 (Domain-Specific Data)

사용된 데이터셋 및 설명

  • USPTO (P1, P2, IBM-Curated)
    • 1975년부터 2023년까지 미국 특허청(USPTO)에 등록된 특허 데이터.
  • Free Law (P1, P2, IBM-Curated)
    • 미국 연방 및 주 법원 판례를 포함하는 공개 법률 데이터.
  • PubMed Central (P1, P2, IBM-Curated)
    • 생물의학(Biomedical) 및 생명과학 논문을 포함하는 대규모 데이터셋.
  • EDGAR Filings (P1, P2, IBM-Curated)
    • 미국 증권거래위원회(SEC)에 제출된 기업 재무 보고서(10-K, 10-Q 등).

설명:
Granite 3.0은 법률, 금융, 생명과학 등 특정 산업에 특화된 데이터를 학습하여 기업 환경에서의 활용성을 높이고자 함.

B.1.4 다국어 데이터 (Multilingual Data)

사용된 데이터셋 및 설명

  • Multilingual Wikipedia (P2, IBM-Curated, ML12)
    • 12개 공식 지원 언어(ML12)로 구성된 위키피디아 데이터.
  • Multilingual Webhose (P2, IBM-Curated, ML12)
    • IBM이 수집한 다국어 웹 데이터.
  • MADLAD-12 (P2, ML12)
    • 419개 언어 중 12개 언어를 필터링하여 구축한 데이터셋.

설명:
Granite 3.0은 주로 영어 데이터를 학습하지만, 다국어 처리를 위해 ML12 언어로 필터링된 고품질 데이터를 추가 학습함.

B.1.5 명령어 데이터 (Instruction Data)

사용된 데이터셋 및 설명

  • Code Instructions Alpaca (P2)
    • 코드 관련 명령어-응답 쌍(Instruction-Response Pairs) 데이터셋.
  • Glaive Function Calling V2 (P2)
    • API 및 함수 호출(Function Calling)과 관련된 데이터셋.
  • Self-OSS-Instruct-SC2 (P2)
    • 오픈소스 소프트웨어와 관련된 명령어 기반 코드 생성 데이터셋.

설명:
Granite 3.0 모델이 사용자 요청(Instruction)에 대한 응답을 보다 정확하게 생성할 수 있도록, 다양한 명령어 기반 데이터셋을 학습함.

B.1.6 학술 데이터 (Academic Data)

사용된 데이터셋 및 설명

  • peS2o (P1, P2)
    • 4,000만 개의 오픈 액세스(Open-Access) 논문 데이터셋.
  • arXiv (P1, P2, IBM-Curated)
    • 과학 및 기술 분야의 사전 공개 논문(Pre-print Papers).

설명:
Granite 3.0은 학술 논문 데이터를 학습하여 과학적 질문에 대한 답변 생성 능력을 향상시킴.

3.1 선별된 웹 데이터(CURATED WEB DATA)

우리는 웹(Web)에서 수집한 방대한 양의 비정형 데이터(Unstructured Data)를 선별하여 구성한다.
이 데이터는 학술(Academic), 기업(Enterprise, 예: 금융, 법률, 생물의학), 코드(Code) 및 기타 공개적으로 이용 가능한 소스에서 얻어진다. 예를 들어, 언어(Language) 데이터의 경우 FineWeb (Penedo et al., 2023), DCLM (Li et al., 2024a) 등의 오픈소스 데이터셋을 활용한다.

코드 데이터의 경우 Github Code Clean, StarCoderdata 등의 데이터셋을 사용한다. 우리가 선별한 웹 데이터의 품질을 보장하기 위해, 다음과 같은 포괄적인 데이터 전처리(Data Preprocessing) 절차를 개발하여 적용한다.

  • Text Extraction : 
    텍스트 추출은 웹에서 크롤링한 비정형 데이터(unstructured data)를 처리하는 첫 번째 단계로, 다양한 문서에서 텍스트를 추출하여 표준화된 형식(Standardized Format)으로 변환하는 과정이다.
    텍스트 추출 후, 우리는 fastText 를 활용하여 문서 수준(Document Level)에서 언어 식별(Language Identification)을 수행하고, 문서의 주요 언어(Dominant Language)를 감지한다. 언어 식별 과정을 통해, 우리는 다음 12개 언어로 주석(Annotated)된 문서만 선별하여 사용한다.

    공식 지원 언어 :
    영어(English), 독일어(German), 스페인어(Spanish), 프랑스어(French), 일본어(Japanese), 포르투갈어(Portuguese), 아랍어(Arabic), 체코어(Czech), 이탈리아어(Italian), 한국어(Korean), 네덜란드어(Dutch), 중국어(Chinese)

    Granite 3.0 모델의 학습 데이터는 주로 영어 데이터로 구성되지만, 다른 11개 언어의 고품질 문서(high-quality documents)를 활용하여 다국어 처리 성능(multilinguality)을 향상시킨다.
  • Deduplication : 
    중복 제거는 데이터셋의 전체 품질을 향상시키기 위해 중복된 문서를 식별하고 제거하는 과정이다. 우리는 (거의) 동일한 콘텐츠를 가진 문서를 제거하기 위해, 정확한 중복 제거(Exact Deduplication)와 유사 중복 제거(Fuzzy Deduplication)를 포함한 강력한 중복 제거 전략을 적용한다.

    정확한 중복 제거(Exact Deduplication) : 
    문서 콘텐츠의 SHA256 해시 값을 계산한 후, 동일한 해시 값을 가진 문서를 제거한다.
    (SHA-256 Hash 설명)
    더보기
    SHA-256 Hash
    입력된 데이터(텍스트, 파일 등)에 대해 256비트(32바이트) 길이의 고유한 해시 값(hash value)을 생성하는 단방향 암호화 함수이다.
    문서의 고유한 식별자(fingerprint)를 생성하는 데 매우 적합하다.
    특징 : 
    • 해시 값의 고정된 길이(Fixed Output Size) : 
      입력 데이터의 크기에 관계없이 항상 256비트(32바이트) 길이의 해시 값을 출력.
    • 단방향 함수(One-Way Function) : 
      해시 값을 통해 원래 입력 데이터를 복원하는 것이 불가.
      암호화와 다르게 복호화가 불가능하며, 원본 데이터를 알 수 없음.
    • 작은 변화에도 완전히 다른 해시 값 생성(Avalanche Effect) :
      입력 데이터에서 단 한 글자만 바뀌어도 출력되는 해시 값이 완전히 달라짐.
      눈사태 효과(Avalanche Effect)라고 하며, 해시 함수의 필수적인 보안 속성 중 하나.
    • 충돌 저항성(Collision Resistance) : 
      서로 다른 두 개의 입력 데이터가 동일한 해시 값을 갖는 경우를 "충돌(Collision)"이라고 함.
      SHA-256은 매우 강력한 충돌 저항성을 가지며, 사실상 동일한 해시 값을 생성하는 두 개의 서로 다른 입력을 찾는 것이 불가능.
    • 높은 계산 속도 및 효율성 :
      SHA-256은 소프트웨어 및 하드웨어 구현이 최적화되어 있으며, 일반적인 컴퓨팅 환경에서 빠르게 실행.
      GPU 및 FPGA(필드 프로그래머블 게이트 어레이)에서도 병렬 연산이 가능하여, 대규모 데이터 처리에 적합.
    유사 중복 제거(Fuzzy Deduplication) :
    1단계: 모든 문서의 MinHash 값을 계산한 후, Locally Sensitive Hashing (LSH)을 사용하여 유사한 문서들을 그룹화한다.
    2단계: 동일한 그룹 내 문서들의 Jaccard 유사도를 측정하여, 설정된 유사도 임계값을 기준으로 중복된 문서를 제거하고 하나의 문서만 유지한다.
    (MinHash, LSH, Jaccard 설명)
    더보기
    MinHash(Minimum Hashing)
    Jaccard 유사도는 두 개의 집합이 공유하는 요소의 비율을 나타내는 지표이지만, 집합이 클 경우 연산 비용이 높아지므로 MinHash를 활용하여 빠르고 효율적으로 유사도를 계산할 수 있다.
    문서를 단어 집합 구조로 변환한 뒤, 여러개의 해쉬 함수를 적용하여 가장 작은 값을 선택하는 방법이다.
    개념 : 
    • 두 집합이 얼마나 유사한지 빠르게 판단하는 방법.
    • 문서(텍스트)를 집합으로 변환한 후, 해쉬 함수를 적용하여 각 집합의 고유한 특징을 추출.
      특징을 비교하여 Jaccard 유사도와 비슷한 결과를 빠르게 계산 가능.
    동작 원리 : 
    • Step1. 문서를 단어(또는 n-그램) 집합(Set)으로 변환 : 
      문서를 단어 집합으로 변환하여 순서가 없는 집합 구조로 만들기.
      문서A = {cat, dog}
    • Step2. 여러 개의 해시 함수를 사용하여 단어들을 해싱 : 
      각 단어에 대해 여러 개의 해시 함수를 적용하여 해시 값을 생성.
      ex. 아래와 같은 해쉬 함수 2개 사용한다고 가정
      단어 Hash1 Hash2
      cat 12 34
      dog 45 23
    • Step3. 각 해시 함수에서 가장 작은 값(Minimum Hash) 선택 : 
      각 문서에서, 해시 값이 가장 작은 값(Minimum Hash)을 선택.
      문서A = {cat, dog} :  MinHash(A) = [12, 23]
    • Step4. MinHash 값을 비교하여 유사도 계산 : 
      MinHash 값이 일치하는 개수를 세어 유사도를 근사적으로 계산.
      ex. 문서 A와 B의 MinHash 값 비교:
      [8, 23, 11] vs [8, 23, 21]유사도 ≈ 2/3 = 0.67 (≈ Jaccard 유사도와 유사한 결과)
      8과 23이 일치 → 2개 일치 / 3개 중
    LSH(Locally Senstive Hashing)
    유사한 데이터를 빠르게 찾기 위해 설계된 해시 알고리즘이다.
    개념 : 
    • 유사한 데이터를 동일한 해시 그룹(bucket)에 저장하여 빠르게 검색 가능.
    • 전체 데이터와 비교하지 않고, 비슷한 데이터끼리만 비교하여 연산량 절감.
    • 대규모 데이터셋에서 빠른 유사 문서 검색 및 중복 제거에 활용.
    동작 원리 : 
    • Step1.  데이터의 특징을 추출 (MinHash 활용) :
      문서를 단어 집합(Set)으로 변환하고, MinHash를 적용하여 각 문서의 해시 값을 생성.
    • Step2. 여러 개의 해시 함수를 사용하여 LSH 버킷 생성 :
      MinHash 값을 여러 개의 해시 그룹(bucket)으로 나눔.
      MinHash 유사도 값이 특정 threshold를 넘는 데이터를 같은 그룹에 저장.
    • Step3. 동일한 LSH 버킷에 속하는 문서들끼리만 Jaccard 유사도 계산 :
      LSH를 통해 유사한 문서를 빠르게 검색한 후, 최종적으로 Jaccard 유사도를 측정하여 중복 문서 여부를 결정.
    Jaccard Similarity
    두 개의 집합 간의 유사도를 측정하는 지표로, 교집합과 합집합의 비율을 이용하여 계산된다.
    두 데이터(문서, 이미지, 문자열 등)가 얼마나 많은 공통 요소를 공유하는지를 평가하는 방법이다.
    공식 개념 :
    •  → 비교할 두 개의 집합.
    •  → 교집합 (두 집합에서 공통으로 등장하는 요소의 개수).
    •  → 합집합 (두 집합에서 등장하는 모든 요소의 개수).

    특징 : 

    •  값은 0 ~ 1 사이의 실수 값을 가짐.
    • 값이 클수록 유사도가 높음.
    •  → 완전히 동일한 데이터
    •  → 완전히 다른 데이터
    •  → 유사한 데이터로 간주 가능

    동작 원리 : 

    • Step1. 입력 데이터의 집합 변환: 
      문서, 문자열, 이미지 등의 데이터를 비교하기 위해 집합 형태로 변환.
    • Step2. 교집합 및 합집합 계산 : 
      두 데이터의 공통된 요소(교집합)를 찾고, 전체 요소(합집합)를 구함.
    • Step3. 유사도 계산 : 
      공식 J(A,B)=∣A∩B∣ / ∣A∪B∣을 적용하여 유사도를 측정.

     

    이러한 유사 중복 제거(near-deduplication) 과정은 언어 데이터와 코드 데이터 모두에 적용되며, 이를 통해 훈련 데이터셋의 풍부함과 다양성을 높인다.
  • HAP 및 악성 코드(Malware) 필터링 :
    모델이 혐오적(Hateful), 폭력적(Abusive), 또는 부적절한(Profane, HAP) 언어를 생성할 가능성을 줄이기 위해, 우리는 훈련 데이터에서 HAP 콘텐츠를 필터링하기 위해 철저한 조치를 취한다.
    우리는 IBM에서 학습된 HAP 탐지 모델을 사용하여 문장 수준에서 HAP 점수(HAP Scores)를 계산하고, 특정 임계값을 초과하는 문서를 제거한다.
    먼저 HAP 관련 키워드 사전을 생성한 후, 문서 내(주석 포함) 해당 키워드의 출현 횟수를 기록하여 주석(Annotation)을 추가한다. 그런 다음, 분포 분석(Distributional Analysis)과 코드 파일의 수동 검사(Manual Inspection)를 기반으로 HAP 임계값을 설정하고, 이를 초과하는 문서를 필터링한다.
    코드 데이터 처리에 대한 자세한 내용은 Mishra et al. (2024) 를 참고한다. 또한, 우리는 ClamAV를 사용하여 데이터셋을 검사하여 악성 코드(Malware)를 탐지 및 제거하며, 특히 소스 코드 내의 악성 코드 포함 여부를 확인한다.
    더보기
    ClamAV
    오픈소스 기반의 안티바이러스(AV) 소프트웨어로, 악성 코드(Malware), 바이러스(Virus), 트로이 목마(Trojan), 웜(Worm) 등을 탐지하고 제거하는 기능을 제공한다.
    Granite Code 모델의 데이터 필터링 과정에서는 코드 데이터셋 내 악성 코드 감지를 위해 ClamAV를 활용한다.
    개념 : 
    -  ClamAV는 C 및 C++로 작성된 오픈소스 안티바이러스 소프트웨어로, Linux, Windows, macOS를 포함한 다양한 운영 체제에서 사용 가능.
    -  주로 서버 환경에서 악성 파일을 탐지하고 필터링하는 목적으로 사용됨.
    -  Granite Code 모델에서는 코드 데이터셋 내 악성 코드 포함 여부를 검사하는 데 활용됨.

    특징 : 
    -  정기적인 바이러스 정의 업데이트 : 바이러스 및 악성 코드 DB가 정기적으로 업데이트됨.
    -  실시간 감시 기능 (ClamOnAcc, ClamD) : ClamD 데몬을 활용하여 실시간 감시 및 자동 삭제 가능.
    -  오픈소스(Open Source) :  GPL 라이선스로 제공되며, 누구나 자유롭게 사용할 수 있음.

    동작 원리(granite) : 
    Step1. ClamAV 기반 악성 코드 탐지 환경 설정 :
    ClamAV를 활용하여 코드 데이터셋 내 악성 코드 포함 여부를 검사함.
    Virus Signature 데이터베이스를 최신 상태로 유지하여, 새로운 악성 코드 및 변종 바이러스를 탐지할 수 있도록 환경을 구성.

    Step2. 코드 데이터셋 내 악성 코드 검사 및 필터링 :
    중복 제거(Deduplication), HAP 필터링, PII 필터링을 수행한 다음 ClamAV를 실행하여 악성 코드 포함 여부를 검사함.
    검출된 악성 코드가 포함된 파일은 훈련 데이터셋에서 즉시 제거.
    악성 코드 패턴을 탐지: 
    - 실행 가능한 바이너리 파일(Executable Binaries)
    - 난독화된 악성 코드(Obfuscated Malware)
    - 시스템 호출을 수행하는 스크립트(ex: os.system(), subprocess.Popen())
    - 네트워크 트래픽을 조작하는 악성 코드

    Step3. 최종 악성 코드 검출 및 데이터셋 정제 :
    GitHub 및 기타 공개 코드 저장소에서 수집된 코드가 모든 필터링 단계를 거친 후, ClamAV를 적용하여 최종 검증을 수행.
    악성 코드 탐지가 완료되면, 검출되지 않은 데이터만 최종적으로 훈련 데이터셋에 포함.
  • Document Quality Filtering : 
    문서 품질 주석(Quality Annotation)은 휴리스틱(Heuristics)과 분류기(Classifier)를 사용하여 언어적 가치가 낮은 문서를 식별하는 것을 목표로 한다. 구체적으로, 우리는 Gopher 품질 필터링 기준(Rae et al., 2021) 을 따르며, 다음과 같은 저품질 문서를 제거한다 : 

    글머리 기호(Bullet Points) 비율이 90%를 초과하는 문서.
    줄바꿈 기호(Ellipsis Line) 비율이 30%를 초과하는 문서.
    기호 대 단어 비율(Symbol-to-Word Ratio)이 10%를 초과하는 문서).
    etc.

    휴리스틱 외에도, 우리는 KenLM 선형 분류기(KenLM Linear Classifier)를 활용한 분류기 기반 필터링(Classifier-Based Filtering)을 적용한다. KenLM은 고품질 문서(예: 위키피디아 문서)로 사전 학습된 모델이며, 각 문서에 대해 훈련 데이터와의 유사도를 나타내는 혼란도(Perplexity) 점수를 제공하여, 모델 학습에 적합한 품질을 평가한다. 또한, 우리는 다음과 같은 휴리스틱을 적용하여 저품질 코드를 필터링한다 (Mishra et al., 2024).
    (KenLM 설명)
    더보기
    KenLM
    빠르고 효율적인 확률 기반 언어 모델 라이브러리이다
    대규모 텍스트 데이터를 다루는 응용 프로그램에서 빠르게 언어 모델을 학습하고 활용할 수 있도록 설계되었다.
    Granite 3.0에서는 문서 품질을 평가하는 Perplexity(혼란도, PPL) 점수를 계산하는 데 사용되었다.
    개념 : 

    - 통계적 언어 모델(Statistical Language Model, SLM)이며, 특정 텍스트가 얼마나 자연스러운지를 평가하는 모델.
    - N-gram 기반 확률 모델을 사용하여 텍스트의 Perplexity 점수를 계산함.
    - 빠른 학습과 예측 속도를 제공하여 대규모 텍스트 데이터를 분석하는 데 적합함.

    동작 원리 : 
    Step1. 데이터 전처리 및 토큰화 : 
    - 원본 텍스트 데이터를 n-그램(n-gram) 단위로 변환하여 모델이 학습할 수 있도록 전처리함.
    - N-gram : 텍스트에서 n개의 연속된 단어를 하나의 그룹(토큰)으로 묶어 처리하는 방식.
    - Unigram(1-gram) : "Hi my name is JB" => ['Hi'], ['my'], ['name'], ['is'], ['JB']
    - Bigram(2-gram) : "Hi my name is JB" => ['Hi my'], ['my name'], ['name is'], ['is JB']
    - Trigram(3-gram) : "Hi my name is JB" => ['Hi my name'], ['my name is'], ['name is JB']

    Step2. N-gram 모델 학습 :
    - 각 N-gram에 대한 조건부 확률(Conditional Probability)을 학습함.
    - 특정 단어 시퀀스가 등장할 확률을 기반으로 모델을 생성.
    확률 계산 공식
    - P(w_{n}|w_{1}, w_{2}, ..., w_{n-1}) : 주어진 앞 단어들(w_{1}, w_{2}, ..., w_{n-1})이 주어졌을 때, 다음 단어 w_{n}이 등장할 확률(0~1 사이의 값).
    - C(w_{1}, w_{2}, ..., w_{n}) : 해당 N-gram이 등장한 횟수.
    - C(w_{1}, w_{2}, ..., w_{n-1}) : 해당 (N-1)-gram이 등장한 횟수.
    - ex. 
    - C("quick brown fox") = 3 → "quick brown fox"라는 문구가 코퍼스에서 3번 등장.
    - C("quick brown") = 10 → "quick brown"이라는 문구가 코퍼스에서 10번 등장.
    - P("fox"|"quick brown") = 3/10 = 0.3 : quick brown이 등장 했을 때, 다음 단어가 fox일 확률이 30%.

    Step3. Perplexity(혼란도, PPL) 계산 :
    - Perplexity는 언어 모델이 주어진 문장을 얼마나 잘 예측하는지를 나타내는 지표.
    - PPL 값이 낮을수록 문장이 자연스럽고 고품질.
    - PPL 값이 높을수록 문장의 품질이 낮고 부자연.
    - log P(w_{n}|w_{1}, w_{2}, ..., w_{n-1}) : 확률이 매우 작기에 로그를 사용해 스케일을 적용하며(항상 음수), 자연로그(In)를 사용.
    - exp() : 로그로 축소된 값을 다시 원래의 스케일로 변환.

    Step4. KenLM을 활용한 필터링 : 
    - Granite 3.0에서는 KenLM을 활용하여 문서의 PPL 점수를 계산하고, 일정 기준 이상의 저품질 문서를 필터링.
    - PPL값이 threshold 값을 넘는 저품질 문서는 데이터셋에서 제거.
    • 알파벳 문자가 25% 미만인 파일 제거.
    • 파일의 처음 100자 이내에 "<?xml version=" 문자열이 포함된 경우 필터링.
    • HTML 파일의 경우, 가시적인 텍스트가 HTML 코드의 20% 이상을 차지하고 최소 길이가 100자 이상인 파일만 유지.
    • JSON 및 YAML 파일의 경우, 문자 개수가 50~5000자 범위 내에 있는 파일만 유지.

3.2 합성 데이터(SYNTHETIC DATA)

기존의 허용된 데이터셋은 코딩(Coding), 추론(Reasoning), 안전성(Safety) 등 특정 기능을 갖춘 모델을 학습하는 데 점점 더 부족해지고 있다. 이를 해결하기 위한 한 가지 방법은 고품질 데이터를 인간이 직접 수집하는 것이지만, 이 과정은 시간이 많이 걸리고 비용이 많이 드는 작업이다. 

 

이러한 문제를 해결하기 위해, 우리는 Granite 모델의 대안으로 합성 데이터 생성(Synthetic Data Generation, SDG)에 대한 심층적인 연구를 진행한다. 최근에는 Self-Instruct (Wang et al., 2023), Evol-Instruct (Xu et al., 2023), MagPie (Xu et al., 2024)와 같은 합성 데이터 파이프라인(Synthetic Data Pipelines)이 등장하여, 인간이 생성한 데이터셋에 필적할 만큼 포괄적이고 경쟁력 있으며 다양한 합성 데이터셋을 생성할 수 있는 방법이 제시되었다. 

(Self-Instruct, Evol-Instruct, MagPie 설명)

더보기

Self-Instruct

인간이 제공한 소수의 초기 데이터셋(Seed Data)을 활용하여, 모델 자체적으로 새로운 지시문(Instructions)과 그에 대한 응답을 생성하도록 하는 방법이다.

기존의 인간 주도 데이터 구축 방식보다 비용이 적게 들면서도 다양한 데이터셋을 생성할 수 있다.

ex. :

  • 단순한 입력 데이터를 확장하여 다양한 지시문을 생성 가능.
  • 초기 지시문(Seed): "자기소개를 해보세요."
  • Self-Instruct가 생성한 확장된 지시문:
    1. "당신이 가장 좋아하는 취미를 소개하세요."
    2. "전문적인 자기소개와 캐주얼한 자기소개의 차이를 설명하세요."
    3. "어린이용 자기소개와 비즈니스 미팅에서 사용할 자기소개를 비교하세요."

Evol-Instruct

기존의 명령어 데이터(seed instruction data)를 점진적으로 발전시키는 방식으로 동작한다.

모델이 점점 더 어려운 질문을 생성하며, 이를 통해 심화된 데이터셋을 구축한다.
초기 명령어를 기반으로 심층(in-depth) 또는 확장(in-breadth) 방식의 진화 프롬프트 템플릿(evolution prompt template)을 적용하여 더욱 복잡하고 정교한 형태로 변환한다.
특징 : 

  • 기존 명령어를 기반으로 새로운 명령어를 생성 :
    명령어를 무작위로 선택하여 점진적으로 더 복잡하거나 포괄적인 형태로 변형.
  • 5단계 반복(iterative evolution) 과정 수행 :
    매 단계에서 품질 검증을 거쳐, 통과된 데이터만 다음 단계에 입력.
  • 품질 검증(heuristic filtering)을 통한 데이터 정제 :
    문자 길이, 단어 수, 초기 명령어 유출 여부 등을 기준으로 검토.
    품질 검증을 통과하지 못한 명령어는 최종 데이터셋에서 제외.

ex. : 

  • 초기 질문을 더 깊이 있는 질문으로 변환하여 모델의 학습 범위를 확장함.
  • 초기 지시문(Seed): "고양이와 개의 차이점을 설명하세요."
  • Evol-Instruct를 적용한 점진적 발전:
    1. "고양이와 개의 신체적 차이를 나열하고, 그 차이가 생긴 이유를 설명하세요."
    2. "고양이와 개의 사회적 행동 차이를 비교하고, 인간과의 상호작용에서 어떤 영향을 미치는지 분석하세요."
    3. "고양이와 개를 AI 기반 로봇으로 설계할 때, 어떤 특성을 중점적으로 구현해야 하는지 논의하세요."

MagPie

Evol-Instruct와 달리 초기 명령어(seed instructions) 없이, 사전 정의된 프리-쿼리(pre-query) 템플릿을 사용하여 직접 명령어를 생성하는 방법이다.

기존 명령어를 변형하는 것이 아니라 완전히 새로운 명령어를 창출하는 방식으로 동작한다.

모델 자체가 "무(無)에서 유(有)를 창조"하여 질문과 답변을 생성한다.

특징 : 

  • 초기 명령어(seed instruction)에 의존하지 않음 : 
    기존 데이터에 의존하지 않고 LLM이 스스로 명령어를 생성.
  • 사전 정의된 프리-쿼리(pre-query) 템플릿을 사용하여 명령어 샘플링(sampling) :
    특정한 주제나 패턴을 가진 명령어를 생성하도록 유도.
  • 12개의 온도(temperature) 및 top-p 조합을 적용하여 다양한 명령어 생성 :
    • 여러 가지 샘플링 전략을 적용하여 명령어의 다양성을 극대화.
    • 같은 주제를 다루더라도 다양한 표현 방식으로 명령어를 생성할 수 있도록 설계.
    • Temperature (온도) : 
      • 모델이 다음 단어를 선택할 때의 확률 분포를 조절하는 매개변수.
      • 낮은 값(ex: 0.1~0.3): 더 확정적인 답변을 생성 (보수적).
      • 높은 값(ex : 0.7~1.0 이상): 보다 창의적이고 예측 불가능한 결과를 생성.
    • Top-p (Nucleus Sampling) :
      • 확률이 높은 단어들 중에서 누적 확률이 p 이상이 될 때까지만 단어를 남기는 방식.
      • 확률이 높은 단어들을 차례로 더해서 0.9 이상이 되는 순간 멈춤.
      • 낮은 값(ex : 0.1~0.3): 매우 높은 확률의 선택지만 고려 (일관성 높음).
      • 높은 값(ex : 0.9~1.0): 더 다양한 결과를 생성 (창의성 높음).
      • ex. p=0.9 :
        "강아지" (0.4) → "고양이" (0.3) → "토끼" (0.2) → "호랑이" (0.05) → "사자" (0.05).
        최종 후보: "강아지  (0.4)", "고양이 (0.3) ", "토끼 (0.2) " (0.9).
        이들 중에서 40:30:20 비율로 랜덤 선택.
        "고양이"가 선택될 수도 있음
  • 탐욕적 샘플링(greedy sampling) 기법을 사용하여 생성된 명령어에 대한 응답(response) 생성.
    • 탐욕적 샘플링(greedy sampling) :
      • 모델이 각 단계에서 가장 확률이 높은 토큰(단어)을 선택하는 방식.
      • 샘플링 과정에서 무작위성을 제거하고, 가장 확실한(확률이 높은) 단어를 선택하여 응답을 생성.
      • 응답 생성 단계에서 탐욕적 샘플링을 사용하여 일관성 있고 정확한 답변을 얻을 수 있음.
      • ex. "강아지" (0.4) → "고양이" (0.3) → "토끼" (0.2) → "호랑이" (0.05) → "사자" (0.05).
        확률이 가장 높은 "강아지"를 무조건 선택(항상 같은 결과 나옴).
  • 단일 턴(single-turn) 데이터셋을 멀티턴(multi-turn) 데이터셋으로 확장하여 대화 기능 강화.

ex. : 

  • 다양한 토픽을 자동으로 탐색하고, 새로운 질문과 응답을 생성할 수 있도록 모델을 학습시키는 방식.
  • MagPie 기반 데이터 생성 과정:
    1. 모델이 직접 생성한 질문:
      • "인공지능이 예술 창작에 미치는 영향은 무엇인가?"
    2. 모델이 생성한 응답:
      • "인공지능은 예술가의 창의력을 증대시키고 새로운 스타일을 탐색하는 데 기여할 수 있지만, 인간 예술가의 고유한 감성을 완전히 대체하기는 어렵다."

이러한 최신 연구에서 영감을 받아, 우리의 합성 데이터셋은 입력-출력(input-output) 쌍으로 구성되며, 단일 턴(Single-turn) 및 다중 턴(Multi-turn) 시나리오를 포함하고, 일반적인(Task-agnostic) 데이터뿐만 아니라 특정 도메인(Task-specific) 데이터를 포함한다.

(Single-turn, Multi-turn 설명)

더보기

Granite 3.0은 단순한 질문-응답 형식의 단일 턴(Single-turn) 데이터뿐만 아니라, 다중 턴(Multi-turn) 대화도 포함하여 학습되었다.

 

Single-turn

단일 입력에 대해 하나의 응답이 존재하는 형식이다.

일반적인 질의응답(Q&A), 코드 생성, 정보 검색 등의 작업에 사용된다.

 ex. : 

  • 입력: "파이썬에서 리스트를 정렬하는 방법은?"
  • 출력: "파이썬에서는 sorted() 함수나 리스트의 sort() 메서드를 사용할 수 있습니다.

Multi-turn

여러 개의 대화 턴을 포함하는 데이터이다.

대화 흐름을 유지하면서 문맥(Context)을 이해하는 훈련에 사용된다.

다중 턴 시나리오를 학습하면 모델이 문맥을 기억하고 연속된 대화에서 더 자연스러운 응답을 생성할 수 있다.

ex. :

  • 고객 지원 챗봇, 코딩 디버깅, 단계별 문제 해결 등에서 활용됨.
  • 데이터 예시 : 
    • 사용자: "파이썬에서 리스트를 정렬하는 방법은?"
    • AI: "파이썬에서는 sorted() 함수나 sort() 메서드를 사용할 수 있습니다. 정렬 방식에 따라 선택할 수 있습니다."
    • 사용자: "차이점이 뭔가요?"
    • AI: "sorted() 함수는 원본 리스트를 변경하지 않고 새로운 정렬된 리스트를 반환하며, sort() 메서드는 원본 리스트를 직접 정렬합니다."

이 섹션에서는 합성 데이터셋 개요, 해당 데이터가 기여하는 데이터 도메인, 그리고 모델의 효과적인 사후 학습(Post-training)을 위해 어떻게 데이터를 필터링하는지에 대해 설명한다.

      • Generic Instruction Data : 
        우리는 주로 Evol-Instruct (Xu et al., 2023) 및 MagPie (Xu et al., 2024) 방법을 활용하여 명령어-응답(instruction-response) 쌍 형태의 일반 명령어 데이터를 구축한다. 구체적으로, Evol-Instruct는 초기 명령어 데이터(seed instruction data)를 기반으로, 이를 무작위로 선택한 심층(in-depth) 또는 확장(in-breadth) 방식의 진화 프롬프트 템플릿을 적용하여 개선된 복잡한 형태로 변환한다. 우리는 문자 길이, 단어 수, 초기 명령어 유출 여부 등의 휴리스틱(heuristics)을 통해 진화된 명령어의 품질을 검증하고, 이 검증을 통과하지 못한 명령어는 최종 데이터셋에서 제외한다. 이 진화 과정은 총 5회 반복되며, 각 반복(iteration)에서 기존의 원본 명령어나 이전 단계에서 품질 검증을 통과한 진화된 명령어를 입력 데이터로 사용하여 다음 단계를 수행한다. Evol-Instruct를 사용하여 생성된 합성 데이터셋 목록은 부록 B.2(Appendix B.2)에서 확인할 수 있다.
        더보기
        Evol-Instruct

        동작과정 :

        1. 초기 명령어 데이터(seed instruction data) 설정 :
          기존 데이터셋에서 초기 명령어를 선정함.
          ex) "영어 문장을 프랑스어로 번역하세요."
        2. 무작위로 선택한 변형 방식(in-depth / in-breadth evolution) 적용 :
          • 심층(in-depth) 방식: 기존 명령어를 더 세부적이고 구체적으로 변형.
            ex) "다음 영어 문장을 프랑스어로 번역할 때, 문화적 뉘앙스까지 반영하세요."
          • 확장(in-breadth) 방식: 기존 명령어를 더 일반화하거나 응용 가능한 방향으로 확장.
            ex) "다음 영어 문장을 프랑스어와 독일어로 번역하세요."
        3. 생성된 명령어의 품질 검증(heuristic filtering) 수행 :
          문자 길이, 단어 수, 원본 명령어의 유출 여부 등을 분석하여 품질 기준을 통과한 데이터만 유지.
          ex) "프랑스어로 번역하시오."와 같은 과도하게 짧거나 정보량이 부족한 명령어는 제거됨.
        4. 검증을 통과한 명령어를 다음 단계(iteration)로 전달 :
          첫 번째 진화 과정에서 생성된 명령어 중 검증을 통과한 데이터만 다음 단계의 입력으로 사용.
          총 5단계(iterations) 동안 반복 수행하여 점진적으로 개선된 명령어 데이터셋을 구축.
        5. 최종적으로 검증을 통과한 데이터만을 포함하여 최종 합성 데이터셋 생성 :
          5회 반복 후, 최종적으로 남은 고품질 데이터는 지도 학습(SFT) 과정에서 사용됨.
        Evol-Instruct와 달리 MagPie는 프롬프트 엔지니어링(prompt engineering)이나 초기 질문(seed questions)에 의존하지 않고 고품질 명령어 데이터(high-quality instruction data)를 생성한다. MagPie는 LLM을 사전 정의된 프리-쿼리(pre-query) 템플릿을 사용하여 명령어를 샘플링(sampling)하는 방식으로 직접 명령어 데이터를 구축한다. Xu et al. (2024)의 방법을 따르며, 12개의 온도(temperature) 및 top-p 조합을 적용하여 명령어를 생성한다. 이 과정에서 여러 개의 교사 모델(teacher models)을 사용하여 프리-쿼리를 수행하고, 탐욕적 샘플링(greedy sampling) 기법을 적용하여 해당 명령어에 대한 응답(response)을 생성한다. 최종적으로 필터링되지 않은 샘플(unfiltered samples) 데이터 규모는 사용된 LLM에 따라 500만(5M)~1천만(10M) 개 범위 내에서 조정된다. 또한, 우리는 단일 턴(Single-turn) 데이터셋을 필터링하여 멀티턴(Multi-turn) 데이터셋으로 확장하여 채팅 기능을 강화한다.
        더보기
        MagPie
        동작 과정 : 
        1. 사전 정의된 프리-쿼리(pre-query) 템플릿을 사용하여 명령어 생성 :
          "사용자가 특정 프로그래밍 언어로 코드를 작성하도록 유도하는 명령어를 생성하세요."
        2. 여러 개의 교사 모델(teacher models)을 사용하여 샘플링 수행 : 
          다양한 언어 모델을 활용하여 pre-query 를 실행하고, 명령어를 생성함.
          ex. "Python으로 피보나치 수열을 생성하는 코드를 작성하세요.
        3. 탐욕적 샘플링(greedy sampling) 방식으로 해당 명령어에 대한 응답(response) 생성.
        4. 다양한 샘플링 방법(temperature  및 top-p 조합)을 활용하여 명령어를 다양하게 생성.
          • temperature 조절: 모델의 출력을 다양하게 만듦.
          • top-p 샘플링: 높은 확률을 가진 응답을 선택하여 모델의 창의성을 조정.
        5. 최종적으로 필터링되지 않은 샘플(unfiltered samples) 데이터 규모는 500만~1000만 개 수준에서 조정.
        6. 단일 턴(single-turn) 데이터셋을 멀티턴(multi-turn) 데이터셋으로 확장.
        7. 오픈소스 교사 모델(Open-source Teacher Models)만 사용하여 명령어 및 응답을 생성.
        우리는 비제한적 라이선스(non-restrictive license)를 가진 오픈소스 교사 모델(Open-source Teacher Models)만을 사용하여 명령어 및 응답을 생성한다.
        Evol-Instruct 및 MagPie를 사용하여 생성된 합성 데이터셋 목록은 부록 B.2(Appendix B.2)에서 확인할 수 있다.
      • Code :
        소프트웨어 개발에 대한 수요가 급증함에 따라, 소프트웨어 개발 생산성을 높이는 것이 그 어느 때보다 중요해졌으며, LLM은 인간 프로그래머를 보조하는 유망한 경로를 제공한다. 특히, Starcoder2-Instruct에서 영감을 받아, 우리는 OSS self-instruct 파이프라인을 6개의 코딩 언어(JavaScript, TypeScript, C, C++, Go, Python)로 확장하고, 필터링된 사전 학습 데이터를 시드 데이터로 사용하며, granite-34b-code-instruct를 교사 모델로 활용하여 명령-응답 쌍 데이터셋을 생성한다.
        (Starcoder2-Instruct 설명)
        더보기
        Starcoder2-Instruct
        코드 생성 및 코드 이해 능력을 향상시키기 위해 설계된 학습 방법론이다.
        기존의 Starcoder 모델(오픈소스 코드 생성 LLM)의 성능을 확장하기 위해 LLM이 자체적으로 명령어-응답 데이터를 생성할 수 있도록 최적화된 방법을 적용한 것이다.
        개념 : 
        • LLM을 활용한 명령어-응답 데이터 자동 생성 (Self-Instruct 방식 활용) :
          기존에 사람이 만든 데이터가 아니라, LLM이 자체적으로 명령어를 생성하고 응답을 생성하도록 학습.
          ex) "Python에서 퀵 정렬을 구현하는 코드를 작성하세요."
          → 모델이 스스로 이런 명령어를 만들고, 이에 대한 코드 응답도 생성.
        • 다양한 코딩 태스크를 포함하는 명령어 생성 :
          코드 생성(Code Generation), 코드 설명(Code Explanation), 도큐멘테이션 작성(Docstring Generation, 코드 디버깅(Code Debugging), 유닛 테스트 생성(Unit Test Generation), 코드 최적화(Code Optimization)
        • 점진적 향상(Iterative Refinement) : 
          초기에는 단순한 명령어를 기반으로 응답을 생성하고, 이후에 모델이 점점 더 정교한 명령어를 생성하는 방식으로 발전.
          모델이 데이터를 학습하면서 더 복잡하고 유용한 명령어를 만들도록 개선.
        • 필터링을 통한 품질 보장 : 
          생성된 데이터의 충실도(Fidelity), 복잡도(Complexity), 실행 가능성(Executability)을 평가하여 저품질 데이터를 제거.
          ex) 실행할 수 없는 코드, 논리적으로 오류가 있는 코드, 중복된 코드 샘플 등을 필터링.
        (OSS Instruct 설명)
        더보기
        OSS Instruct(Open-Source+Selft-Instruct)
        Self-Instruct 방법을 오픈소스 데이터와 결합하여 더욱 확장한 개념이다.
        기존의 오픈소스 데이터(Open-Source Data) + Self-Instruct 방법을 조합하여 모델이 자체적으로 학습 데이터를 생성하는 시스템을 의미한다.
        특징 : 
        • 오픈소스 데이터를 활용한 Self-Instruct 확장 :
          기존의 오픈소스 데이터셋을 활용하여 Self-Instruct 프로세스를 강화.
          ex. Code-Alpaca, Glaive Code Assistant 같은 오픈소스 코드 데이터셋 활용.
        • 코딩, NLP, 수학, 논리 추론 등 다양한 도메인에 적용 가능 :
          단순한 텍스트 변형이 아니라, 코딩(Code), 자연어 처리(NLP), 수학 및 논리 추론(Reasoning) 등 다양한 작업에 적용 가능.
        • Granite 3.0에서는 OSS Self-Instruct를 활용하여 코드 생성 모델을 학습 :
          OSS Self-Instruct를 사용하여 6개 코딩 언어(JavaScript, TypeScript, C, C++, Go, Python)를 학습하는 데 적용.
          기존의 코드 데이터를 기반으로, 모델이 자체적으로 더 다양한 코드 명령어와 응답을 생성 가능.
        코드 생성뿐만 아니라, 우리는 코드 설명, 도큐멘테이션(docstring), 가짜 코드(pseudocode) 생성과 같은 작업을 다루기 위해 생성, 역번역(backtranslate), 필터링 프로세스를 사용한다(Dubey et al., 2024).이러한 작업은 모델의 추론 능력이 작업 조합을 통해 향상될 수 있도록 의도적으로 하나의 그룹으로 묶인다. 우리는 또한 유닛 테스트 생성 및 코드 디버깅과 같은 작업을 위한 합성 데이터를 생성하기 위해 유사한 파이프라인을 적용하며, 이는 우리 모델이 코드 수정 및 설명에서 더 나은 성능을 발휘할 수 있도록 돕는다. Zheng et al.(2024)을 따라, 우리는 코드 실행 및 합성 코드 리뷰를 포함한 50,000개의 다중 턴 대화를 생성한다. 우리는 LLMaJ를 사용하여 복잡도 척도 1~5로 지시문을 필터링한다.합성 코드 리뷰 및 업데이트 후 실행 가능한 코드와 통과된 유닛 테스트를 포함하는 대화는 최종 데이터셋에 포함된다.
        그런 다음, 우리는 필터링된 데이터셋의 지시문을 초기 프롬프트로 사용하며, AutoGen 프레임워크를 사용하여 작성, 실행 및 검토하는 에이전트로 구성된 다중 턴 에이전트 파이프라인을 구축한다.
        우리는 두 개의 오픈 소스 데이터셋(Glaive Code Assistant 및 Code Instructions Alpaca)에서 Python 샘플을 모델 분류 및 휴리스틱 기법을 사용하여 식별한다.
        우리는 또한 SDG(Synthetic Data Generation)를 활용하여 다중 턴 데이터를 수집하며, 실행 출력을 피드백으로 통합하는 방식과 인간 피드백을 함께 사용한다.
        필터링을 위해, 우리는 모델이 원본 시드 함수와 합성 코드 간의 충실도(fidelity)와 복잡도를 평가하도록 프롬프트하며, 미리 정의된 임계값을 통과한 샘플만 유지한다.
        구체적으로, 우리는 교사 모델을 프롬프트하여 시드 함수로부터 코드 설명, 도큐멘테이션, 가짜 코드를 생성하도록 한다.
        우리는 이 방법을 사용하여 235,000개의 샘플을 생성하며, 이는 지도 학습 미세 조정에서 주요한 코드 생성 데이터셋 중 하나로 사용된다.
        Granite 3.0 모델의 코딩 능력을 향상시키기 위해, 우리는 고품질의 합성 코드 데이터를 생성하고, 학습 데이터에서 부적절한 샘플을 제거하는 품질 필터를 만드는 데 집중한다.
      • Reasoning :
        LLM을 활용한 추론이 중심이 되어 왔으며(Plaat et al., 2024; Zhang et al., 2024a), 이는 벤치마크의 발전과 LLM의 추론 능력에 대한 논쟁이 아직 결론 나지 않은 점에서 비롯된다(Kojima et al., 2023; Mirzadeh et al., 2024). 
        그러나 Chain-of-Thought 과 에이전트 기반 행동(Agentic behavior)의 발전은 인간 검증이 포함된 추론 및 계획 경로를 생성하는 혁신적인 메커니즘으로 초점을 이동시켰다(et al., 2024; Lightman et al., 2023).
        우리는 합성 추론 데이터를 생성하기 위해 두 가지 주요 기법을 사용한다.
        • 코드 지원 합성 데이터 생성(Code-Assisted Synthetic Data Generation): 우리는 주로 알고리즘 작업을 위해 코드 지원 SDG를 사용한다(Li et al., 2023b).Python 코드 실행은 Chain-of-Thout(CoT)과 다양한 추론 작업의 최종 답변을 생성하고 검증하는 데 사용된다.
          각 추론 카테고리에서, 우리는 도메인별 시드 프롬프트와 시드 데이터를 사용하여 다양성을 도입한다.
        • 지식 기반 데이터 생성(Knowledge-based Data Generation): 우리는 ATOMIC(Hwang et al., 2021) 및 Wikidata(Vrandeciˇ c & Kr ´ otzsch, 2014)와 같은 다중 지식 그래프를 사용하여 상식과 백과사전 지식을 포함하는 Chain-of-Thout(CoT) 기반 다중 홉 추론 데이터를 생성한다.근거는 잘못된 추론 경로를 제거하는 데 도움이 되며, 올바른 답변과 잘못된 답변을 포함한 다양한 데이터를 검증하는 데 사용된다.
          초기 지식 그래프 시드 구조는 템플릿 기반 및 랜덤 워크(random-walk) 기반 기법의 조합이며, 이는 생성된 추론 경로의 근거를 제공한다.
      • Retrieval Augmented Generation(RAG) :
        RAG는 대형 언어 모델(LLM)의 일반적인 문제점인 사실적 부정확성, 오래된 지식, 그리고 특정 도메인 지식의 한계를 해결할 수 있는 유망한 접근 방식으로 널리 인식되고 있다(Chen et al., 2024a).그다음, 검색기(ELSER와 sentence-transformers/all-MiniLM-L6-v2 문장 임베딩)를 사용하여, 사전에 구축된 문서 인덱스에서 상위 k개의 관련 문서 조각(passage)을 동적으로 선택하여, 첫 번째 단계에서 생성된 사용자 질문을 다중 턴, 다중 문서 기반 대화로 확장한다. 검색된 문서 조각과 질의를 LLM에 제공한 후, 이를 프롬프트하여 응답을 생성한다. 또한, LLM-as-a-Judge 모듈을 활용하여 부정확한 응답이 포함된 대화를 필터링한다. 이를 위해 대화 내의 모든 문맥-응답(context-response) 쌍을 평가하고, 대화 기록과 현재 질의를 기반으로 더 큰 언어 모델이 응답의 정확도를 판단한다. 부정확한 질문-응답 쌍이 포함된 대화는 최종 데이터셋에서 제외된다.
        다중 턴 RAG 데이터 생성에는 공개된 데이터셋인 QuAC(Choi et al., 2018) 및 MultiDoc2Dial(Feng et al., 2021)을 시드 데이터로 사용한다. 이후, 후속 턴에서는 먼저 대화 기록과 검색된 문서 조각을 기반으로 LLM을 프롬프트하여 새로운 질의를 생성한 후, 앞서 설명한 방식과 동일하게 검색기를 통해 관련 문서를 찾고, 해당 문서와 함께 질의를 입력하여 응답을 생성한다.
        RAG 기능을 향상시키기 위한 합성 데이터를 생성하기 위해, Lee et al. (2024b)의 방법을 따라 다음과 같은 과정을 수행한다. 먼저 문서를 입력한 후, LLM을 프롬프트하여 사용자 질문을 생성한다. 이러한 질문들은 정보 탐색 작업에서 일반적으로 사용되는 다양한 유형을 포함하며, 생성된 질문이 지정된 질문 유형과 일치하도록 하기 위해, 질문 유형별 연쇄적 사고(CoT, Chain-of-Thought) 프롬프트를 적용하여 언어 모델이 근거 문서를 기반으로 논리적 추론을 수행하도록 한다(Lee et al., 2024b).

 

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

[LLM] What is Transformer?  (0) 2025.02.10

+ Recent posts