For self-attention mechanisms, the main goal is to improve how well the model understands relationships in data, especially sequences like sentences. Metrics like loss (how far predictions are from true answers) and accuracy (how often predictions are correct) matter most during training. When self-attention is used in tasks like language translation or text classification, metrics such as BLEU score or F1 score become important to measure quality. These metrics show if the model is paying attention to the right parts of the input.
Self-attention mechanism in PyTorch - Model Metrics & Evaluation
Self-attention itself is a mechanism inside models, so it doesn't have a confusion matrix directly. But when used in classification tasks, the confusion matrix helps us see how well the model predicts each class.
Confusion Matrix Example:
Predicted
Pos Neg
Pos TP FN
Neg FP TN
TP = True Positive
FP = False Positive
TN = True Negative
FN = False Negative
From this, we calculate precision, recall, and F1 score to understand model performance.
When self-attention helps a model classify text, precision and recall tell us different things:
- Precision means: When the model says "this is positive," how often is it right? High precision means few false alarms.
- Recall means: Of all actual positive cases, how many did the model find? High recall means few misses.
Example: In spam detection, high precision means few good emails are marked spam (important to avoid annoyance). High recall means catching most spam emails (important to keep inbox clean). Self-attention helps by focusing on important words to balance this tradeoff.
Good metrics when using self-attention in classification:
- Loss steadily decreases during training, showing the model learns.
- Accuracy above 80% on test data for simple tasks.
- Precision and recall both above 75%, indicating balanced performance.
- F1 score close to precision and recall, showing no big tradeoff.
Bad metrics:
- Loss stays high or fluctuates, meaning poor learning.
- Accuracy near random chance (e.g., 50% for two classes).
- Very high precision but very low recall, or vice versa, showing imbalance.
- F1 score much lower than precision or recall, indicating poor overall performance.
- Accuracy paradox: High accuracy can be misleading if classes are imbalanced. For example, if 90% of data is one class, predicting that class always gives 90% accuracy but no real learning.
- Data leakage: If test data leaks into training, metrics look too good but model fails in real use.
- Overfitting: Training loss very low but test loss high means model memorizes training data but doesn't generalize.
- Ignoring recall: In some tasks, missing important cases (low recall) is worse than false alarms.
Your model with self-attention has 98% accuracy but only 12% recall on fraud detection. Is it good for production? Why not?
Answer: No, it is not good. Even though accuracy is high, the model misses 88% of fraud cases (low recall). In fraud detection, missing fraud is very costly, so recall is more important. The model needs improvement to catch more fraud.
Practice
Solution
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.Step 2: Identify the main goal
The main goal is to focus on important parts, not to change input size or model layers.Final Answer:
To help the model focus on important parts of the input data -> Option DQuick Check:
Self-attention = focus on important parts [OK]
- Thinking self-attention changes input size
- Confusing self-attention with model depth
- Assuming it converts data formats
Q and key K tensors?Solution
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.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.Final Answer:
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(Q.size(-1)) -> Option AQuick Check:
Scaled dot-product = QxK^T / sqrt(d_k) [OK]
- Multiplying K by Q instead of Q by K^T
- Forgetting to transpose keys
- Using multiplication instead of division by sqrt
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)
Solution
Step 1: Analyze input tensor shapes
Q, K, V have shape (batch=2, seq_len=4, dim=8).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).Final Answer:
(2, 4, 8) -> Option BQuick Check:
Output shape = (batch, seq_len, dim) = (2,4,8) [OK]
- Confusing batch and sequence dimensions
- Mixing up transpose effects on shape
- Assuming output shape changes dimension size
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)
Solution
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.Step 2: Identify missing transpose
Code multiplies Q by K directly, causing shape mismatch or wrong attention scores.Final Answer:
K should be transposed before multiplication with Q -> Option CQuick Check:
QxK^T needed, missing transpose causes error [OK]
- Skipping transpose of K
- Applying softmax on wrong dimension
- Confusing shapes of Q and V
Solution
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.Step 2: Confirm dimension per head
Each head's query, key, and value vectors have dimension 8 to keep total dimension consistent.Final Answer:
8 -> Option AQuick Check:
32 total dim / 4 heads = 8 per head [OK]
- Using total dimension for each head
- Dividing by wrong number of heads
- Confusing batch size with dimension
Ready to prove it?
Pass the test and this pattern moves unknown
