So you’ve heard these AI terms and nodded along; let’s fix that
Back to Tutorials
aiTutorialintermediate

So you’ve heard these AI terms and nodded along; let’s fix that

May 29, 20264 views5 min read

Learn to implement and experiment with fundamental AI concepts including neural networks, transformers, and attention mechanisms through hands-on coding exercises.

Introduction

In the rapidly evolving world of artificial intelligence, understanding key technical terms is crucial for anyone working with or learning about AI systems. This tutorial will teach you how to implement and experiment with fundamental AI concepts including neural networks, transformers, and attention mechanisms using Python and popular libraries. By the end of this tutorial, you'll have built a practical understanding of these concepts through hands-on coding exercises.

Prerequisites

  • Basic Python programming knowledge
  • Familiarity with NumPy and Pandas
  • Understanding of linear algebra concepts
  • Python virtual environment setup
  • Installed libraries: torch, transformers, matplotlib

Step-by-step instructions

1. Setting up Your Environment

1.1 Create a Virtual Environment

First, we'll create a dedicated environment to avoid package conflicts. This ensures your AI experiments don't interfere with other Python projects.

python -m venv ai_tutorial_env
source ai_tutorial_env/bin/activate  # On Windows: ai_tutorial_env\Scripts\activate

1.2 Install Required Libraries

Install the essential libraries for our AI experiments. The transformers library gives us access to pre-trained models, while PyTorch provides the deep learning framework.

pip install torch transformers matplotlib numpy pandas

2. Understanding Neural Networks

2.1 Building a Simple Neural Network

Let's start by creating a basic neural network to understand how these systems work. Neural networks are the foundation of modern AI, consisting of layers of interconnected nodes.

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np

# Define a simple neural network
class SimpleNeuralNet(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleNeuralNet, self).__init__()
        self.layer1 = nn.Linear(input_size, hidden_size)
        self.layer2 = nn.Linear(hidden_size, output_size)
        self.relu = nn.ReLU()
        
    def forward(self, x):
        x = self.relu(self.layer1(x))
        x = self.layer2(x)
        return x

# Initialize the network
model = SimpleNeuralNet(input_size=10, hidden_size=20, output_size=1)
print(model)

2.2 Training the Neural Network

Now we'll train our network on synthetic data to see how it learns. This demonstrates the core concept of backpropagation and gradient descent.

# Create synthetic data
X = torch.randn(100, 10)
y = torch.randn(100, 1)

# Define loss function and optimizer
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# Training loop
for epoch in range(100):
    # Forward pass
    outputs = model(X)
    loss = criterion(outputs, y)
    
    # Backward pass and optimization
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    if (epoch + 1) % 20 == 0:
        print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')

3. Working with Transformers

3.1 Loading Pre-trained Transformer Models

Transformers are the backbone of modern language models. We'll load a pre-trained model to demonstrate how attention mechanisms work in practice.

from transformers import AutoTokenizer, AutoModelForSequenceClassification

# Load a pre-trained transformer model
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# Example text processing
text = "The quick brown fox jumps over the lazy dog."
tokenized_input = tokenizer(text, return_tensors="pt")
print("Tokenized input:", tokenized_input)

3.2 Understanding Attention Mechanisms

Attention mechanisms allow models to focus on different parts of input sequences. Let's create a simple attention implementation to visualize this concept.

import torch.nn.functional as F

# Simple attention implementation
def simple_attention(query, key, value):
    # Calculate attention scores
    scores = torch.matmul(query, key.transpose(-2, -1))
    scores = scores / torch.sqrt(torch.tensor(key.size(-1), dtype=torch.float32))
    
    # Apply softmax to get attention weights
    attention_weights = F.softmax(scores, dim=-1)
    
    # Apply attention weights to values
    output = torch.matmul(attention_weights, value)
    return output, attention_weights

