Bird
Raised Fist0
PyTorchml~5 mins

Positional encoding in PyTorch - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is positional encoding in the context of machine learning models like Transformers?
Positional encoding is a way to add information about the order or position of elements in a sequence, so the model knows where each element is located since models like Transformers do not process data in order by default.
Click to reveal answer
beginner
Why do Transformers need positional encoding?
Transformers process all input tokens simultaneously without any inherent order. Positional encoding helps the model understand the sequence order, which is important for tasks like language understanding.
Click to reveal answer
intermediate
How is sinusoidal positional encoding calculated?
It uses sine and cosine functions of different frequencies to create unique position vectors. For position pos and dimension i: PE(pos, 2i) = sin(pos / 10000^(2i/d_model)) and PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model)). This helps the model learn relative positions.
Click to reveal answer
intermediate
What is the shape of the positional encoding tensor for a batch of sequences?
The positional encoding tensor usually has shape (sequence_length, embedding_dimension). When added to input embeddings, it matches the input shape (batch_size, sequence_length, embedding_dimension) by broadcasting over the batch.
Click to reveal answer
beginner
How does adding positional encoding affect the input embeddings in a Transformer?
Positional encoding is added element-wise to the input embeddings. This combined input carries both the token meaning and its position, allowing the Transformer to use position information during training and prediction.
Click to reveal answer
Why can't Transformers rely on sequence order without positional encoding?
ABecause they ignore input data
BBecause they only work with images
CBecause they use recurrent layers
DBecause they process all tokens simultaneously without order
Which functions are used in sinusoidal positional encoding?
ASine and cosine
BLinear and quadratic
CTangent and cotangent
DExponential and logarithm
What does the positional encoding vector depend on?
AThe batch size
BOnly the token value
CThe position in the sequence and embedding dimension
DThe model's output
How is positional encoding combined with input embeddings?
ABy adding them element-wise
BBy multiplying them
CBy concatenating them
DBy ignoring positional encoding
What is the main benefit of sinusoidal positional encoding?
AIt speeds up training
BIt allows the model to learn relative positions
CIt reduces model size
DIt removes the need for embeddings
Explain in your own words why positional encoding is important for Transformer models.
Think about how Transformers see all words at once.
You got /4 concepts.
    Describe how sinusoidal positional encoding is calculated and why sine and cosine functions are used.
    Focus on the math functions and their role in encoding position.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of positional encoding in transformer models?
      easy
      A. To increase the number of layers in the model
      B. To reduce the size of the input data
      C. To add information about the order of tokens in a sequence
      D. To normalize the input embeddings

      Solution

      1. Step 1: Understand the role of positional encoding

        Positional encoding adds information about the position of each token in the input sequence, which helps the model understand order. The other options relate to unrelated tasks such as increasing the number of layers, reducing input size, or normalizing embeddings.
      2. Final Answer:

        To add information about the order of tokens in a sequence -> Option C
      3. Quick Check:

        Positional encoding = order info [OK]
      Hint: Positional encoding = position info added to embeddings [OK]
      Common Mistakes:
      • Thinking positional encoding reduces data size
      • Confusing positional encoding with normalization
      • Assuming it increases model layers
      2. Which of the following is the correct way to compute the positional encoding for position pos and dimension i using sine and cosine functions in PyTorch?
      easy
      A. pos_enc[pos, i] = sin(pos * 10000^(i/d_model))
      B. pos_enc[pos, 2*i] = sin(pos / 10000^(2*i/d_model)); pos_enc[pos, 2*i+1] = cos(pos / 10000^(2*i/d_model))
      C. pos_enc[pos, i] = cos(pos / 10000^(i/d_model))
      D. pos_enc[pos, 2*i] = cos(pos / 10000^(2*i/d_model)); pos_enc[pos, 2*i+1] = sin(pos / 10000^(2*i/d_model))

      Solution

      1. Step 1: Recall the positional encoding formula

        Positional encoding uses sine for even indices and cosine for odd indices with the formula: pos_enc[pos, 2*i] = sin(pos / 10000^(2*i/d_model)); pos_enc[pos, 2*i+1] = cos(pos / 10000^(2*i/d_model)).
      2. Final Answer:

        pos_enc[pos, 2*i] = sin(pos / 10000^(2*i/d_model)); pos_enc[pos, 2*i+1] = cos(pos / 10000^(2*i/d_model)) -> Option B
      3. Quick Check:

        Sine even, cosine odd = pos_enc[pos, 2*i] = sin(pos / 10000^(2*i/d_model)); pos_enc[pos, 2*i+1] = cos(pos / 10000^(2*i/d_model)) [OK]
      Hint: Sine for even dims, cosine for odd dims in positional encoding [OK]
      Common Mistakes:
      • Swapping sine and cosine roles
      • Using multiplication instead of division in exponent
      • Applying sine or cosine to all dimensions only
      3. Given the following PyTorch code snippet for positional encoding, what is the shape of the output tensor pos_encoding?
      import torch
      import math
      
      def get_positional_encoding(seq_len, d_model):
          pos_encoding = torch.zeros(seq_len, d_model)
          for pos in range(seq_len):
              for i in range(0, d_model, 2):
                  pos_encoding[pos, i] = math.sin(pos / (10000 ** (i / d_model)))
                  if i + 1 < d_model:
                      pos_encoding[pos, i + 1] = math.cos(pos / (10000 ** (i / d_model)))
          return pos_encoding
      
      pos_encoding = get_positional_encoding(50, 512)
      medium
      A. [50, 512]
      B. [512, 50]
      C. [50, 256]
      D. [512, 512]

      Solution

      1. Step 1: Analyze function input parameters and output shape

        The function takes seq_len=50 and d_model=512, creating a tensor of zeros with shape (50, 512). The loops fill values in this tensor without changing its shape, so output shape remains (50, 512).
      2. Final Answer:

        [50, 512] -> Option A
      3. Quick Check:

        Output shape = (seq_len, d_model) = [50, 512] [OK]
      Hint: Output shape matches (sequence length, embedding dim) [OK]
      Common Mistakes:
      • Confusing dimensions order
      • Thinking output is half the embedding size
      • Assuming square matrix output
      4. Identify the error in this PyTorch positional encoding code and select the fix:
      import torch
      import math
      
      def positional_encoding(seq_len, d_model):
          pos_enc = torch.zeros(seq_len, d_model)
          for pos in range(seq_len):
              for i in range(d_model):
                  pos_enc[pos, i] = math.sin(pos / 10000 ** (i / d_model))
          return pos_enc
      
      pos_enc = positional_encoding(10, 16)
      medium
      A. Use sine for even indices and cosine for odd indices instead of sine only
      B. Change math.sin to torch.sin for GPU compatibility
      C. Initialize pos_enc with ones instead of zeros
      D. Remove the inner loop and use vectorized operations

      Solution

      1. Step 1: Review positional encoding formula and identify fix

        Positional encoding uses sine for even dimensions and cosine for odd dimensions, but code uses sine only. Use sine for even indices and cosine for odd indices instead of sine only correctly fixes this.
      2. Final Answer:

        Use sine for even indices and cosine for odd indices instead of sine only -> Option A
      3. Quick Check:

        Sine and cosine alternate = Use sine for even indices and cosine for odd indices instead of sine only [OK]
      Hint: Positional encoding alternates sine and cosine per dimension [OK]
      Common Mistakes:
      • Using sine only for all dimensions
      • Ignoring cosine for odd indices
      • Thinking initialization value causes error
      5. You want to add positional encoding to a batch of input embeddings with shape (batch_size, seq_len, d_model) in PyTorch. Which approach correctly applies positional encoding to each sequence in the batch?
      hard
      A. Create a positional encoding tensor of shape (batch_size, d_model) and multiply element-wise with input embeddings
      B. Create a positional encoding tensor of shape (seq_len,) and add it to input embeddings directly
      C. Create a positional encoding tensor of shape (batch_size, seq_len, 1) and concatenate it to input embeddings
      D. Create a positional encoding tensor of shape (seq_len, d_model) and add it to input embeddings using broadcasting

      Solution

      1. Step 1: Understand input and positional encoding shapes

        Input embeddings have shape (batch_size, seq_len, d_model). Positional encoding is per position and dimension, so shape (seq_len, d_model) fits. Adding it broadcasts over batch dimension correctly.
      2. Final Answer:

        Create a positional encoding tensor of shape (seq_len, d_model) and add it to input embeddings using broadcasting -> Option D
      3. Quick Check:

        Broadcast positional encoding over batch = Create a positional encoding tensor of shape (seq_len, d_model) and add it to input embeddings using broadcasting [OK]
      Hint: Broadcast positional encoding (seq_len, d_model) over batch [OK]
      Common Mistakes:
      • Using positional encoding without seq_len dimension
      • Multiplying instead of adding positional encoding
      • Concatenating positional encoding incorrectly
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard