Bird
Raised Fist0
PyTorchml~10 mins

Self-attention mechanism in PyTorch - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a linear layer for query vectors in self-attention.

PyTorch
import torch.nn as nn

class SelfAttention(nn.Module):
    def __init__(self, embed_size):
        super(SelfAttention, self).__init__()
        self.query = nn.Linear(embed_size, [1])
Drag options to blanks, or click blank then click option'
A1
B2 * embed_size
Cembed_size // 2
Dembed_size
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different output size than embed_size causes shape mismatch errors.
Setting output size to 1 loses information needed for attention.
2fill in blank
medium

Complete the code to compute the attention scores using matrix multiplication.

PyTorch
def forward(self, values, keys, queries):
    scores = torch.matmul(queries, [1].transpose(-2, -1))
    return scores
Drag options to blanks, or click blank then click option'
Avalues
Bkeys
Cscores
Dqueries
Attempts:
3 left
💡 Hint
Common Mistakes
Multiplying queries with values instead of keys.
Not transposing keys before multiplication.
3fill in blank
hard

Fix the error in scaling the attention scores by the square root of the key dimension.

PyTorch
import torch
import math

def forward(self, values, keys, queries):
    d_k = keys.size(-1)
    scores = torch.matmul(queries, keys.transpose(-2, -1))
    scaled_scores = scores / math.sqrt([1])
    return scaled_scores
Drag options to blanks, or click blank then click option'
Ad_k
Bqueries.size(-1)
Cvalues.size(-1)
Dkeys.size(0)
Attempts:
3 left
💡 Hint
Common Mistakes
Using queries size instead of keys size for scaling.
Using batch size or wrong dimension for scaling.
4fill in blank
hard

Fill both blanks to apply softmax on scaled scores and multiply by values to get attention output.

PyTorch
import torch.nn.functional as F

def forward(self, values, keys, queries):
    d_k = keys.size(-1)
    scores = torch.matmul(queries, keys.transpose(-2, -1)) / math.sqrt(d_k)
    attention = F.[1](scores, dim=[2])
    output = torch.matmul(attention, values)
    return output
Drag options to blanks, or click blank then click option'
Asoftmax
B-1
Crelu
Dtanh
Attempts:
3 left
💡 Hint
Common Mistakes
Using sigmoid or relu instead of softmax for attention weights.
Applying softmax on wrong dimension.
5fill in blank
hard

Fill all three blanks to complete a self-attention forward pass with query, key, value projections and output.

PyTorch
def forward(self, x):
    queries = self.query(x)
    keys = self.key(x)
    values = self.value(x)
    d_k = keys.size(-1)
    scores = torch.matmul(queries, keys.transpose(-2, -1)) / math.sqrt([1])
    attention = torch.nn.functional.[2](scores, dim=[3])
    out = torch.matmul(attention, values)
    return out
Drag options to blanks, or click blank then click option'
Ad_k
Bsoftmax
C-1
Dembed_size
Attempts:
3 left
💡 Hint
Common Mistakes
Using embed_size instead of d_k for scaling.
Using wrong activation instead of softmax.
Applying softmax on wrong dimension.

Practice

(1/5)
1. What is the main purpose of the self-attention mechanism in models like Transformers?
easy
A. To convert input data into images
B. To increase the size of the input data
C. To reduce the number of layers in the model
D. To help the model focus on important parts of the input data

Solution

  1. Step 1: Understand self-attention's role

    Self-attention helps the model decide which parts of the input are important by comparing each part to others.
  2. Step 2: Identify the main goal

    The main goal is to focus on important parts, not to change input size or model layers.
  3. Final Answer:

    To help the model focus on important parts of the input data -> Option D
  4. Quick Check:

    Self-attention = focus on important parts [OK]
Hint: Self-attention means focusing on important input parts [OK]
Common Mistakes:
  • Thinking self-attention changes input size
  • Confusing self-attention with model depth
  • Assuming it converts data formats
2. Which of the following is the correct PyTorch code snippet to compute scaled dot-product attention scores given query Q and key K tensors?
easy
A. scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(Q.size(-1))
B. scores = torch.matmul(K, Q.transpose(-2, -1)) * math.sqrt(Q.size(-1))
C. scores = torch.matmul(Q, K) / Q.size(0)
D. scores = torch.matmul(Q.transpose(-2, -1), K) / math.sqrt(K.size(-1))

Solution

  1. Step 1: Recall scaled dot-product attention formula

    Attention scores = (Q x K^T) / sqrt(d_k), where d_k is the dimension of keys.
  2. Step 2: Match formula with code

    scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(Q.size(-1)) correctly transposes K, multiplies Q and K^T, and divides by sqrt of last dimension size.
  3. Final Answer:

    scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(Q.size(-1)) -> Option A
  4. Quick Check:

    Scaled dot-product = QxK^T / sqrt(d_k) [OK]
Hint: Transpose keys and divide by sqrt of key dimension [OK]
Common Mistakes:
  • Multiplying K by Q instead of Q by K^T
  • Forgetting to transpose keys
  • Using multiplication instead of division by sqrt
3. Given the following PyTorch code for self-attention, what is the shape of the output tensor attn_output?
import torch
Q = torch.randn(2, 4, 8)  # batch=2, seq_len=4, dim=8
K = torch.randn(2, 4, 8)
V = torch.randn(2, 4, 8)

scores = torch.matmul(Q, K.transpose(-2, -1)) / (8 ** 0.5)
weights = torch.nn.functional.softmax(scores, dim=-1)
attn_output = torch.matmul(weights, V)
medium
A. (4, 2, 8)
B. (2, 4, 8)
C. (2, 8, 4)
D. (4, 8, 2)

Solution

  1. Step 1: Analyze input tensor shapes

    Q, K, V have shape (batch=2, seq_len=4, dim=8).
  2. Step 2: Understand matrix multiplications

    Scores shape: (2,4,4), weights shape: (2,4,4), multiplying weights (2,4,4) by V (2,4,8) results in (2,4,8).
  3. Final Answer:

    (2, 4, 8) -> Option B
  4. Quick Check:

    Output shape = (batch, seq_len, dim) = (2,4,8) [OK]
Hint: Output shape matches Q and V batch and seq_len dims [OK]
Common Mistakes:
  • Confusing batch and sequence dimensions
  • Mixing up transpose effects on shape
  • Assuming output shape changes dimension size
4. Identify the error in this PyTorch self-attention code snippet:
import torch
Q = torch.randn(1, 3, 5)
K = torch.randn(1, 3, 5)
V = torch.randn(1, 3, 5)

scores = torch.matmul(Q, K) / (5 ** 0.5)
weights = torch.nn.functional.softmax(scores, dim=-1)
output = torch.matmul(weights, V)
medium
A. Q and V should have the same shape
B. Softmax should be applied on dim=0 instead of dim=-1
C. K should be transposed before multiplication with Q
D. Division by sqrt(5) is incorrect

Solution

  1. Step 1: Check matrix multiplication for scores

    Q shape is (1,3,5), K shape is (1,3,5). To multiply Q by K^T, K must be transposed on last two dims.
  2. Step 2: Identify missing transpose

    Code multiplies Q by K directly, causing shape mismatch or wrong attention scores.
  3. Final Answer:

    K should be transposed before multiplication with Q -> Option C
  4. Quick Check:

    QxK^T needed, missing transpose causes error [OK]
Hint: Always transpose keys before multiplying with queries [OK]
Common Mistakes:
  • Skipping transpose of K
  • Applying softmax on wrong dimension
  • Confusing shapes of Q and V
5. You want to implement multi-head self-attention in PyTorch with 4 heads. If your input tensor has shape (batch=2, seq_len=6, dim=32), what should be the dimension size of each head's query, key, and value vectors?
hard
A. 8
B. 4
C. 16
D. 32

Solution

  1. Step 1: Understand multi-head attention dimension split

    Total dimension 32 is split evenly across 4 heads, so each head gets 32 / 4 = 8 dimensions.
  2. Step 2: Confirm dimension per head

    Each head's query, key, and value vectors have dimension 8 to keep total dimension consistent.
  3. Final Answer:

    8 -> Option A
  4. Quick Check:

    32 total dim / 4 heads = 8 per head [OK]
Hint: Divide total dim by number of heads for each head size [OK]
Common Mistakes:
  • Using total dimension for each head
  • Dividing by wrong number of heads
  • Confusing batch size with dimension
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