# Example usage
batch_size, seq_len, hidden_size = 1, 4, 8
query = torch.randn(batch_size, seq_len, hidden_size)
key = torch.randn(batch_size, seq_len, hidden_size)
value = torch.randn(batch_size, seq_len, hidden_size)

output, weights = simple_attention(query, key, value)
print("Attention weights shape:", weights.shape)
print("Output shape:", output.shape)

4. Practical Application - Text Classification

4.1 Complete Text Classification Pipeline

Let's combine everything we've learned into a practical text classification example using transformers. This demonstrates how modern AI systems integrate neural networks and attention mechanisms.

from transformers import pipeline

# Create a text classification pipeline
classifier = pipeline("sentiment-analysis")

# Test with sample texts
texts = [
    "I love this product!",
    "This is terrible.",
    "The weather is okay."
]

# Run predictions
results = classifier(texts)
for text, result in zip(texts, results):
    print(f"Text: {text}")
    print(f"Sentiment: {result['label']}, Confidence: {result['score']:.4f}\n")

4.2 Visualizing Attention Weights

Finally, let's visualize how attention works in transformer models to better understand what's happening under the hood.

import matplotlib.pyplot as plt

# Function to visualize attention weights
def plot_attention_weights(attention_weights, tokens):
    fig, ax = plt.subplots(figsize=(10, 8))
    im = ax.imshow(attention_weights.numpy(), cmap='viridis', aspect='auto')
    
    # Add labels
    ax.set_xticks(range(len(tokens)))
    ax.set_yticks(range(len(tokens)))
    ax.set_xticklabels(tokens, rotation=45)
    ax.set_yticklabels(tokens)
    
    plt.colorbar(im)
    plt.title('Attention Weights')
    plt.tight_layout()
    plt.show()

# Example of using attention visualization
# Note: This requires accessing the attention weights from a model
# For demonstration, we'll create sample attention weights
sample_tokens = ['The', 'quick', 'brown', 'fox']
sample_attention = torch.rand(4, 4)  # Random attention weights
plot_attention_weights(sample_attention, sample_tokens)

5. Experimentation and Next Steps

5.1 Experiment with Different Models

Try different pre-trained models to see how they perform on your specific tasks. Each model has different strengths and characteristics.

# Try different models
models_to_test = [
    "bert-base-uncased",
    "roberta-base",
    "distilbert-base-uncased"
]

for model_name in models_to_test:
    try:
        model = AutoModelForSequenceClassification.from_pretrained(model_name)
        print(f"Successfully loaded {model_name}")
    except Exception as e:
        print(f"Failed to load {model_name}: {e}")

5.2 Modify Network Architecture

Experiment with different neural network architectures to understand how they affect performance.

# Create a more complex network
class ComplexNeuralNet(nn.Module):
    def __init__(self, input_size, hidden_sizes, output_size):
        super(ComplexNeuralNet, self).__init__()
        layers = []
        prev_size = input_size
        
        # Create hidden layers
        for hidden_size in hidden_sizes:
            layers.append(nn.Linear(prev_size, hidden_size))
            layers.append(nn.ReLU())
            layers.append(nn.Dropout(0.2))
            prev_size = hidden_size
        
        # Output layer
        layers.append(nn.Linear(prev_size, output_size))
        
        self.network = nn.Sequential(*layers)
    
    def forward(self, x):
        return self.network(x)

# Test the complex network
complex_model = ComplexNeuralNet(input_size=10, hidden_sizes=[20, 15, 10], output_size=1)
print("Complex model architecture:")
print(complex_model)

Summary

This tutorial provided hands-on experience with fundamental AI concepts including neural networks, transformers, and attention mechanisms. You've learned how to build simple neural networks, work with pre-trained transformer models, and understand attention mechanisms through practical coding exercises. These skills form the foundation for more advanced AI work, whether you're developing new models, fine-tuning existing ones, or analyzing AI system behavior. The key takeaway is that modern AI systems are built on these interconnected concepts, and understanding how they work together is essential for effective AI development.

Related Articles