gpt2 / src /model /norm.py
triton329's picture
Upload folder using huggingface_hub
c21e887 verified
Raw
History Blame Contribute Delete
721 Bytes
import torch
import torch.nn as nn
class LayerNorm(nn.Module):
"""
Layer normalisation: squeezes outputs to mean 0 and variance 1.
eps avoids division by zero.
scale/shift are learnable affine parameters.
"""
def __init__(self, embed_dim, eps=1e-5):
super().__init__()
self.eps = eps
self.embed_dim = embed_dim
self.scale = nn.Parameter(torch.ones(self.embed_dim))
self.shift = nn.Parameter(torch.zeros(self.embed_dim))
def forward(self, x):
mean = x.mean(dim=-1, keepdim=True)
var = x.var(dim=-1, keepdim=True, unbiased=False)
norm_x = (x - mean) / torch.sqrt(var + self.eps)
return self.scale * norm_x + self.shift