Product

Wednesday, 21 February 2024

The Transformer Positional Encoding Layer in Keras, Part 2

 


In part 1, a gentle introduction to positional encoding in transformer models, we discussed the positional encoding layer of the transformer model. We also showed how you could implement this layer and its functions yourself in Python. In this tutorial, you’ll implement the positional encoding layer in Keras and Tensorflow. You can then use this layer in a complete transformer model.

After completing this tutorial, you will know:

  • Text vectorization in Keras
  • Embedding layer in Keras
  • How to subclass the embedding layer and write your own positional encoding layer.

Tutorial Overview

This tutorial is divided into three parts; they are:

  1. Text vectorization and embedding layer in Keras
  2. Writing your own positional encoding layer in Keras
    1. Randomly initialized and tunable embeddings
    2. Fixed weight embeddings from Attention Is All You Need
  3. Graphical view of the output of the positional encoding layer

The Import Section

First, let’s write the section to import all the required libraries:

The Text Vectorization Layer

Let’s start with a set of English phrases that are already preprocessed and cleaned. The text vectorization layer creates a dictionary of words and replaces each word with its corresponding index in the dictionary. Let’s see how you can map these two sentences using the text vectorization layer:

  1. I am a robot
  2. you too robot

Note the text has already been converted to lowercase with all the punctuation marks and noise in the text removed. Next, convert these two phrases to vectors of a fixed length 5. The TextVectorization layer of Keras requires a maximum vocabulary size and the required length of an output sequence for initialization. The output of the layer is a tensor of shape:

(number of sentences, output sequence length)

The following code snippet uses the adapt method to generate a vocabulary. It next creates a vectorized representation of the text.

The Embedding Layer

The Keras Embedding layer converts integers to dense vectors. This layer maps these integers to random numbers, which are later tuned during the training phase. However, you also have the option to set the mapping to some predefined weight values (shown later). To initialize this layer, you need to specify the maximum value of an integer to map, along with the length of the output sequence.

The Word Embeddings

Let’s see how the layer converts the vectorized_text to tensors.

The output has been annotated with some comments, as shown below. Note that you will see a different output every time you run this code because the weights have been initialized randomly.

Word embeddings.

Word embeddings. This output will be different every time you run the code because of the random numbers involved.

The Position Embeddings

You also need the embeddings for the corresponding positions. The maximum positions correspond to the output sequence length of the TextVectorization layer.


The output is shown below:

Position Indices Embedding.

Position indices embedding

The Output of Positional Encoding Layer in Transformers

In a transformer model, the final output is the sum of both the word embeddings and the position embeddings. Hence, when you set up both embedding layers, you need to make sure that the output_length is the same for both.

The output is shown below, annotated with comments. Again, this will be different from your run of the code because of the random weight initialization.

The final output after adding word embedding and position embedding

SubClassing the Keras Embedding Layer

When implementing a transformer model, you’ll have to write your own position encoding layer. This is quite simple, as the basic functionality is already provided for you. This Keras example shows how you can subclass the Embedding layer to implement your own functionality. You can add more methods to it as you require.

Let’s run this layer.

Positional Encoding in Transformers: Attention Is All You Need

Note the above class creates an embedding layer that has trainable weights. Hence, the weights are initialized randomly and tuned in to the training phase.
The authors of Attention Is All You Need have specified a positional encoding scheme, as shown below. You can read the full details in part 1 of this tutorial:
(,2)=sin(2/)(,2+1)=cos(2/)
If you want to use the same positional encoding scheme, you can specify your own embedding matrix, as discussed in part 1, which shows how to create your own embeddings in NumPy. When specifying the Embedding layer, you need to provide the positional encoding matrix as weights along with trainable=False. Let’s create another positional embedding class that does exactly this.

Next, we set up everything to run this layer.

Visualizing the Final Embedding

In order to visualize the embeddings, let’s take two bigger sentences: one technical and the other one just a quote. We’ll set up the TextVectorization layer along with the positional encoding layer and see what the final output looks like.

Now let’s see what the random embeddings look like for both phrases.

Random embeddings

Random embeddings

 

The embedding from the fixed weights layer are visualized below.

Embedding using sinusoidal positional encoding

Embedding using sinusoidal positional encoding

You can see that the embedding layer initialized using the default parameter outputs random values. On the other hand, the fixed weights generated using sinusoids create a unique signature for every phrase with information on each word position encoded within it.

You can experiment with tunable or fixed-weight implementations for your particular application.

Further Reading

This section provides more resources on the topic if you are looking to go deeper.

Books

Papers

Articles

Summary

In this tutorial, you discovered the implementation of positional encoding layer in Keras.

Specifically, you learned:

  • Text vectorization layer in Keras
  • Positional encoding layer in Keras
  • Creating your own class for positional encoding
  • Setting your own weights for the positional encoding layer in Keras

Do you have any questions about positional encoding discussed in this post? Ask your questions in the comments below, and I will do my best to answer.

No comments:

Post a Comment

Connect broadband

AI:List AI views on when for a naive kin after prolonged life suppression coercive behaviour by family members after demise of father with trauma for kin ocd formed after forced to do rituals, family tribal values honor specific activities, utmost religious activities occult witchcraft enforced to do by elder sibling his wife and mother thrice with great celibacy turned the kundalini activated after deep celibacy penance shouting physical Mental financial Extortion by sibling with toxic behaviours and the wife mother and then mockery suppression asking about who’re your worth backbiting among relatives sector toon negligence of intelligence intuitive behaviour- all religious psychological traps when not work and lead to loss of consciousness of kin trance state recovered by governance with technocrats using AI - kin was asked by mother that he’s to go the male should not be seen in house he’s many absurd thought forcefully in brain mind and outsiders already feel awkward of this kin unresponsive behaviour due to TBI PTSD ocd cvt and tell at workplace social gathering he’s to go and asked for sector toon extortion and mockery in various sense due to un practical behaviour negligence of body building due to neglect ion if essential food nutrition and stubbed suppressed in every sense in religious psychological traps by family members AI humanoid using various neural networks and LLMs for kin and required steps.

  List AI views on when for a naive kin after prolonged life suppression coercive behaviour by family members after demise of father with tr...