EfficientML

EfficientML.ai Lecture 12 - Transformer and LLM (MIT 6.5940, Fall 2024)

hariver1s20 2024. 10. 21. 19:23

1. Transformer basics

1) Pre-Transformer

* RNNs

RNN 계열 모델의 경우 Bi-direction일 경우는 discriminate task로 encoding역할을 하고, Uni-direction일 경우는 generative task로 decoding의 역할을 한다.  

token간의 의존성 때문에 병렬처리가 어렵다는 단점이 있었고, input size가 커질수록 정해진 hidden dim에 정보를 compressive하게 저장하는 것이 어려웠다. 

또 n번째 state를 알기 위해서는 n-step의 forward process를 거쳐야하므로 parallelism의 한계점이 존재한다. 

* CNNs 

CNN의 경우는 한번의 KERNEL 연산에서 인접한 KERNEL SIZE만큼의 token만을 연산 가능하므로 local 정보는 가져올 수 있으나 global정보를 얻지 못하는 단점이 있다. 

*Transformer

위 그림에 적혀있는 과정을 거쳐 모델을 통과한다. 먼저 word를 tokenization을 하고 token들을 embeddind하여 digitize를 한다.

자주 사용되는 word embedding으로는 Word2Vec, GloVe 가 있다. 

그리고 transformer의 주된 특징이라고 할 수 있는 MSA를 거치는데, input embedding을 query, key, value vector로 반환하고 여러개의 head별로 Q와 K의 연산을 통해 token별 attention을 연산하여 최종적으로 다양한 semantic정보를 얻는다. 

또, masking의 유무에 따라 transformer의 역할이 달라진다. casual ,즉, 시간의 흐름을 신경쓴다면 미래정보는 masking하여 참고하지 못하게 한다. 

그리고 FFN을 거치는데 이 FFN은 inverted bottleneck이라고도 하며, 더 많은 정보를 제공하여 capacity를 늘려 representation을 잘 할 수 있게한다 

Transformer에서는 BN이 아니라 LN을 사용하며, LN은 data별로 normalize하는 방법 대신 feature hidden dim을 normalize하여 token embedding의 변화시킨다. 

LN을 적용하는 방법에는 Post 와 Pre가 있는데, Pre가 더 hot한 방법으로 학습할 때, 더 안정적이고 quantize할때도 더 좋다고 한다.(이는 다음 lec에서 다룬다고 함)

 

CNN이 local한 정보를 얻고 AR Model이 시간 순서를 포착하는 반면 transformer는 한번에 병렬적으로 처리하므로 position에 대한 정보를 주입해주어야한다. 그 방법이 위와 같이 positional importation을 t(token index)에 맞게 hidden dim을 생성하여 elementwise 더해준다. 

 

Transformer design variants

1) Encoder-decoder (T5), encoder-only (BERT), decoder-only (GPT)

* Encoder-decoder 

* Encoder - only

BERT 계열 모델을 의미하고, Masked Language Model (MLM)과 Next Sentence Prediction (NSP) task로 llm을 사전학습하고 small dataset으로 fine-tuning하여 downstream task에 적용하는 방법론이다. 

attention mask에서 모두 1로 적용하여 모든 sequence를 보고 embedding한다. 

 

*Decoder - only

이 방법론을 생성모델로서 이전토큰까지 주어졌을 때, 다음 토큰을 예측하는 방법을 사용한다. 

attention mask에서도 이전토큰은 안보이게 masking하는 방법을 적용한다. 

 

2) Absolute positional encoding -> Relative positional encoding

(1) Absolute positional encoding

positional information이 input embeddings에 간단한 구조로 더해져서 계산 효율적이다. 하지만, 입력의 길이가 달라질 때 또는 학습 시 보지 못한 긴 시퀀스에서 성능이 떨어질 수 있다는 단점이 있다. 

 

(2) Relative positional encoding

두 토큰 간의 상대적인 거리를 기반으로 위치 정보를 인코딩하여 입력의 길이에 영향을 받지 않아 더 유연한 정보를 제공할 수 있다. 

* Attention with Linear Biases (ALiBi)

토큰 간의 거리에 기반하여 선형적으로 변화하는 바이어스를 추가해, self-attention 메커니즘이 위치 정보를 더 쉽게 파악하도록 돕는다. 이 방식은 추가적인 매개변수를 사용하지 않아 모델의 복잡성을 크게 늘리지 않으면서도 효율적인 위치 정보를 제공할 수 있다.

* Rotary Positional Embedding (RoPE)

회전 변환(rotational transformation)을 통해 각 위치를 인코딩한다.각 토큰 간의 상대적 거리를 각도(rotation)로 표현해, 고차원의 벡터 공간에서 위치 정보를 보다 효과적으로 반영할 수 있다. RoPE는 특히 긴 문장이나 시퀀스를 처리할 때 더 나은 성능을 보인다. 

아래 예시를 보면, 6개의 token(i.e. Enhanced, Transformer, with, Rotary, Postion, Embedding)이 d차원으로 구성되어있고 d/2개의 pair로 구성하여 2차원 좌표로 표현하고 각 token의 index를 m이라고 하면 m만큼 rotate하여 relative position을 표현한다. 그렇게 되면 좌측의 embedding vector가 우측의 형태로 변화하게 되고, 위치정보를 담은 embedding vector로 변화한다. 

