Transformer 파헤치기

PyTorch로 배우는 Transformer 모델

James Chapman

Curriculum Manager, DataCamp

모든 것을 바꾼 논문...

 

  • Ashish Vaswani 외, Attention Is All You Need (arXiv:1706.03762)
    • 어텐션 메커니즘
    • 텍스트 모델링 최적화
    • 대규모 언어 모델(LLM)에 활용

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

모든 것을 바꾼 논문...

 

  • Ashish Vaswani 외, Attention Is All You Need
    • 어텐션 메커니즘
    • 텍스트 모델링 최적화
    • 대규모 언어 모델(LLM)에 활용

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

모든 것을 바꾼 논문...

 

  • Ashish Vaswani 외, Attention Is All You Need
    • 어텐션 메커니즘
    • 텍스트 모델링 최적화
    • 대규모 언어 모델(LLM)에 활용

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

Transformer 분해하기...

 

인코더 블록
  • 동일한 레이어를 여러 개 사용
  • 입력 시퀀스 읽기처리
  • 컨텍스트가 풍부한 수치 표현 생성
  • Self-attention피드포워드 네트워크 사용

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

Transformer 분해하기...

 

디코더 블록
  • 인코딩된 입력 시퀀스 → 출력 시퀀스

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

Transformer 분해하기...

 

위치 인코딩
  • 각 토큰의 시퀀스 내 _위치_를 인코딩
  • 순서는 시퀀스 모델링에 중요

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

Transformer 분해하기...

어텐션 메커니즘
  • 중요한 토큰과 관계에 집중
  • 텍스트 생성 개선

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

Transformer 분해하기...

어텐션 메커니즘
  • 중요한 토큰과 관계에 집중
  • 텍스트 생성 개선
셀프 어텐션
  • 토큰 중요도 가중치 부여
  • 장기 의존성 포착

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

Transformer 분해하기...

어텐션 메커니즘
  • 중요한 토큰과 관계에 집중
  • 텍스트 생성 개선
셀프 어텐션
  • 토큰 중요도 가중치 부여
  • 장기 의존성 포착
멀티헤드 어텐션
  • 입력을 여러 헤드로 분할
  • 각 헤드가 다른 패턴을 포착해 더 풍부한 표현 형성

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

Transformer 분해하기...

 

위치별 피드포워드 네트워크
  • 변환을 적용하는 단순한 신경망
  • 각 토큰을 독립적으로 변환
  • 위치 비의존적/“position-wise”

학술 논문 ‘Attention Is All You Need’에 제시된 Transformer 아키텍처.

PyTorch로 배우는 Transformer 모델

PyTorch에서의 Transformer

 

  • d_model: 모델 입력 차원수
  • nheads: 어텐션 헤드 수
  • num_encoder_layers: 인코더 레이어 수
  • num_decoder_layers: 디코더 레이어 수
import torch.nn as nn


model = nn.Transformer(
d_model=512,
nhead=8,
num_encoder_layers=6,
num_decoder_layers=6
)
print(model)
PyTorch로 배우는 Transformer 모델
Transformer(
  (encoder): TransformerEncoder(
    (layers): ModuleList(
      (0-5): 6 x TransformerEncoderLayer(
        (self_attn): MultiheadAttention(
          (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)
        )
        (linear1): Linear(in_features=512, out_features=2048, bias=True)
        (dropout): Dropout(p=0.1, inplace=False)
        (linear2): Linear(in_features=2048, out_features=512, bias=True)
        (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.1, inplace=False)
        (dropout2): Dropout(p=0.1, inplace=False)
      )
    )
    (norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
  )
  ...
PyTorch로 배우는 Transformer 모델
  (decoder): TransformerDecoder(
    (layers): ModuleList(
      (0-5): 6 x TransformerDecoderLayer(
        (self_attn): MultiheadAttention(
          (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)
        )
        (multihead_attn): MultiheadAttention(
          (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)
        )
        (linear1): Linear(in_features=512, out_features=2048, bias=True)
        (dropout): Dropout(p=0.1, inplace=False)
        (linear2): Linear(in_features=2048, out_features=512, bias=True)
        (norm1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (norm2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (norm3): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
        (dropout1): Dropout(p=0.1, inplace=False)
        (dropout2): Dropout(p=0.1, inplace=False)
        (dropout3): Dropout(p=0.1, inplace=False)
      )
    )
    (norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
  )
)
PyTorch로 배우는 Transformer 모델

연습해 봅시다!

PyTorch로 배우는 Transformer 모델

Preparing Video For Download...