- 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 関数に似ているという観察である
実装方法
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は正規化ベースの対応モデルと同等またはより良い性能を示した
- 評価範囲は認識から生成、教師あり学習から自己教師あり学習、コンピュータビジョンから言語モデルまで幅広い
参考資料
1件のコメント
Hacker News のコメント
alpha の調整はほとんど効果がなく、かなりのハイパーパラメータ調整や、より精密な初期化が必要かもしれません。PyTorch のデフォルト初期化と直交初期化の両方を試しましたが、差はありませんでした
あるいは、自分が使っているスカラー最適化器との相性が悪いのかもしれません。Adam より収束を速めるカスタムのスカラー最適化器を使っていますが、DyT 層では Adam と同程度にしか見えませんでした
もしくは、数十億トークン後になってようやく追いつく方式なのかもしれませんが、そこまで長くテストする予算はありません
こうした層を置き換えられるなら、計算コストをかなり大きく下げる助けになります
tanh にも別の影響はあるはずです。正規化は時に条件付けの問題を解決しているからです。それでも、選択肢が増えるのは歓迎です
Kaiming He らによる元の ResNet 論文と、その後続論文をおすすめします
RNN に対する現代的なアプローチとしては、DeepMind の https://arxiv.org/abs/2303.06349 を読む価値があります
核心は、最大固有値、つまりスペクトル半径が 1 付近であるべきだということです。線形変換を繰り返し適用しても、活性値が大きくなったり小さくなったりしないという意味です
y = x + f(x)という形ですLNinputとLNoutputを比較する際に、tanh(a*x)の後にも重みとバイアスを付けているように見えます類似性を見るなら、LayerNorm の出力から重みとバイアスを取り除いた結果と比較すべきではないかと思います
最終結果が良ければ問題ないのでしょうが、実際に置き換えている部分だけを切り出して見ると、何が起きているのかをより理解しやすい気がします