(rontolisp) docs
← torch パッケージの関数

torch:gelu

(torch:gelu a &key approximate)

ガウス誤差線形ユニット (PyTorch の nn.GELU / torch.nn.functional.gelu) です。 :approximate で定式化を選びます。

:approximate式PyTorch
:none (既定)x * (1 + erf(x / sqrt(2))) / 2approximate='none'
:tanhx * (1 + tanh(sqrt(2/pi) * (x + 0.044715 x^3))) / 2approximate='tanh'

既定は標準正規分布 X に対する x * P(X <= x) の厳密形で、 linalg:erf の上に構築されています。これは専用の随伴を持つ 1 つの演算で、その随伴は構成要素である 5 つの演算の逆伝播をそのまま綴っているため、 合成と厳密に同じ値を計算し、--gpu では 1 パスで実行されます。:tanh 形式は GPT/BERT の定式化で、torch の演算から 組み立てられており、厳密形とは 1e-3 程度で一致します。torch:relu と 違ってどこでも滑らかで、負側にもわずかな勾配を通します。Transformer の フィードフォワードブロックがこれを使うのはそのためです。