pi-predicter

A neural network model that memorizes and predicts digits of π (pi) using Fourier feature encoding. This model demonstrates the memorization capabilities of MLPs with positional encodings by learning to predict specific digits of π at given positions.

Model Description

pi-predicter is a multi-layer perceptron (MLP) that takes a position index as input and predicts the corresponding digit of π at that position. The model uses Fourier feature encoding to transform integer positions into high-dimensional representations, enabling the network to memorize up to 100,000 digits of π.

Key Features:

  • Fourier Feature Encoding: 16 frequency components for positional encoding
  • Deep Architecture: 3 hidden layers with 512 dimensions each
  • Large Capacity: Trained on 100,000 digits of π
  • Efficient Inference: Instant digit prediction at any position within training range

Model Architecture

PiPredictor(
  ├── Input: position (integer)
  ├── Fourier Encoding: 16 frequencies → 32-dim vector
  ├── MLP: 32 → 512 → 512 → 512 → 10
  └── Output: digit probability distribution (0-9)
)

Intended Use

Primary Use Case

Memorization and retrieval of π digits for positions 1-100,000 (after decimal point). The model serves as a demonstration of neural network memorization capabilities and positional encoding techniques.

Limitations

  • Position Range: Only valid for positions 1-100,000 (training range)
  • No Generalization: Cannot predict digits beyond training range
  • Memorization Only: Not designed for mathematical computation or pattern discovery
  • Position 0: Integer part (3) not included in training

How to Use

Installation

pip install torch

Quick Start

import torch
from model import PiPredictor

# Load model
checkpoint = torch.load('model.pt', map_location='cpu')
config = checkpoint['config']

# Initialize model
model = PiPredictor(
    max_pos=checkpoint['model_max_pos'],
    num_frequencies=config['num_frequencies'],
    hidden_dims=config['hidden_dims'],
    dropout=config['dropout'],
    encoding=config['encoding'],
    embedding_dim=config['embedding_dim']
)

model.load_state_dict(checkpoint['model_state'])
model.eval()

# Predict digit at position 2 (should be 4: π = 3.14159...)
position = torch.tensor([2], dtype=torch.long)
with torch.no_grad():
    logits = model(position)
    predicted_digit = torch.argmax(logits, dim=-1).item()
    
print(f"Digit at position 2: {predicted_digit}")  # Output: 4

Batch Inference

# Predict multiple positions at once
positions = torch.tensor([1, 2, 3, 4, 5, 10, 100], dtype=torch.long)
with torch.no_grad():
    logits = model(positions)
    predictions = torch.argmax(logits, dim=-1)
    
# π = 3.1415926535...
# positions 1-5: [1, 4, 1, 5, 9]
print(predictions.tolist())  # [1, 4, 1, 5, 9, 5, 9]

Technical Notes

Fourier Feature Encoding

The model uses Fourier features to transform scalar positions into high-dimensional vectors:

  • 16 frequency components create a 32-dimensional embedding
  • Frequencies are likely sampled from a Gaussian distribution
  • This encoding enables the MLP to learn high-frequency functions of position

Memory Efficiency

Despite memorizing 100,000 digits, the model achieves this with only ~550k parameters, demonstrating the efficiency of neural networks as lookup tables for structured data.

License

This model is released under the MIT License.


Note: This model is intended for educational and demonstration purposes, showcasing neural network memorization capabilities rather than mathematical computation. The digits of π are deterministic and can be computed exactly using algorithms; this model demonstrates an alternative approach using machine learning techniques.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support