Created
December 27, 2025 14:42
-
-
Save wheremyfoodat/7b7e1a839fab17431dbf11f8a81e89ff to your computer and use it in GitHub Desktop.
Sigmoid function approximations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 123, | |
| "id": "1bd1d8dd", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import torch\n", | |
| "import torch.nn as nn\n", | |
| "\n", | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 124, | |
| "id": "bcaf36e7", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def sigmoid_numpy(x):\n", | |
| " return 1.0 / (1.0 + np.exp(-x))\n", | |
| "\n", | |
| "# Neural network to find approximation formulae for the sigmoid function in a given range. We look for solutions with the general form of an N-order polynomial\n", | |
| "# By piecing together multiple of these solutions for different boundaries, with some fixups (to guarantee monotony/continuity, etc) we can derive a \n", | |
| "# very good, hardware-friendly sigmoid approximation\n", | |
| "class SigmoidApproximator(nn.Module):\n", | |
| " def __init__(self, lowerBound, upperBound, order = 5):\n", | |
| " assert lowerBound < upperBound\n", | |
| " super(SigmoidApproximator, self).__init__()\n", | |
| "\n", | |
| " self.lowerBound = lowerBound\n", | |
| " self.upperBound = upperBound\n", | |
| " self.terms = nn.Parameter(torch.randn(order + 1))\n", | |
| " self.offsetTerm = torch.Tensor([self.lowerBound])\n", | |
| "\n", | |
| " self.lossFn = nn.MSELoss()\n", | |
| " \n", | |
| " def forward(self, x):\n", | |
| " sum = torch.broadcast_to(self.terms[0], x.shape)\n", | |
| " x_power = torch.ones_like(x)\n", | |
| " x_multiplier = x - torch.broadcast_to(self.offsetTerm, x.shape)\n", | |
| " \n", | |
| " for i in range(1, len(self.terms)):\n", | |
| " x_power = x_power * x_multiplier\n", | |
| " sum = sum + x_power * self.terms[i]\n", | |
| " return sum\n", | |
| " \n", | |
| " def loss(self, y_pred, y_true):\n", | |
| " # Apply penalty for any values outside [0, 1], the proper output range of the sigmoid function\n", | |
| " penalty = 0.0\n", | |
| " penaltyFactor = 0\n", | |
| " \n", | |
| " # Penalties if prediction is < 0 or > 1\n", | |
| " penalty += torch.sum(torch.relu(-y_pred)) * penaltyFactor\n", | |
| " penalty += torch.sum(torch.relu(y_pred - 1.0)) * penaltyFactor\n", | |
| " \n", | |
| " # Total loss = MSE loss + penalty\n", | |
| " return self.lossFn(y_pred, y_true) + penalty\n", | |
| " \n", | |
| " def paramsToFloat(self):\n", | |
| " # Convert parameters from tensors to floats and return them\n", | |
| " return (np.array([term.data.float() for term in self.terms]), self.offsetTerm.data.float())\n", | |
| "\n", | |
| "def getSigmoidApproximation(*, lowerBound, upperBound, N, epochs, order):\n", | |
| " nn = SigmoidApproximator(lowerBound, upperBound, order = order)\n", | |
| " nn.train()\n", | |
| "\n", | |
| " optimizer = torch.optim.Adam(nn.parameters(), lr = 0.001)\n", | |
| "\n", | |
| " # Generate N samples from lowerBound to upperBound\n", | |
| " x = np.linspace(lowerBound, upperBound, N)\n", | |
| " y_true = torch.Tensor(sigmoid_numpy(x))\n", | |
| "\n", | |
| " x = torch.Tensor(x)\n", | |
| " \n", | |
| " for epoch in range(0, epochs):\n", | |
| " optimizer.zero_grad()\n", | |
| " y_pred = nn(x)\n", | |
| "\n", | |
| " loss = nn.loss(y_pred, y_true)\n", | |
| " loss.backward()\n", | |
| " optimizer.step()\n", | |
| "\n", | |
| " return nn.paramsToFloat()\n", | |
| "\n", | |
| "def plotApproximation(lowerBound, upperBound, terms):\n", | |
| " # Plot full sigmoid function\n", | |
| " x = np.linspace(-8, 8, 10000)\n", | |
| " y = sigmoid_numpy(x)\n", | |
| " plt.plot(x, y, color = \"blue\", label = \"Numpy sigmoid\")\n", | |
| " \n", | |
| " terms, offsetTerm = terms\n", | |
| "\n", | |
| " # Plot approximation for boundary\n", | |
| " x = np.linspace(lowerBound, upperBound, 10000)\n", | |
| " y = np.broadcast_to(terms[0], x.shape)\n", | |
| " x_power = np.ones_like(x)\n", | |
| " x_multiplier = x - np.broadcast_to(offsetTerm, x.shape)\n", | |
| "\n", | |
| " for i in range(1, len(terms)):\n", | |
| " x_power *= x_multiplier\n", | |
| " y = y + x_power * terms[i]\n", | |
| " \n", | |
| " plt.plot(x, y, color = \"orange\", label = \"Approximation for given boundary\")\n", | |
| "\n", | |
| " plt.legend()\n", | |
| " plt.show()\n", | |
| " \n", | |
| "def printParameters(lowerBound, upperBound, terms):\n", | |
| " coefficients, offset = terms\n", | |
| "\n", | |
| " print(f\"Estimated parameters for bound [{lowerBound}, {upperBound}]\")\n", | |
| " print(\"Polynomial coefficients:\", coefficients)\n", | |
| " print(\"Offset term: \", offset)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 125, | |
| "id": "d1ce19d4", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def getAndGraphApproximator(*, lowerBound, upperBound, N = 1000, epochs = 100000, order = 5):\n", | |
| " terms = getSigmoidApproximation(lowerBound = lowerBound, upperBound = upperBound, N = N, epochs = epochs, order = order)\n", | |
| " printParameters(lowerBound, upperBound, terms)\n", | |
| " plotApproximation(lowerBound, upperBound, terms)\n", | |
| " \n", | |
| " return terms" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "b37f90a6", | |
| "metadata": {}, | |
| "source": [ | |
| "Approximator for $x \\in [0.0, 1.0]$" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 126, | |
| "id": "d7b7c6df", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Estimated parameters for bound [0, 1]\n", | |
| "Polynomial coefficients: [ 0.5010008 0.22136687 0.19342738 -0.5231247 0.5537795 -0.21612851]\n", | |
| "Offset term: tensor([0.])\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([ 0.5010008 , 0.22136687, 0.19342738, -0.5231247 , 0.5537795 ,\n", | |
| " -0.21612851], dtype=float32),\n", | |
| " tensor([0.]))" | |
| ] | |
| }, | |
| "execution_count": 126, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "lower, upper = 0, 1\n", | |
| "\n", | |
| "getAndGraphApproximator(lowerBound = lower, upperBound = upper)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "9d3a677e", | |
| "metadata": {}, | |
| "source": [ | |
| "Approximator for $x \\in [1.0, 2.0]$" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 127, | |
| "id": "a0e0d824", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Estimated parameters for bound [1, 2]\n", | |
| "Polynomial coefficients: [ 0.7320988 0.16688538 0.15533534 -0.5270234 0.57939947 -0.22665948]\n", | |
| "Offset term: tensor([1.])\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([ 0.7320988 , 0.16688538, 0.15533534, -0.5270234 , 0.57939947,\n", | |
| " -0.22665948], dtype=float32),\n", | |
| " tensor([1.]))" | |
| ] | |
| }, | |
| "execution_count": 127, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "lower, upper = 1, 2\n", | |
| "\n", | |
| "getAndGraphApproximator(lowerBound = lower, upperBound = upper)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "406503b1", | |
| "metadata": {}, | |
| "source": [ | |
| "Approximator for $x \\in [2.0, 3.0]$" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 128, | |
| "id": "711fb1be", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Estimated parameters for bound [2, 3]\n", | |
| "Polynomial coefficients: [ 0.88158137 0.08256347 0.11147195 -0.3865234 0.433558 -0.17065544]\n", | |
| "Offset term: tensor([2.])\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([ 0.88158137, 0.08256347, 0.11147195, -0.3865234 , 0.433558 ,\n", | |
| " -0.17065544], dtype=float32),\n", | |
| " tensor([2.]))" | |
| ] | |
| }, | |
| "execution_count": 128, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "lower, upper = 2, 3\n", | |
| "\n", | |
| "getAndGraphApproximator(lowerBound = lower, upperBound = upper)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "8b7d9a07", | |
| "metadata": {}, | |
| "source": [ | |
| "Approximator for $x \\in [3, 4]$" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 131, | |
| "id": "990a5c68", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Estimated parameters for bound [3, 4]\n", | |
| "Polynomial coefficients: [ 0.95209116 0.05905316 -0.1141415 0.24869199 -0.26870516 0.10539465]\n", | |
| "Offset term: tensor([3.])\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABNqUlEQVR4nO3deVhUZf8G8HsYNlFAAUFQFFwC1HIBRdw1xdTKLcGfpmJokbnirqWmlmZZ7piJmDtpalpoYuaSSyiK+ipivmIo4IILiwvr8/vjvIyMLDJsh5m5P9d1rnnmcGbme1hmbp7nnOcohBACRERERDIxkLsAIiIi0m8MI0RERCQrhhEiIiKSFcMIERERyYphhIiIiGTFMEJERESyYhghIiIiWTGMEBERkawM5S6gOHJycpCQkABzc3MoFAq5yyEiIqJiEEIgNTUVDg4OMDAovP9DK8JIQkICHB0d5S6DiIiISuDWrVuoU6dOoV/XijBibm4OQNoZCwsLmashIiKi4khJSYGjo6Pqc7wwWhFGcodmLCwsGEaIiIi0zKsOseABrERERCQrhhEiIiKSFcMIERERyUorjhkpDiEEsrKykJ2dLXcpRKQnlEolDA0NOeUAUSnpRBjJyMhAYmIinj59KncpRKRnzMzMYG9vD2NjY7lLIdJaWh9GcnJyEBsbC6VSCQcHBxgbG/O/FCIqd0IIZGRk4P79+4iNjUWjRo2KnNSJiAqn9WEkIyMDOTk5cHR0hJmZmdzlEJEeqVKlCoyMjPDvv/8iIyMDpqamcpdEpJV0JsbzPxIikgPfe4hKj39FREREJCuNw8ixY8fwzjvvwMHBAQqFAnv27HnlY44ePQp3d3eYmpqifv36 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment