newhaneul

[Seoul National Univ: ML/DL] Lecture 20. Transformers 2 본문

2. Artificial Intelligence/Seoul National Univ. ML&DL

[Seoul National Univ: ML/DL] Lecture 20. Transformers 2

뉴하늘 2025. 4. 15. 18:07
728x90

본 포스팅은 서울대학교 이준석 교수님의 M3239.005300 Machine Learning & Deep Learning 1을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.
이준석 교수님에게 강의 자료 사용에 대한 허락을 받았음을 알립니다.

https://youtu.be/8QDbm0qSKCI?si=DauUnYoTxRUVFOAV

1. More Details on Transformers

 

 이번 Lecture에서는 Transformer의 작동 원리와 어떤 문제를 해결하는지에 대해 자세히 알아보도록 한다. 

 

Token Aggregation (Average Pooling)

 

Transformer 모델에서는 입력이 여러 개의 토큰(Token) 단위로 나뉘어 처리된다. 하지만 최종적으로는 이 여러 개의 토큰들을 하나의 고정 크기 벡터로 요약하거나 집계해야 할 때가 많다. 이때 쓰이는 방식 중 하나가 바로 Token Aggregation이고, 그 방법 중 하나가 Average Pooling이다.

 

Average Pooling은 말 그대로 모든 토큰의 벡터를 평균 내는 방식이다.

 즉, 모든 토큰 벡터들을 더해서 평균을 내면 하나의 벡터가 된다.

 Averaging Pooling 방식은 sequence의 길이가 짧고, 비교적 균등할 때 잘 작동한다. 평균을 내는 방식이라 전체 input의 의미를 반영하지 못하는 단점이 있다. 

Token Aggregation (Classification Token)

 

 이 방식은 Transformer 기반 모델, 특히 BERT에서 많이 사용하는 방식으로, 입력 시 맨 앞에 특별한 [CLS] 토큰을 추가하고, 최종 출력에서 이 토큰에 해당하는 벡터만을 사용하는 방법이다. 즉, 여러 토큰 중 오직 [CLS] 토큰의 출력값만으로 전체 문장을 대표하게 만드는 방식이다.

 

 [CLS] 토큰을 제외한 다른 토큰의 경우에는 원래 input인 x의 영향을 많이 받기 때문에 문장 전체의 표현으로 사용하기가 어렵다. 그러나 아무 의미없는 값을 갖는 dummy token [CLS]로부터 얻은 output embedding z0는 특정 x의 영향을 크게 받지 않았기 때문에 문장 전체를 대표할 수 있다.

 

Traning Transformers

 

 Transformer로 해결하고자 하는 일이 무엇이냐에 따라 Sequence-lebel prediction과 Token-lebel prediction으로 구분할 수 있다. Sequence-level prediction은 문장 전체를 대표해야 하므로 [CLS]로 예측한 output y를 실제 label과 비교한다. 그러나 Token-level prediction은 Token 수준에서 예측을 해야하므로 각 Token마다 예측한 output y들을 실제 label들과 비교해야 한다.(ex: 단어의 문법 확인) 

 

Step 1: Input Embedding

 

Transformer는 단어(또는 subword)를 그대로 처리할 수 없기 때문에, 입력 토큰을 고정된 차원의 벡터로 변환해야 한다. 이 과정을 Input Embedding이라고 한다.

Step 2: Contextualizing the Embeddings (Encoder)

 

이 단계는 입력된 각 Token Embedding을 문맥(context)을 반영한 벡터로 변형(transform)하는 과정이다.
Transformer는 이를 위해 Multi-Head Self-Attention과 Feedforward Neural Network (FFN)을 반복적으로 적용한다.

 

 먼저 input x를 Query, Key, Value로 변환하기 위해 W_Q, W_K, W_V를 곱한다. 이때 Query와 Key는 dimension이 같아야 한다.

  이렇게 유사도 행렬(Similarity matrix)을 만들기 위해 Query와 Key의 dimension은 같아야 한다.

 

 Self Attention으로 구한 Attention value Z는 contextualized된 새로운 word embedding을 의미한다.

 Multi-head Self-Attention은 Self-Attention을 여러 번 병렬로 수행하는 것이다. 다양한 시점(관점)에서 attention을 수행해 더 풍부한 문맥 정보를 추출한다. 단일 attention은 한 가지 관계만 학습할 수 있지만, 여러 head를 사용하면 문법적 관계, 위치 정보, 의미적 유사성 등 head마다 다양한 학습을 할 수 있게 된다. 즉, 다양한 패턴과 문맥을 병렬로 파악할 수 있다.

 head의 수만큼 self attention을 수행한 다음 head들의 결과를 concat한 다음 W_O를 곱해 embedding의 dimension을 sequence size에 맞게 조절해야 한다.

 

Step 3: Feed-forward Layer (Encoder)

 

 FFN은 Attention만으로는 충분히 복잡한 변환을 수행하기 어려우므로, 각 토큰의 정보를 비선형적으로 변환하는 MLP 계층을 추가한다.  Feed-forward layer는 각 단어마다 독립적으로 적용되고 정보 조합과 변형에 기여하도록 돕는다.

 

 Residual Connection은 Gradient Vanishing을 방지하고 학습을 안정화시키는 역할을 한다. Transformer와 같이 층이 깊은 model의 경우에는 입력 정보를 그대로 보존하는 경로를 제공해야 한다. 그렇지 않으면 층이 깊어질수록 성능 향상을 보장하지 못하게 된다.

 입력 벡터를 그대로 더해주는 구조이다. 이 때문에 학습 초기에도 정보 손실이 적고, 학습이 안정된다.

 

 Layer Normalization은 각 Layer에서의 output 분포를 안정화시켜서 학습 효율을 높인다. 

  Encoder의 output인 Attention value Z를 다시 Input으로 사용해 N번 만큼 과정을 반복하도록 한다. 여러번 반복함으로서 sequence의 context를 더 잘 이해할 수 있도록 한다. 

Transformer는 입력 시퀀스를 병렬 처리한다. 따라서 RNN처럼 단어 순서를 자연스럽게 반영할 수 없다. 하지만 언어의 경우에는 순서가 매우 중요하다. "I ate lunch" vs "Lunch ate I" → 의미 완전히 다름

 

그래서 Transformer는 토큰 간 상대적/절대적 위치 정보를 추가적으로 주입해야 하고 이러한 역할을 하는 것이 Positional Encoding이다.

Transformer 논문에서는 sinusoidal (사인/코사인 기반) 함수를 사용하여 위치 정보를 인코딩했다.

 

  • pos: 토큰의 위치
  • i: 차원 인덱스
  • d_mode: 임베딩 차원 수

 Positional Encoding으로 구한 위치 정보를 입력에 더함으로서 각 Token Embedding 직접적으로 반영된다.

 

 

Step 4: Decoder Input (Decoder)

 

  Decoder의 Input은 앞에서 생성된 토큰들이다. Decoder Input도 Encoder Input과 마찬가지로 Token Embedding, Positional Encoding 과정을 거친다.

Step 5: Masked Multi-head Self-attention

 

 Transformer Decoder는 왼쪽 단어까지만 보고 다음 단어를 예측해야 한다. 즉, 아직 생성하지 않은 미래 토큰을 보면 안 된다. 이를 위해 Masked Multi-head Self-attention을 사용한다.

 

 RNN과는 달리 Transformers에서는 전체 Sequence를 한 번에 입력 받는다.(Encoder와 Decoder 모두 동일) 따라서 Decoder에서는 model이 다음 label을 예측해야 하므로 미래 token을 참조하지 않게 막는 인위적인 제약이 필요하다.

 

 

 

 

Step 6: Encoder-Decoder Attention(Cross-Attention)

 

 Decoder의 Multi-head Attention 단계에서는 Decoder의 중간 출력을 Query로 사용하고, Encoder의 출력을 Key와 Value로 사용해서 attention을 계산한다. 이 과정을 통해, Decoder는 자신이 지금까지 생성한 정보에 기반해서 Encoder가 인코딩한 전체 입력 시퀀스에서 관련 정보를 찾고 가져온다.

 

