1 poin oleh GN⁺ 2025-03-16 | 1 komentar | Bagikan ke WhatsApp
  • Menunjukkan bahwa mengganti Layer Norm/RMSNorm yang selama ini dianggap nyaris wajib di Transformer dengan Dynamic Tanh (DyT) tetap dapat menghasilkan performa yang setara atau lebih baik dibanding model berbasis normalisasi yang ada
  • DyT adalah operasi elemen-per-elemen berbentuk DyT(x) = tanh(αx), berangkat dari pengamatan bahwa Layer Normalization di dalam Transformer sering membentuk pemetaan masukan-keluaran berbentuk S yang mirip tanh
  • Implementasinya hanya beberapa baris di PyTorch, dan menerapkan skala serta bias pada keluaran tanh(alpha * x) dengan alpha, weight, dan bias yang dapat dipelajari
  • Evaluasi mencakup berbagai model untuk visi, bahasa, suara, dan pemodelan sekuens DNA, mulai dari ViT, ConvNeXt, MAE, DINO, DiT, LLaMA, wav2vec 2.0, HyenaDNA, Caduceus
  • Bahkan tanpa tuning hyperparameter tambahan, pada banyak pengaturan hasilnya setara atau lebih baik daripada model pembanding berbasis normalisasi, sehingga asumsi bahwa lapisan normalisasi itu wajib perlu ditinjau ulang

Titik perubahan yang dibawa Dynamic Tanh

  • DyT adalah lapisan sederhana yang menggantikan Layer Norm atau RMSNorm pada blok Transformer
  • Operasi intinya adalah DyT(x) = tanh(αx) yang diterapkan per elemen
  • Menunjukkan bahwa Transformer tanpa lapisan normalisasi pun dapat mencapai performa yang setara atau bahkan lebih tinggi daripada Transformer konvensional dengan normalisasi
  • Titik awal idenya adalah pengamatan bahwa hubungan masukan-keluaran yang sering dibentuk Layer Normalization di dalam Transformer menyerupai fungsi scaled tanh

Cara implementasi

  • Modul DyT dapat diimplementasikan secara singkat di 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 adalah parameter yang dapat dipelajari, dengan nilai awal 0.5
  • weight dan bias juga parameter yang dapat dipelajari, dan diterapkan pada keluaran tanh(alpha * x)

Pengamatan dari Layer Normalization

  • Layer Normalization (LN) pada Transformer menghasilkan pemetaan masukan-keluaran yang dekat dengan fungsi scaled tanh
  • Pada lapisan awal, pemetaan ini umumnya masih mendekati linear
  • Semakin ke lapisan yang lebih dalam, karakteristik kurva berbentuk S khas fungsi tanh makin jelas terlihat
  • Objek pengamatan mencakup Vision Transformer (ViT), model Transformer suara wav2vec 2.0, serta lapisan LN terpilih pada Diffusion Transformer (DiT)

Cakupan evaluasi dan hasil

  • DyT dievaluasi pada berbagai arsitektur dan tugas
    • Visi supervised: ViT, ConvNeXt
    • Visi self-supervised: MAE, DINO
    • Model difusi: DiT
    • Large language model: LLaMA
    • Suara self-supervised: wav2vec 2.0
    • Pemodelan sekuens DNA: HyenaDNA, Caduceus
  • Dalam semua kasus, Transformer yang menggunakan DyT menunjukkan performa yang setara atau lebih baik dibanding model pembanding berbasis normalisasi
  • Cakupan evaluasinya luas, dari recognition hingga generation, dari supervised hingga self-supervised, dan dari computer vision hingga language model

Referensi

  • Download Paper: makalah yang memuat detail lengkap penelitian
  • View on GitHub: repositori untuk melihat detail implementasi
  • View Summary: ringkasan singkat hasil penelitian
  • Transformers without Normalization terdaftar sebagai makalah CVPR 2025