이 방법론을 사용하면 아래 그림처럼 interpolate하여 2배의 context length를 만들 수 있게 됨. 

3) KV cache optimizations

Transformer의 attention은 뛰어난 성능을 보여줌에 반해 연산량이 매우 높은 문제점이 있다. 이를 해결하기 위해 

 KV 캐시를 활용하여 계산 효율을 극대화하고자 했다. Multi-Head Attention(MHA), Multi-Query Attention(MQA), 그리고 Grouped Query Attention(GQA)와 같은 다양한 attention mechanism을 제안하면서 계산 효율과 성능 사이의 trade off를 최적화하고자했다. (이게 결국 convolution의 conv-> depthwise conv -> groupwise conv와 유사하다고 볼 수 있을듯?)

* Multi-Head Attention (MHA)

이 방법이 가장 기본적인 방식인데, 만약 KV 캐시를 적용하면 이전 토큰들의 key와 value를 저장하고 새로운 query만 연산하여 연산 시간을 줄이고 반복적인 토큰 생성작업 시 유용하게 적용할 수 있다. 

* Multi-Query Attention (MQA)

이 방식은 여러 query에 대해서 하나의 key,value set를 사용하여 MHA보다 메모리 사용량과 계산 비용을 줄인 방식이다. 즉, 하나의 KV만 캐시하면 되므로 메모리와 연산 비용을 크게 절감할 수 있다. 하지만 다양한 HEAD가 사용되어 업데이트 될 때마다 하나의 KV 값만 업데이트되므로 그 representation과 다양성의 한계가 있을 수 있다. 

* Grouped Query Attention (GQA)

이 방식은 query를 group으로 묶어 처리하여 각 group마다 key와 value를 공유하는 방식이다. 각 group별로 key와 value를 공유하여 MQA보다 더 다양하고 MHA보다는 연산량을 절약할 수 있는 중간정도의 구조라고 볼 수 있고, 연산의 최적화와 유연성을 유지할 수 있다. 

위 그림을 보면 KV cache의 size가 모델 사이즈가 증가함에 따라 증가하는 것을 알 수 있고, 오른쪽 그림은 MHA, MQA, GQA의 도식이라고 보면 된다. 

 

4) FFN -> GLU (gated linear unit)

* GeLU and Swish 

GeLU: 입력 값이 큰 경우 ReLU처럼 작동하지만, 작은 값에 대해서는 미세한 비선형성을 유지해 자연스러운 학습을 도움,

Swish: ReLU와 sigmoid의 조합으로, 보다 부드러운 곡선을 통해 성능을 향상시킴.  

* SwiGLU

GLU는 gate mechanism을 도입한 구조로 어떤 정보는 통과시키고 어떤 정보는 차단하는 방식을 적용하여 유연한 학습을 도모하고자 함. 

두개의 linear transformation을 진행하고 하나만 nonlinear activation을 거쳐서 (0과 1)사이의 "어느정도"정보가 통과할지를 결정함. 그 이후 두 값을 element-wise곱하여 필요한 정보만 통과시키고 나머지는 차단함. 

그리고 SwiGLUSwish와 GLU(Gated Linear Unit)를 결합한 새로운 구조로, FFN보다 더 나은 성능을 보임. 

LLMs

GPT3

- LLMs exhibit some “emergent” abilities that are only available with a large enough model size.

LLM은 일정 임계치 이상에 도달하면 모델 크기가 커짐에 따라 복잡한 패턴을 더 잘 학습하고 높은 수준의 추론 및 문제 해결 능력을 발휘할 수 있게 된다. 

 

- Scaling up Transformers to be few-shot learners (in-context learning)

모델이 fine-tuning을 하지 않더라도 주어진 몇가지 예시만으로 그 안에 있는 패턴을 학습하여 상황(Context) 내에서 요구된 작업을 이해하고 실행하는 능력을 의미한다. 

Zero-shot learning: 모델이 예시 없이도 새로운 작업을 처리할 수 있는 능력.

Few-shot learning: 몇 개의 예시를 제공하면 그 패턴을 학습하여 새로운 작업에 적용하는 능력.

 

OPT

LLaMA

Mistral-7B

lightweight LLM으로 Llama-2-13B와 Llama-34B를 능가했다. 이 점은 작은 하드웨어에서도 높은 성능을 제공할 수 있을 것으로 기대된다. 컴퓨팅 비용 절감과 함께 넓은 범위의 작업에서 효과적으로 작동할 수 있는 능력을 제공할 것이다.

The Chinchilla Law

모델 크기와 학습 데이터의 양 사이의 균형을 맞추는 것이 모델 성능을 극대화하는 데 중요하다는 원칙을 제시한 것으로 

학습해야할 파라미터가 증가할 때 단순히 모델크기를 증가시킨다고 성능이 향상되는 것이 아니라 데이터 양 역시 같이 증가되어야 한다는 것을 보여준 규칙이다. 

Advanced topics, Multi-Modal LLM 

TBC..