1P by GN⁺ | ★ favorite | 댓글 1개
  • Transformer에서 필수처럼 쓰이던 Layer Norm/RMSNorm 자리에 Dynamic Tanh(DyT)를 넣어도 기존 정규화 모델과 비슷하거나 더 나은 성능을 낼 수 있음을 보임
  • DyT는 DyT(x) = tanh(αx) 형태의 요소별 연산으로, Layer Normalization이 Transformer 안에서 종종 tanh와 비슷한 S자형 입출력 매핑을 만든다는 관찰에서 출발함
  • 구현은 PyTorch 몇 줄 수준이며, 학습 가능한 alpha, weight, biastanh(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로 설정됨
  • weightbias도 학습 가능한 파라미터로, 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는 정규화 기반 대응 모델과 유사하거나 더 나은 성능을 보임
  • 평가 범위는 인식부터 생성, 지도학습부터 자기지도학습, 컴퓨터 비전부터 언어 모델까지 넓게 걸쳐 있음

참고 자료

  • Download Paper: 연구의 전체 세부 내용이 담긴 논문
  • View on GitHub: 구현 세부 정보를 확인할 수 있는 저장소
  • View Summary: 연구 결과의 간단한 요약
  • Transformers without NormalizationCVPR 2025 논문으로 등록됨

댓글과 토론

Hacker News 의견들
  • 사실이라면 꽤 좋은 점진적 개선임. 모델 성능을 의미 있게 올리지는 않는 것 같지만, 현재 최첨단 LLM 대부분이 쓰는 RMSNorm보다 계산 비용이 낮아 학습이 더 빠르고 저렴해질 수 있음
    • 다만 Transformer 전체 계산량에서 RMSNorm 비중은 꽤 작음. 보통 축소 연산은 앞뒤 연산과 융합할 수 있음
    • 내 개인 Transformer 학습 벤치마크에 방금 적용해봤는데 결과가 매우 실망스러움. RMSNorm을 쓸 때보다 훨씬 느리게 수렴함
      alpha 조정은 별 효과가 없어서, 상당한 하이퍼파라미터 튜닝이나 더 정교한 초기화가 필요할 수 있음. PyTorch 기본 초기화와 직교 초기화를 모두 시도했지만 차이는 없었음
      혹은 내가 쓰는 스칼라 최적화기가 잘 맞지 않는 것일 수도 있음. Adam보다 수렴을 빠르게 하는 커스텀 스칼라 최적화기를 쓰는데, DyT 계층에서는 Adam과 비슷한 수준으로만 보였음
      아니면 수십억 토큰 이후에야 따라잡는 방식일 수도 있는데, 그렇게 오래 테스트할 예산은 없음
  • float8 같은 저정밀 형식을 쓰면 보통 정규화 전에 활성값을 BF16으로 올려야 함. 그래서 더 낮은 정밀도로 갈수록 정규화 계층이 차지하는 계산 비중이 커짐
    이런 계층을 대체할 수 있다면 계산 비용을 꽤 크게 줄이는 데 도움이 됨
  • 자세한 내용은 읽어봐야겠지만, 정규화 제거는 큰 의미가 있을 수 있음. 새 아키텍처를 시도할 때 네트워크가 제대로 정규화되도록 맞추는 일이 항상 번거로움
    tanh도 다른 영향이 있긴 할 것임. 정규화가 때로는 조건화 문제를 해결하고 있기 때문임. 그래도 대안이 많아지는 건 환영함
  • 그럼 기울기 소실은 이제 더 이상 문제가 아닌 건가?
    • 계층을 적절히 초기화하면 깊은 네트워크에서도 기울기 크기가 소실되거나 폭발하지 않게 유지할 수 있음. 예를 들어 각 계층 출력의 평균을 0, 표준편차를 1로 맞추면 기울기도 합리적인 범위에 들어옴
      Kaiming He 등의 원래 ResNet 논문과 후속 논문을 추천함
      RNN에 대한 현대적인 접근으로는 DeepMind의 https://arxiv.org/abs/2303.06349를 읽어볼 만함
      핵심은 가장 큰 고윳값, 즉 스펙트럼 반지름이 1 근처여야 한다는 것임. 선형 변환을 반복 적용해도 활성값이 커지거나 작아지지 않게 된다는 뜻임
    • ResNet이 기울기 소실은 거의 해결했다고 봄. 기울기 폭발은 보통 좋은 매개변수 초기화와 정규화로 다룸. 이 논문은 정규화의 대안을 제안하는 셈임
    • 좋은 질문임. 그건 tanh를 활성화 함수로 쓰던 시절, 그리고 잔차 연결과 정규화 계층이 있기 전의 문제였음. 다른 활성화 함수와 잔차 연결이 있는 상태에서 tanh를 정규화처럼 쓰는 건 괜찮아 보임
    • 그림에서 보듯이 Transformer는 잔차를 학습함. y = x + f(x) 형태임
  • 나만 그렇게 보이는 건지 모르겠지만, 논문 그래프가 LNinputLNoutput을 비교하면서 tanh(a*x) 뒤에도 가중치와 편향을 붙인 것 같음
    유사성을 보려면 LayerNorm 출력에서 가중치와 편향을 뺀 결과와 비교해야 하는 것 아닌가 싶음
    최종 결과가 잘 나오면 상관없겠지만, 실제로 바꾸는 부분만 따로 보면 무슨 일이 벌어지는지 더 잘 이해할 수 있을 것 같음
    • 구현을 보면 tanh를 계산한 뒤 가중치와 편향을 적용하는 것 같음
  • 실용적으로는 어떤 의미가 있음?
    • 초록에 따르면, DyT를 넣으면 정규화 없는 Transformer가 대부분 하이퍼파라미터 튜닝 없이도 정규화된 대응 모델과 성능이 같거나 더 나을 수 있음