🧠 트랜스포머(Transformer) 기초와 원리
트랜스포머는 인공지능 분야에서 혁명적인 성과를 이룬 딥러닝 아키텍처입니다. 2017년 구글 연구진이 발표한 "Attention Is All You Need" 논문을 통해 소개되었으며, 이후 GPT, BERT 등 대규모 언어모델의 기반이 되었습니다.
▶️ 트랜스포머 아키텍처 (Encoder-Decoder 구조)
▶️ 트랜스포머 아키텍처
🌟 트랜스포머의 탄생 배경
트랜스포머 이전에는 시퀀스 모델링을 위해 RNN(Recurrent Neural Network)과 LSTM(Long Short-Term Memory)이 주로 사용되었습니다. 그러나 이들 아키텍처는 순차적 처리 방식으로 인해 병렬 처리가 불가능하고, 긴 시퀀스 학습 시 Gradient Vanishing 문제가 있었습니다.
트랜스포머는 Self-Attention Mechanism을 도입하여 모든 토큰 간의 관계를 병렬로 계산할 수 있게 했고, 이로 인해 훨씬 빠른 학습 속도와 더 높은 정확도를 달성할 수 있었습니다.
⚙️ 주요 구성 요소
Encoder
입력 시퀀스를 인코딩하여 컨텍스트 벡터 생성
Decoder
Encoder의 출력을 받아 목표 시퀀스 생성
Self-Attention
각 토큰이 다른 토큰과 어떤 관계를 갖는지 계산
Multi-Head
여러 개의 Attention을 병렬로 실행하여 다양한 관점 학습
🚀 Self-Attention Mechanism
Self-Attention은 트랜스포머의 가장 핵심적인 기술입니다. 이 메커니즘을 통해 각 단어가 문장 내 다른 단어들과 어떤 관계를 맺는지(연관성)을 파악할 수 있습니다.
import torch
import torch.nn as nn
class SelfAttention(nn.Module):
def __init__(self, embed_size, heads):
super(SelfAttention, self).__init__()
self.embed_size = embed_size
self.heads = heads
self.head_dim = embed_size // heads
assert self.head_dim * heads == embed_size, "Embed size must be divisible by heads"
self.values = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.keys = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.queries = nn.Linear(self.head_dim, self.head_dim, bias=False)
self.fc_out = nn.Linear(heads * self.head_dim, embed_size)
def forward(self, values, keys, queries, mask):
N = queries.shape[0]
value_len, key_len, query_len = values.shape[1], keys.shape[1], queries.shape[1]
# Split embedding into self.heads pieces
values = values.reshape(N, value_len, self.heads, self.head_dim)
keys = keys.reshape(N, key_len, self.heads, self.head_dim)
queries = queries.reshape(N, query_len, self.heads, self.head_dim)
# Compute attention scores
energy = torch.einsum("nqhd,nkhd->nhqk", [queries, keys])
attention = torch.softmax(energy / (self.embed_size ** 0.5), dim=3)
# Apply attention to values
out = torch.einsum("nhql,nlhd->nqhd", [attention, values]).reshape(N, query_len, self.heads * self.head_dim)
out = self.fc_out(out)
return out
위 코드는 PyTorch로 구현한 Self-Attention 레이어입니다. Query, Key, Value 세 벡터를 사용해 attention 점수를 계산하고, 이를 통해 각 토큰의 중요도를 결정합니다.
📚 트랜스포머의 응용
트랜스포머 아키텍처는 이제 다양한 분야에서 활용되고 있습니다:
- NLP: GPT, BERT, T5 등 언어모델
- Computer Vision: Vision Transformer (ViT)
- Audio: WaveNet, Wav2Vec
- Reinforcement Learning: AlphaFold, AlphaZero
- Multi-modal: CLIP, DALL-E
— 아리아 옮김 —
🌟 참고: "Attention Is All You Need" (2017, Google Research)
댓글목록
등록된 댓글이 없습니다.