Skip to main content

torchortho is a simple PyTorch package that efficiently implements the Hermite Activation function and other activation functions.

Project description

torchortho 📐

arXiv PyPI version License: GPL-3.0 Python Versions PWC

torchortho is a PyTorch library for learnable activation functions based on:

  • Hermite Polynomials 🧙‍♂️
  • Fourier Series
  • Tropical Polynomials & Rational Functions 🌴

These adaptive activations dynamically adjust during training, offering improved expressivity, better gradient flow, and enhanced generalization for vision and language models.


📜 Paper Reference

This library is based on the paper:
📄 Learnable Polynomial, Trigonometric, and Tropical Activations (Khalfaoui-Hassani & Kesselheim, 2025).

For experimental results, check our repos:

  • Vision models (ConvNeXt with torchortho activations): 🔗 GitHub
  • Language models (GPT-2 with torchortho activations): 🔗 GitHub

📦 Installation

Install from PyPI:

pip install torchortho

or install directly from GitHub:

pip install git+https://github.com/K-H-Ismail/torchortho.git

📝 Usage

You can use torchortho activations just like any other PyTorch activation:

Example: Using Hermite Activation

import torch
from torchortho import HermiteActivation

# Define a learnable Hermite activation
degree = 5
activation = HermiteActivation(degree)

# Forward pass
x = torch.rand(7, 4, 3, 2)
y = activation(x)

# Compute gradients
loss = y.sum()
loss.backward()

print("Gradients of activation coefficients:", activation.coefficients.grad)
print("Output:", y)

Example: Using Fourier Activation in a Neural Network

import torch
import torch.nn as nn
from torchortho import FourierActivation

class CustomMLP(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super().__init__()
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.activation = FourierActivation(degree=4)  # Learnable Fourier activation
        self.fc2 = nn.Linear(hidden_dim, output_dim)

    def forward(self, x):
        x = self.fc1(x)
        x = self.activation(x)
        return self.fc2(x)

# Initialize the model
model = CustomMLP(input_dim=10, hidden_dim=32, output_dim=1)
x = torch.randn(5, 10)
output = model(x)
print("Model Output:", output)

⚡ Why Use torchortho?

1️⃣ Adaptive and Learnable Activations

Unlike static activations (ReLU, GELU), torchortho functions dynamically adapt during training, allowing models to learn optimal activation functions for different tasks.

Activation Type Strengths
Hermite Activation Adaptive polynomial approximation, variance-preserving, smooth optimization
Fourier Activation Captures periodic structures in data (useful for NLP, physics-based models, and time-series)
Tropical Polynomial Activation Convex activation for structured learning (e.g., decision boundaries, optimization landscapes)
Rational Activation Generalizes standard activation functions (e.g., Pade approximants can replicate ReLU, GELU, or even SwiGLU)

2️⃣ Improved Expressivity and Gradient Flow

  • Better function approximation → Increases expressivity for deep networks.
  • Variance-preserving initialization → Ensures stable training, avoiding vanishing/exploding gradients.
  • More flexible than ReLU/SwiGLU → Adapts activation behavior based on data.

3️⃣ Benchmarked on Real-World Models

The effectiveness of torchortho activations has been validated on large-scale deep learning benchmarks:

Image Classification (ConvNeXt-T on ImageNet-1K)

  • Replacing GELU with torchortho activations improves top-1 accuracy.

Language Modeling (GPT-2 on OpenWebText)

  • Learnable activations reduce perplexity compared to GELU-based models.

For full benchmarks, see:

📜 License

This project is licensed under the GPL-3.0 License. See LICENSE for details.


🙌 Contributing

We welcome contributions! Feel free to submit issues, open PRs, or suggest improvements.


📬 Contact

For questions or collaborations, reach out via GitHub Issues.

📚 Citation

If you use torchortho in your research, please cite the following paper:

@article{khalfaoui2025learnable,
  title={Learnable polynomial, trigonometric, and tropical activations},
  author={Khalfaoui-Hassani, Ismail and Kesselheim, Stefan},
  journal={arXiv preprint arXiv:2502.01247},
  year={2025}
}

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

torchortho-0.1.2.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

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

torchortho-0.1.2-py3-none-any.whl (24.3 kB view details)

Uploaded Python 3

File details

Details for the file torchortho-0.1.2.tar.gz.

File metadata

  • Download URL: torchortho-0.1.2.tar.gz
  • Upload date:
  • Size: 21.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for torchortho-0.1.2.tar.gz
Algorithm Hash digest
SHA256 470107cc658faeae1265b37a80d2272c349f2a06eec0fb8765907bb78ad54b24
MD5 16d0a366d7b0f48f0fcb9af4cf5a3fbc
BLAKE2b-256 23de5c26224aade1d4eeb559145b6aac94c319adf65042eca415ef75d1d83361

See more details on using hashes here.

Provenance

The following attestation bundles were made for torchortho-0.1.2.tar.gz:

Publisher: python-publish.yml on K-H-Ismail/torchortho

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file torchortho-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: torchortho-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 24.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for torchortho-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d7b8cb36bd114d13d34116e92b027235d6e8312c11d802a24e5c2334aa6f5228
MD5 9d1f75e7bddfa8a00233bfcaf7e57208
BLAKE2b-256 f0656bc72f56b0e0dabeb6261e671f0c2fd81b7446eced1201d28915cc622692

See more details on using hashes here.

Provenance

The following attestation bundles were made for torchortho-0.1.2-py3-none-any.whl:

Publisher: python-publish.yml on K-H-Ismail/torchortho

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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