1 komentar

 
GN⁺ 2025-03-16
Komentar di Hacker News
  • Jika benar, ini adalah peningkatan inkremental yang cukup bagus. Sepertinya tidak meningkatkan performa model secara signifikan, tetapi biaya komputasinya lebih rendah daripada RMSNorm yang dipakai sebagian besar LLM mutakhir saat ini, sehingga pelatihan bisa menjadi lebih cepat dan murah
    • Namun porsi RMSNorm dalam total komputasi Transformer cukup kecil. Biasanya operasi reduksi bisa digabungkan dengan operasi sebelum dan sesudahnya
    • Saya baru saja menerapkannya pada benchmark pelatihan Transformer pribadi saya, dan hasilnya sangat mengecewakan. Konvergensinya jauh lebih lambat dibanding saat memakai RMSNorm
      Penyesuaian alpha tidak banyak berpengaruh, jadi mungkin diperlukan tuning hiperparameter yang cukup besar atau inisialisasi yang lebih cermat. Saya mencoba inisialisasi default PyTorch maupun inisialisasi ortogonal, tetapi tidak ada bedanya
      Atau bisa jadi optimizer skalar yang saya gunakan tidak cocok. Saya memakai optimizer skalar kustom yang membuat konvergensi lebih cepat daripada Adam, tetapi pada lapisan DyT hasilnya hanya terlihat setara dengan Adam
      Atau mungkin ini baru menyusul setelah puluhan miliar token, tetapi saya tidak punya anggaran untuk menguji selama itu
  • Jika memakai format presisi rendah seperti float8, biasanya nilai aktivasi harus dinaikkan ke BF16 sebelum normalisasi. Karena itu, makin rendah presisinya, makin besar porsi komputasi yang diambil lapisan normalisasi
    Jika lapisan seperti ini bisa diganti, itu akan membantu mengurangi biaya komputasi secara cukup besar
  • Saya harus membaca detailnya dulu, tetapi menghilangkan normalisasi bisa sangat berarti. Saat mencoba arsitektur baru, memastikan jaringan ternormalisasi dengan benar selalu merepotkan
    tanh juga pasti punya dampak lain. Sebab normalisasi terkadang menyelesaikan masalah conditioning. Tetap saja, bertambahnya alternatif adalah hal yang patut disambut
  • Jadi apakah vanishing gradient sekarang bukan masalah lagi?
    • Jika lapisan diinisialisasi dengan tepat, besaran gradien dapat dijaga agar tidak menghilang atau meledak bahkan pada jaringan yang dalam. Misalnya, jika rata-rata keluaran tiap lapisan dibuat 0 dan standar deviasinya 1, gradien juga akan berada dalam rentang yang masuk akal
      Saya merekomendasikan makalah ResNet asli dari Kaiming He dkk. serta makalah-makalah lanjutannya
      Untuk pendekatan modern pada RNN, makalah DeepMind https://arxiv.org/abs/2303.06349 layak dibaca
      Intinya, nilai eigen terbesar, yaitu radius spektral, harus berada di sekitar 1. Artinya, meskipun transformasi linear diterapkan berulang kali, nilai aktivasi tidak akan membesar atau mengecil
    • ResNet bisa dibilang hampir menyelesaikan masalah vanishing gradient. Exploding gradient biasanya ditangani dengan inisialisasi parameter yang baik dan normalisasi. Makalah ini pada dasarnya mengusulkan alternatif untuk normalisasi
    • Pertanyaan bagus. Itu adalah masalah pada masa ketika tanh dipakai sebagai fungsi aktivasi, dan sebelum adanya residual connection serta lapisan normalisasi. Menggunakan tanh seperti normalisasi dalam kondisi sudah ada fungsi aktivasi lain dan residual connection tampaknya baik-baik saja
    • Seperti terlihat pada gambar, Transformer mempelajari residual. Bentuknya y = x + f(x)
  • Entah hanya saya yang melihatnya begitu, tetapi grafik di makalah tampaknya membandingkan LNinput dan LNoutput sambil tetap menambahkan bobot dan bias setelah tanh(a*x)
    Untuk melihat kemiripannya, bukankah seharusnya dibandingkan dengan hasil keluaran LayerNorm setelah bobot dan biasnya dihilangkan?
    Kalau hasil akhirnya bagus, tidak masalah, tetapi jika melihat hanya bagian yang benar-benar diganti, kita mungkin bisa lebih memahami apa yang sebenarnya terjadi
    • Dari implementasinya, sepertinya bobot dan bias diterapkan setelah menghitung tanh
  • Secara praktis, apa artinya?
    • Menurut abstraknya, dengan memasukkan DyT, Transformer tanpa normalisasi dapat menyamai atau bahkan melampaui performa model padanan yang dinormalisasi, kebanyakan tanpa tuning hiperparameter