Skip to main content

Zero-Cost Neural Architecture Search for MLPs

Project description

Zero-Cost Neural Architecture Search

License: MIT Python 3.6+

A Python package for efficient neural architecture search without training, based on zero-cost proxies.

Overview

Zero-Cost Neural Architecture Search (ZC-NAS) is a technique that allows finding good neural network architectures without the computational expense of training models. This package implements several zero-cost proxies from recent literature and combines them into an ensemble metric for more reliable architecture evaluation.

Paper Review

The concept of zero-cost neural architecture search was introduced in the paper "Neural Architecture Search without Training" by Mellor et al. (2021). The authors proposed a correlation-based metric that can predict the performance of neural network architectures by analyzing the correlation between activations of different data samples.

Subsequent works have expanded on this idea:

  • "Zero-Cost Proxies for Lightweight NAS" (Abdelfattah et al., 2021) introduced gradient-based metrics that measure the alignment of gradients across different samples.
  • "ZiCo: Zero-shot NAS via Inverse Coefficient of Variation on Gradients" (Li et al., 2022) proposed a metric based on the inverse coefficient of variation of gradients.
  • "Rapid Neural Architecture Search by Learning to Generate Graphs from Datasets" (Yan et al., 2022) explored dataset-aware architecture prediction.

This package implements these metrics and combines them into an ensemble for more robust architecture evaluation.

Method

My approach uses an ensemble of zero-cost proxies to evaluate neural network architectures without training. The ensemble score is a weighted combination of individual metrics such that, for an architecture $A$ on dataset $D$, is computed as

$$S_{ensemble}(A, D) = \sum_{i=1}^{n} w_i \cdot \text{normalize}(m_i(A, D))$$

where:

  • $m_i(A, D)$ is the $i$-th metric evaluated on architecture $A$ and dataset $D$
  • $\text{normalize}(\cdot)$ scales the metric to the range $[0, 1]$
  • $w_i$ is the weight assigned to the $i$-th metric
  • $n$ is the number of metrics in the ensemble

The metrics we use include:

  1. Activation Correlation (Mellor et al., 2021): Measures the correlation between activations of different samples.
  2. Gradient Conflict (Abdelfattah et al., 2021): Measures the alignment of gradients across different samples.
  3. ZiCo (Li et al., 2022): Measures the inverse coefficient of variation of gradients.
  4. Synflow (Tanaka et al., 2020): Measures the product of parameters and gradients.
  5. GraSP (Wang et al., 2020): Measures the gradient signal preservation.

Installation

pip install zcs

Or install from source:

git clone https://github.com/yourusername/zero_cost_search.git
cd zcs
pip install -e .

Usage

Command-Line Interface

The package provides a command-line interface for easy use:

# Basic usage
zcs --data your_data.pt --output results.json

# With visualization
zcs --data your_data.pt --output results.json --plot search_results.png

# Customizing the search space
zcs --data your_data.pt \
                 --depths 2 3 4 \
                 --widths 64 128 256 \
                 --activations relu tanh leaky_relu \
                 --num-samples 20

# Help
zcs --help

Python API

Basic Usage

import torch
from zcs import ZeroCostNAS

# Prepare your data
X = torch.randn(100, 20)  # 100 samples, 20 features
y = torch.randint(0, 3, (100,))  # 3 classes

# Initialize the NAS
nas = ZeroCostNAS(
    input_dim=20,  # Input dimension
    output_dim=3,  # Output dimension (number of classes)
    seed=42  # For reproducibility
)

# Quick prediction using meta-learning
predicted_config = nas.predict_architecture(X, y)
print(f"Predicted architecture: {predicted_config}")

# Full search with zero-cost proxies
result = nas.search(
    X=X,
    y=y,
    depths=[2, 3, 4],  # Network depths to consider
    widths=[64, 128, 256],  # Layer widths to consider
    activations=['relu', 'tanh', 'leaky_relu'],  # Activation functions
    num_samples=20,  # Number of architectures to evaluate
    use_meta_learning=True  # Use meta-learning to guide the search
)

# Get the best model
best_model = nas.get_best_model(include_dropout=0.2, include_batchnorm=True)
print(f"Best model: {best_model}")

# Get detailed results
summary = nas.get_results_summary()
print(f"Best configuration: {summary['best_config']}")
print(f"Best score: {summary['best_score']:.4f}")

Visualization

from zcs import plot_search_results

# Plot the search results
plot_search_results(result, save_path="search_results.png")

Logging

from zcs import setup_logger

# Set up logging
logger = setup_logger(level="INFO", log_file="zcs.log")

Contributing

Contributions are welcome! Please check out the contributing guidelines for details.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Citation

If you use this package in your project, please cite it using

@software{sadoune2025zerocost,
  title={Zero-Cost-Search: A Python Package for Zero-Cost Neural Architecture Search},
  author={Sadoune, Igor},
  year={2025},
  url={https://github.com/igorsadoune/zcs}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zcsearch-0.1.3.tar.gz (28.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zcsearch-0.1.3-py3-none-any.whl (28.5 kB view details)

Uploaded Python 3

File details

Details for the file zcsearch-0.1.3.tar.gz.

File metadata

  • Download URL: zcsearch-0.1.3.tar.gz
  • Upload date:
  • Size: 28.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for zcsearch-0.1.3.tar.gz
Algorithm Hash digest
SHA256 bd823dac697b19e48376f6b150315bb76763b3b81c2e32e75813525a122ad28f
MD5 cb06dc9626523440665645324cf72d65
BLAKE2b-256 f53c727b8f009ba4e5555bf8ccdd6d5778d53f7a9734f4aa4c142ebf0bd57b9d

See more details on using hashes here.

File details

Details for the file zcsearch-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: zcsearch-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 28.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for zcsearch-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f203f42c4dbc9fbe7cec1116b0726c7ce0e37022fe9e172f7e252140ca91b6f2
MD5 cd1cd781b15bdbfd8901908837b0269d
BLAKE2b-256 52372c76d06a5369d013fe37d0604b9bdf4e0b2379949a7bb813611040ad87c4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page