From 3228fffe243be6e7e3e1bd34da4b1dc809827ceb Mon Sep 17 00:00:00 2001 From: Phil Wang Date: Thu, 2 Dec 2021 10:53:17 -0800 Subject: [PATCH] add query-key normalization attention --- README.md | 57 +++++++++++++++++++++++++++ images/cosine-sim-attention.png | Bin 0 -> 80201 bytes setup.py | 2 +- x_transformers/x_transformers.py | 64 +++++++++++++++++++++++-------- 4 files changed, 105 insertions(+), 18 deletions(-) create mode 100644 images/cosine-sim-attention.png diff --git a/README.md b/README.md index f2929bd7..426bbee4 100644 --- a/README.md +++ b/README.md @@ -810,6 +810,9 @@ model = TransformerWrapper( sandwich_norm = True # set this to True ) ) + +x = torch.randint(0, 20000, (1, 1024)) +model(x) ``` ### Normformer @@ -883,6 +886,38 @@ model(x) The last change is a layernorm right after the outwards projection in attention. This is actually identical to the sandwich norm proposed by the Coqview paper, so you can use this by simply setting `sandwich_norm = True`, although it would also add it to the feedforward layer. +## Query-Key Normalization + + + +This paper proposes to l2 normalize the queries and keys along the head dimension before the dot product (cosine similarity), with the additional change of the scale being learned rather than static. The normalization prevents the attention operation from overflowing, a perennial problem when training transformers. + +This was validated at scale recently by the training of a 3B parameter vision transformer. The SwinV2 paper also proposes to change the pre-layernorm to a post-layernorm for further stability. + +I have validated that this works just as well as dot product attention in an autoregressive setting, if one were to initialize the temperature as proposed in the QK-norm paper (as a function of the sequence length). + +You can use it as follows + +```python +import torch +from x_transformers import TransformerWrapper, Decoder + +model = TransformerWrapper( + num_tokens = 20000, + max_seq_len = 1024, + attn_layers = Decoder( + dim = 512, + depth = 6, + heads = 8, + use_qk_norm_attn = True, # set this to True + qk_norm_attn_seq_len = 1024 # set this to max_seq_len from above + ) +) + +x = torch.randint(0, 20000, (1, 1024)) +model(x) +``` + ## Miscellaneous Cross Attention @@ -1291,4 +1326,26 @@ model(x, mask = mask) # (1, 1024, 100) } ``` +```bibtex +@misc{henry2020querykey, + title = {Query-Key Normalization for Transformers}, + author = {Alex Henry and Prudhvi Raj Dachapally and Shubham Pawar and Yuxuan Chen}, + year = {2020}, + eprint = {2010.04245}, + archivePrefix = {arXiv}, + primaryClass = {cs.CL} +} +``` + +```bibtex +@misc{liu2021swin, + title = {Swin Transformer V2: Scaling Up Capacity and Resolution}, + author = {Ze Liu and Han Hu and Yutong Lin and Zhuliang Yao and Zhenda Xie and Yixuan Wei and Jia Ning and Yue Cao and Zheng Zhang and Li Dong and Furu Wei and Baining Guo}, + year = {2021}, + eprint = {2111.09883}, + archivePrefix = {arXiv}, + primaryClass = {cs.CV} +} +``` + *solve intelligence... then use that to solve everything else.* - Demis Hassabis diff --git a/images/cosine-sim-attention.png b/images/cosine-sim-attention.png new file mode 100644 index 0000000000000000000000000000000000000000..49427b87e1f6d8cb72f5cc7320eddb6eed82639f GIT binary patch literal 80201 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 literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index 8ac95f0c..a9668dd5 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name = 'x-transformers', packages = find_packages(exclude=['examples']), - version = '0.20.9', + version = '0.21.0', license='MIT', description = 'X-Transformers - Pytorch', author = 'Phil Wang', diff --git a/x_transformers/x_transformers.py b/x_transformers/x_transformers.py index f45e4cd3..68ecacc8 100644 --- a/x_transformers/x_transformers.py +++ b/x_transformers/x_transformers.py @@ -61,6 +61,9 @@ def __call__(self, x, *args, **kwargs): def max_neg_value(tensor): return -torch.finfo(tensor.dtype).max +def l2norm(t): + return F.normalize(t, p = 2, dim = -1) + # init helpers def init_zero_(layer): @@ -425,10 +428,13 @@ def __init__( on_attn = False, gate_values = False, zero_init_output = False, - max_attend_past = None + max_attend_past = None, + qk_norm = False, + scale_init_value = None ): super().__init__() self.scale = dim_head ** -0.5 + self.heads = heads self.causal = causal self.max_attend_past = max_attend_past @@ -454,6 +460,12 @@ def __init__( nn.init.constant_(self.to_v_gate.weight, 0) nn.init.constant_(self.to_v_gate.bias, 1) + # cosine sim attention + self.qk_norm = qk_norm + if qk_norm: + scale_init_value = default(scale_init_value, -3) # if not provided, initialize as though it were sequence length of 1024 + self.scale = nn.Parameter(torch.ones(1, heads, 1, 1) * scale_init_value) + # talking heads self.talking_heads = talking_heads if talking_heads: @@ -498,7 +510,7 @@ def forward( prev_attn = None, mem = None ): - b, n, _, h, talking_heads, collab_heads, head_scale, device, has_context = *x.shape, self.heads, self.talking_heads, self.collab_heads, self.head_scale, x.device, exists(context) + b, n, _, h, talking_heads, collab_heads, head_scale, scale, device, has_context = *x.shape, self.heads, self.talking_heads, self.collab_heads, self.head_scale, self.scale, x.device, exists(context) kv_input = default(context, x) q_input = x @@ -551,7 +563,11 @@ def forward( if collab_heads: k = k.expand(-1, h, -1, -1) - dots = einsum('b h i d, b h j d -> b h i j', q, k) * self.scale + if self.qk_norm: + q, k = map(l2norm, (q, k)) + scale = 1 / (self.scale.exp().clamp(min = 1e-2)) + + dots = einsum('b h i d, b h j d -> b h i j', q, k) * scale mask_value = max_neg_value(dots) if exists(prev_attn): @@ -659,6 +675,8 @@ def __init__( scale_residual = False, shift_tokens = 0, sandwich_norm = False, + use_qk_norm_attn = False, + qk_norm_attn_seq_len = None, zero_init_branch_output = False, **kwargs ): @@ -717,6 +735,12 @@ def __init__( if macaron: default_block = ('f',) + default_block + # qk normalization + + if use_qk_norm_attn: + attn_scale_init_value = -math.log(math.log2(qk_norm_attn_seq_len ** 2 - qk_norm_attn_seq_len)) if exists(qk_norm_attn_seq_len) else None + attn_kwargs = {**attn_kwargs, 'qk_norm': True, 'scale_init_value': attn_scale_init_value} + # zero init if zero_init_branch_output: @@ -753,7 +777,9 @@ def __init__( # iterate and construct layers - for layer_type, layer_shift_tokens in zip(self.layer_types, shift_tokens): + for ind, (layer_type, layer_shift_tokens) in enumerate(zip(self.layer_types, shift_tokens)): + is_last_layer = ind == (len(self.layer_types) - 1) + if layer_type == 'a': layer = Attention(dim, heads = heads, causal = causal, **attn_kwargs) elif layer_type == 'c': @@ -775,13 +801,18 @@ def __init__( residual_fn = GRUGating if gate_residual else Residual residual = residual_fn(dim, scale_residual = scale_residual) - if sandwich_norm: - norm = nn.ModuleList([norm_fn(), norm_fn()]) - else: - norm = norm_fn() + pre_branch_norm = norm_fn() if sandwich_norm and not use_qk_norm_attn else None + post_branch_norm = norm_fn() if sandwich_norm or use_qk_norm_attn else None + post_main_norm = norm_fn() if not pre_norm and not is_last_layer else None + + norms = nn.ModuleList([ + pre_branch_norm, + post_branch_norm, + post_main_norm + ]) self.layers.append(nn.ModuleList([ - norm, + norms, layer, residual ])) @@ -819,11 +850,10 @@ def forward( residual = x - if self.sandwich_norm: - norm, postnorm = norm + pre_branch_norm, post_branch_norm, post_main_norm = norm - if self.pre_norm: - x = norm(x) + if exists(pre_branch_norm): + x = pre_branch_norm(x) if layer_type == 'a': out, inter = block(x, mask = mask, attn_mask = attn_mask, sinusoidal_emb = self.pia_pos_emb, rel_pos = self.rel_pos, rotary_pos_emb = rotary_pos_emb, prev_attn = prev_attn, mem = layer_mem) @@ -832,8 +862,8 @@ def forward( elif layer_type == 'f': out = block(x) - if self.sandwich_norm: - out = postnorm(out) + if exists(post_branch_norm): + out = post_branch_norm(out) x = residual_fn(out, residual) @@ -845,8 +875,8 @@ def forward( elif layer_type == 'c' and self.cross_residual_attn: prev_cross_attn = inter.pre_softmax_attn - if not self.pre_norm and not is_last: - x = norm(x) + if exists(post_main_norm): + x = post_main_norm(x) if return_hiddens: intermediates = LayerIntermediates(