Step 7-8: Feed-forward Layer & Linear Layer (Decoder)

Step 9: Softmax Layer (Decoder)

 

 Softmax Layer는 Transformer가 출력한 최종 벡터를 실제 단어로 변환하기 위해 사용된다. Softmax를 적용하여 구한 확률분포를 기반으로 단어를 선택한다.

 

 Beam Search는 단순히 확률이 가장 높은 단어만 선택(Greedy Search) 하는 것보다 전체 문장의 확률이 높은 조합을 찾기 위한 전략이다.

 가능한 다음 단어들을 여러 개(b개의 후보) 유지하고 각 후보에 대해 다음 단어들을 또 확장한다. 그렇게 전체 시퀀스의 누적 확률을 기준으로 상위 b개만 유지하는 방식이다.

시작: <sos>

1단계:      <sos> → I (0.6)
                      → You (0.4)             ← 상위 2개 유지

2단계:
    I → like (0.6 × 0.5 = 0.30)
      → eat  (0.6 × 0.3 = 0.18)

    You → like (0.4 × 0.4 = 0.16)
         → know (0.4 × 0.5 = 0.20)

→ 다음 후보:
   I like (0.30)
   You know (0.20)                          ← 상위 2개 유지

 

2. Bidirectional Encoder Representations from Transformers (BERT)

 

BERT는 Google이 2018년에 발표한 사전 학습 기반 언어 모델로, Transformer의 Encoder 구조만을 사용하여 문맥을 양방향(Bidirectional)으로 이해할 수 있게 만든 모델이다. 즉, 양쪽 문맥을 모두 고려하여 더 풍부한 이해 가능하다.

 

[CLS] 나는 학교에 간다 [SEP] 그곳은 아주 컸다 [SEP]

 

BERT는 이 입력을 다음의 세 가지 embedding으로 변환한다:

  1. Token Embedding
    → 각 단어를 WordPiece로 쪼갠 뒤 embedding
  2. Segment Embedding
    → 문장 A인지 B인지 구분 (예: [CLS] 문장A [SEP] 문장B [SEP])
  3. Position Embedding
    → 단어 순서 정보를 보존하기 위한 positional encoding

 

 BERT는 양방향 학습이 가능하므로 Masked Language Modeling(MLM)을 통해 사전 학습한다.

입력: 나는 [MASK]에 간다 → 예측: 학교

 

기존 left-to-right LM은 뒤에 단어를 볼 수 없지만, BERT는 양방향이므로 가능

 

 두 번째 BERT의 학습 방식은 Next Sentence Prediction(NSP)이다. 두 문장이 주어졌을 때, 두 번째 문장이 실제 다음 문장인지 아닌지 예측한다.

문장1: 나는 학교에 간다  
문장2: 그곳은 아주 컸다        → True  
문장2: 비가 많이 왔다          → False

 

3. Transformer for Image Data

 

ViT: Vision Transformer

 

ViT (Vision Transformer)**는 이미지를 입력으로 받아, 기존 CNN 대신 Transformer Encoder 구조로 처리하는 모델이다. 즉, 이미지를 텍스트처럼 패치 단위로 나눠서, Transformer에 입력해 분류(Classification) 등의 작업을 수행한다.

 

BERT처럼 [CLS] 토큰을 앞에 붙여 최종적으로 이미지 전체를 대표할 수 있게 하였다.

 

ViT: Experiments and Discussion

 

 ViT는 이미지도 텍스트처럼 처리할 수 있음을 보여준 혁신적인 모델이다. Transformer의 전역적 시야 덕분에 이미지 전반의 관계를 잘 포착하며, 대규모 데이터에서 CNN을 능가하는 성능을 보인다.(CNN은 Filter size만큼 학습하기 때문에 근처 픽셀의 영향을 많이 받는다)

 

 이러한 ViT는 2500일을 학습시키고 48만 달러를 학습 비용으로 사용할 만큼 시간과 돈이 많이 드는 모델이다.

728x90