깊이 혼합(MoD)이 토큰을 동적으로 라우팅하여 AI 효율성을 최적화하는 방식을 살펴보세요. 이 기법이 Ultralytics 및 대규모 언어 모델(LLM)에서 연산량(FLOPs)을 어떻게 줄이는지 알아보세요.
딥 러닝 아키텍처에서는 특히 긴 시퀀스나 고해상도 입력을 처리할 때 계산 효율성이 가장 중요하다. 새로운 접근법은 네트워크가 입력의 어느 부분이 완전한 처리가 필요한지, 어느 부분이 특정 레이어를 안전하게 우회할 수 있는지 결정하도록 허용함으로써 계산 자원을 동적으로 할당한다. 이 동적 라우팅 전략은 모델의 예측 능력이나 정확도를 희생하지 않으면서 전체 계산 복잡성을 줄인다.
깊이 혼합(Mixture of Depths, MoD)은 주로 트랜스포머 아키텍처에 적용되는 기술로, 모델이 다양한 레이어에서 특정 토큰에 대한 계산을 동적으로 건너뛰도록 학습합니다. 기존 트랜스포머는 중요한 정보든 채우기 콘텐츠든 모든 토큰을 모든 레이어를 통해 처리합니다. 반면 MoD 모델은 라우터 메커니즘을 사용하여 토큰을 평가하고 점수를 할당합니다. 사전 정의된 용량 한도 내에서 가장 높은 점수를 받은 토큰들만이 어텐션 메커니즘이나 밀집 전이 (dense feed-forward) 레이어와 같은 중량급 계산 블록을 통과합니다. 나머지 토큰들은 잔류 연결(residual connection)을 통해 블록을 우회하며, 이로 인해 서로 다른 토큰들이 각기 다른 수준의 처리 깊이를 경험하는 "깊이의 혼합(mixture of depths)"이 효과적으로 생성됩니다.
이 방법은 최근 딥마인드 연구를 통해 대중화되었으며 arXiv 저장소에 광범위하게 기록되어 있으며, 훈련과 추론 과정에서 필요한 총 부동소수점 연산량(FLOPs) 을 획기적으로 감소시킵니다.
이 개념을 전문가 혼합(Mixture of Experts, MoE)과 혼동하기 쉽습니다. 둘 다 라우팅 메커니즘을 사용하지만, 해결하는 문제는 다릅니다:
동적으로 컴퓨팅 자원을 할당하는 능력은 이 기법을 컴퓨터 비전과 자연어 처리의 다양한 분야에서 매우 가치 있게 만듭니다.
아래는 기본적인 라우팅 메커니즘이 입력 토큰의 일부에 대한 계산을 건너뛰어 깊이 라우팅 동작을 시뮬레이션하는 방법을 보여주는 개념적인 PyTorch 조각입니다.
import torch
import torch.nn as nn
class MixtureOfDepthsBlock(nn.Module):
def __init__(self, d_model, capacity_factor=0.5):
super().__init__()
self.capacity_factor = capacity_factor
self.router = nn.Linear(d_model, 1)
self.heavy_compute = nn.Sequential(nn.Linear(d_model, d_model * 4), nn.GELU(), nn.Linear(d_model * 4, d_model))
def forward(self, x):
# x shape: (batch_size, seq_len, d_model)
seq_len = x.size(1)
capacity = int(seq_len * self.capacity_factor)
# 1. Compute routing scores
scores = self.router(x).squeeze(-1) # Shape: (batch_size, seq_len)
# 2. Identify top-k tokens to process
topk_indices = torch.topk(scores, capacity, dim=1).indices
# 3. Create an output tensor mirroring the input (residual baseline)
output = x.clone()
# 4. Apply heavy computation only to the selected tokens
for b in range(x.size(0)):
selected_tokens = x[b, topk_indices[b]]
processed_tokens = self.heavy_compute(selected_tokens)
output[b, topk_indices[b]] += processed_tokens
return output
# Example usage
dummy_input = torch.randn(2, 64, 128) # Batch=2, Seq=64, Dim=128
mod_block = MixtureOfDepthsBlock(d_model=128, capacity_factor=0.5)
output = mod_block(dummy_input)
print(f"Output shape: {output.shape}") # Expect (2, 64, 128)
PyTorch 나 TensorFlow개발자는 이러한 맞춤형 모델 최적화 블록을 통합할 수 있습니다. 또한 Ultralytics 같은 도구는 팀이 이러한 라우터를 정확하게 훈련하는 데 필요한 훈련 데이터를 관리하는 동시에 Google AI와 같은 기업 생태계와 원활하게 통합하는 데 도움을 줍니다.