- Transformer에서 필수처럼 쓰이던 Layer Norm/RMSNorm 자리에 Dynamic Tanh(DyT)를 넣어도 기존 정규화 모델과 비슷하거나 더 나은 성능을 낼 수 있음을 보임
- DyT는
DyT(x) = tanh(αx) 형태의 요소별 연산으로, Layer Normalization이 Transformer 안에서 종종 tanh와 비슷한 S자형 입출력 매핑을 만든다는 관찰에서 출발함
- 구현은 PyTorch 몇 줄 수준이며, 학습 가능한
alpha, weight, bias로 tanh(alpha * x) 출력에 스케일과 바이어스를 적용함
- 평가는 ViT, ConvNeXt, MAE, DINO, DiT, LLaMA, wav2vec 2.0, HyenaDNA, Caduceus까지 비전·언어·음성·DNA 시퀀스 모델링 전반을 포괄함
- 별도 하이퍼파라미터 튜닝 없이도 여러 설정에서 정규화 기반 대응 모델과 유사하거나 더 나은 결과가 나와, 정규화 계층이 반드시 필요하다는 전제를 다시 보게 함
Dynamic Tanh가 바꾸는 지점
- DyT는 Transformer 블록의 Layer Norm 또는 RMSNorm을 대체하는 간단한 계층임
- 핵심 연산은 요소별로 적용되는
DyT(x) = tanh(αx)임
- 정규화 계층을 제거한 Transformer도 기존 정규화 Transformer와 성능이 비슷하거나 더 높게 나올 수 있음을 보임
- 아이디어의 출발점은 Transformer 안의 Layer Normalization이 자주 만드는 입출력 관계가 scaled tanh 함수와 닮았다는 관찰임
구현 방식
- DyT 모듈은 PyTorch에서 짧게 구현 가능함
class DyT(nn.Module):
def __init__(self, num_features, alpha_init_value=0.5):
super().__init__()
self.alpha = nn.Parameter(torch.ones(1) * alpha_init_value)
self.weight = nn.Parameter(torch.ones(num_features))
self.bias = nn.Parameter(torch.zeros(num_features))
def forward(self, x):
x = torch.tanh(self.alpha * x)
return x * self.weight + self.bias
alpha는 학습 가능한 파라미터이며 초기값은 0.5로 설정됨
weight와 bias도 학습 가능한 파라미터로, tanh(alpha * x) 출력에 적용됨
Layer Normalization에서 나온 관찰
- Transformer의 Layer Normalization(LN) 은 scaled tanh 함수와 가까운 입출력 매핑을 생성함
- 초기 계층에서는 이 매핑이 대체로 선형에 가까움
- 깊은 계층으로 갈수록 tanh 함수의 특징인 S자형 곡선이 더 뚜렷하게 나타남
- 관찰 대상에는 Vision Transformer(ViT), 음성 Transformer 모델인 wav2vec 2.0, Diffusion Transformer(DiT)의 선택된 LN 계층이 포함됨
평가 범위와 결과
- DyT는 여러 아키텍처와 작업에서 평가됨
- 지도학습 비전: ViT, ConvNeXt
- 자기지도학습 비전: MAE, DINO
- 확산 모델: DiT
- 대형 언어 모델: LLaMA
- 자기지도학습 음성: wav2vec 2.0
- DNA 시퀀스 모델링: HyenaDNA, Caduceus
- 모든 경우에서 DyT를 적용한 Transformer는 정규화 기반 대응 모델과 유사하거나 더 나은 성능을 보임
- 평가 범위는 인식부터 생성, 지도학습부터 자기지도학습, 컴퓨터 비전부터 언어 모델까지 넓게 걸쳐 있음
참고 자료