Created
October 30, 2024 15:48
-
-
Save andreasgrv/8a30363bdb7ab42db486ab7873f24774 to your computer and use it in GitHub Desktop.
Softmax-Permutohedron.ipynb
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
| { | |
| "nbformat": 4, | |
| "nbformat_minor": 0, | |
| "metadata": { | |
| "colab": { | |
| "provenance": [], | |
| "authorship_tag": "ABX9TyOJOOYZxOQxu9pSQduDkRIT", | |
| "include_colab_link": true | |
| }, | |
| "kernelspec": { | |
| "name": "python3", | |
| "display_name": "Python 3" | |
| }, | |
| "language_info": { | |
| "name": "python" | |
| } | |
| }, | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "view-in-github", | |
| "colab_type": "text" | |
| }, | |
| "source": [ | |
| "<a href=\"https://colab.research.google.com/gist/andreasgrv/8a30363bdb7ab42db486ab7873f24774/softmax-permutohedron.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "# Low-Rank Softmax and Shadows of the Permutohedron\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "## Problem: When N > D+1, some rankings cannot be predicted.\n" | |
| ], | |
| "metadata": { | |
| "id": "muKYMKF2_yZI" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "import numpy as np\n", | |
| "\n", | |
| "from math import factorial\n", | |
| "from scipy.special import softmax\n", | |
| "\n", | |
| "\n", | |
| "np.set_printoptions(precision=2)\n", | |
| "\n", | |
| "\n", | |
| "N_SAMPLES = 50000\n", | |
| "N = 4\n", | |
| "D = 2\n", | |
| "\n", | |
| "# Feature representations\n", | |
| "xx = np.random.normal(0, 1, (N_SAMPLES, D))\n", | |
| "\n", | |
| "## ==== The parameters of the Linear Softmax Layer ====\n", | |
| "W = np.random.normal(0, 1, (N, D))\n", | |
| "\n", | |
| "print('\\nSoftmax W is:\\n', W, '\\n')\n", | |
| "\n", | |
| "logits = xx.dot(W.T)\n", | |
| "probs = softmax(logits, axis=1)\n", | |
| "\n", | |
| "rankings = np.argsort(probs, axis=1)\n", | |
| "# Compute which rank\n", | |
| "pred_rankings = set(tuple(r) for r in rankings)\n", | |
| "print('%d/%d rankings were predicted' % (len(pred_rankings), factorial(N)))\n", | |
| "print('The predicted rankings of classes are:')\n", | |
| "for r in sorted(pred_rankings):\n", | |
| " print('\\t', r)\n" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "4Oq_08oh_8sl", | |
| "outputId": "d3acb39c-fe18-4c48-c4dc-ddb26018f0fb" | |
| }, | |
| "execution_count": 27, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "\n", | |
| "Softmax W is:\n", | |
| " [[ 0.99 0.28]\n", | |
| " [-1.43 0.57]\n", | |
| " [-0.57 -1.51]\n", | |
| " [-0.24 0.82]] \n", | |
| "\n", | |
| "12/24 rankings were predicted\n", | |
| "The predicted rankings of classes are:\n", | |
| "\t (0, 2, 3, 1)\n", | |
| "\t (0, 3, 1, 2)\n", | |
| "\t (0, 3, 2, 1)\n", | |
| "\t (1, 2, 3, 0)\n", | |
| "\t (1, 3, 0, 2)\n", | |
| "\t (1, 3, 2, 0)\n", | |
| "\t (2, 0, 1, 3)\n", | |
| "\t (2, 0, 3, 1)\n", | |
| "\t (2, 1, 0, 3)\n", | |
| "\t (2, 1, 3, 0)\n", | |
| "\t (3, 0, 1, 2)\n", | |
| "\t (3, 1, 0, 2)\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "# Which Rankings are Feasible?\n", | |
| "\n", | |
| "" | |
| ], | |
| "metadata": { | |
| "id": "6-VDyJ9cFrsb" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "from scipy.spatial import ConvexHull\n", | |
| "from itertools import permutations\n", | |
| "\n", | |
| "\n", | |
| "def permutohedron(n):\n", | |
| " return np.array(list(permutations(np.arange(n))))\n", | |
| "\n", | |
| "\n", | |
| "pp = permutohedron(N)\n", | |
| "pp_proj = (pp).dot(W)\n", | |
| "\n", | |
| "c_hull = ConvexHull(pp_proj)\n", | |
| "surviving_vertices = np.argsort(pp[c_hull.vertices], axis=1)\n", | |
| "\n", | |
| "proj_rankings = set(tuple(p) for p in surviving_vertices)\n", | |
| "print('\\nSurviving vertices of the permutohedron, are:')\n", | |
| "for p in sorted(proj_rankings):\n", | |
| " print('\\t', p)\n", | |
| "\n", | |
| "\n", | |
| "assert proj_rankings == pred_rankings" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "ZDUQIKZhAgUc", | |
| "outputId": "8b5f4b9d-5275-4061-9fc8-72d1cbb9a0a1" | |
| }, | |
| "execution_count": 28, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "\n", | |
| "Surviving vertices of the permutohedron, are:\n", | |
| "\t (0, 2, 3, 1)\n", | |
| "\t (0, 3, 1, 2)\n", | |
| "\t (0, 3, 2, 1)\n", | |
| "\t (1, 2, 3, 0)\n", | |
| "\t (1, 3, 0, 2)\n", | |
| "\t (1, 3, 2, 0)\n", | |
| "\t (2, 0, 1, 3)\n", | |
| "\t (2, 0, 3, 1)\n", | |
| "\t (2, 1, 0, 3)\n", | |
| "\t (2, 1, 3, 0)\n", | |
| "\t (3, 0, 1, 2)\n", | |
| "\t (3, 1, 0, 2)\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "import matplotlib.pyplot as plt\n", | |
| "\n", | |
| "fig, ax = plt.subplots(figsize=(10, 10))\n", | |
| "ax.scatter(*pp_proj.T, s=50, color='red')\n", | |
| "ax.scatter(*pp_proj[c_hull.vertices].T, s=50, color='green')\n", | |
| "for idx in c_hull.vertices:\n", | |
| " ax.text(*pp_proj[idx], ', '.join(map(str, np.argsort(pp[idx]))))\n", | |
| "plt.show()" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 830 | |
| }, | |
| "id": "MuUSus1nCpku", | |
| "outputId": "e6d706b9-41d0-4fc1-d9b7-71d880e004b6" | |
| }, | |
| "execution_count": 29, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 1000x1000 with 1 Axes>" | |
| ], | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1MAAAMtCAYAAAB6kCstAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABmjElEQVR4nO3de3xU5b3v8e9cJASTCQSEkBIu4g2US4oUQwImJQKKmsjRY9lWQCMaiVqJZStWgVZbPOXWVk2CbQ94WilYNVwCXmiUkHCTW1pBoScYChIS2OSYIWl2IDNz/hgJRkiYWclcknzer9d6TdeaZz3rl9nIzpfnMiaXy+USAAAAAMAr5kAXAAAAAABtEWEKAAAAAAwgTAEAAACAAYQpAAAAADCAMAUAAAAABhCmAAAAAMAAwhQAAAAAGGANdAHNcTqdKisrU3h4uEwmU6DLAQAAABAgLpdLZ86cUXR0tMzm4BgTCuowVVZWppiYmECXAQAAACBIHDt2TH369Al0GZKCPEyFh4dLcn9gNpstwNUAAAAACBS73a6YmJiGjBAMgjpMnZ/aZ7PZCFMAAAAAgmr5T3BMNgQAAACANoYwBQAAAAAGEKYAAAAAwADCFAAAAAAYQJgCAAAAAAMIUwAAAABgAGEKAAAAAAwgTAEAAACAAYQpAAAAADCAMAUAAAAABhCmAAAAAMAAwhQAAAAAGECYAgAAAAADCFMAAAAAYABhCgAAAAAMIEwBAAAAgAGEKQAAAAAwwG9h6pVXXpHJZNLTTz/tr0cCAAAAgM/4JUzt2rVLy5Yt09ChQ/3xOAAAAADwOZ+Hqerqaj3wwAP6/e9/r27duvn6cQAAAADgFz4PUxkZGZo0aZKSk5Mv27aurk52u73RAQAAAADByOrLzletWqW9e/dq165dHrVfsGCBfv7zn/uyJAAAAABoFT4bmTp27Jh+8pOf6K233lLnzp09umfOnDmqqqpqOI4dO+ar8gAAAACgRXwWpvbs2aOTJ0/q+9//vqxWq6xWqwoKCvS73/1OVqtVDofjontCQkJks9kaHQDQ0S1YsEAjR45UeHi4evbsqdTUVB06dMjrfo4ePapJkyapS5cu6tmzp2bPnq36+nqv+tiyZYvuuusuRUdHy2Qyac2aNV7XIUl33323+vbtq86dO6t379568MEHVVZWZqgvAAACxWdhaty4cfrss89UXFzccNx888164IEHVFxcLIvF4qtHA0C7UlBQoIyMDO3YsUObNm3SuXPnNH78eNXU1Hjch8Ph0KRJk3T27Flt27ZNb775plasWKG5c+d6VUtNTY2GDRum119/3dsfo5GkpCS9/fbbOnTokN59910dPnxY9957b4v6BADA30wul8vlr4clJiZq+PDh+s1vfuNRe7vdroiICFVVVTFKBQDfOHXqlHr27KmCggKNHTvWo3vef/993XnnnSorK1OvXr0kSTk5OXr22Wd16tQpderUyes6TCaTcnNzlZqa6vW937Vu3Tqlpqaqrq5OV1xxRYv7AwC0P8GYDfz2pb0AAO/U2itVUbpftfbKRterqqokSZGRkR73tX37dg0ZMqQhSEnShAkTZLfbdeDAgdYp2KDKykq99dZbGj16NEEKANCm+HQ3v+/avHmzPx8HAG1SUV6WluS/rLW2E3KaJbNTSrH31jPJLyru9sf09NNPKz4+XjfddJPHfZaXlzcKUpIazsvLy1u1fk89++yzeu211/Tvf/9bt9xyi/Ly8gJSBwAARjEyBQBBJHvxFI3dnaH14e4gJUlOs7Q+/ITG7JqpxITrtX//fq1atSqwhbaC2bNna9++ffroo49ksVg0depU+XHmOQAALebXkSkAQNOK8rKUcWaVXCap/jt79NRbJG2QCg+V6O0lv1CfPn286jsqKkqffvppo2sVFRUN7wVCjx491KNHD1133XUaNGiQYmJitGPHDsXFxQWkHgAAvMXIFAAEiSX5L8vivMQbLkkbJB2ULD+WVh/I8brvuLg4ffbZZzp58mTDtU2bNslms2nw4MGGa24tTqf7B6+rqwtwJQAAeI6RKQAIArX2yoY1UhfZIOkzSVMkR6j0nqtMpf/3C0X16a/Q0FCP+h8/frwGDx6sBx98UL/+9a9VXl6uF154QRkZGQoJCfG4zurqapWUlDScl5aWqri4WJGRkerbt69HfezcuVO7du1SQkKCunXrpsOHD+vFF1/UwIEDGZUCALQpjEwBQBCwny67dJCSpN2S6iStkLRYci2Rrr5usFavXt3QZPr06UpMTGyyf4vFory8PFksFsXFxenHP/6xpk6dql/84hcNbY4cOSKTydTsZkG7d+9WbGysYmNjJUmZmZmKjY1t9H1V8+fPV//+/Zvso0uXLnrvvfc0btw4XX/99UpL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MUM1NTVatGiRoT4BAED75tcNKI4ePap+/frpk08+UWJi4mXbB+MiMwBNi4yM1MKFC5WWluZR+/fff1933nmnysrK1KtXL0lSTk6Onn32WZ06dUqdOnXyugaTyaTc3FylpqZ6fe93LVy4UNnZ2fryyy9b3BcAAGiZYMwGPlsztXPnTr322msqLi7Wv/71L3388ceaMmWKBg4ceMlRKQBtl8Ph0KpVq1RTU+PVf9/bt2/XkCFDGoKUJE2YMEF2u10HDhzwRaleqaqqUmRkZKDLAAAAQcpnYapLly567733NG7cOF1//fVKS0vT0KFDVVBQwFQ+oA2rtVeqonS/au2V+uyzzxQWFqaQkBClp6crNzdXgwcP9riv8vLyRkFKUsN5eXl5q9btrZKSEr366qt67LHHAloHgPajNdZ3StLdd9+tvn37qnPnzurdu7cefPBBlZWVed3PX//6V91www3q3LmzhgwZoo0bN3p1P2tNAR9ujT5kyBB9/PHHvuoegJ8V5WVpSf7LWms7IadZMjulu/5flP64dLau+f6deueddzRt2jQVFBR4FaiC0fHjxzVx4kTdd999mjFjRqDLAdBOtMb6TklKSkrS888/r969e+v48eP66U9/qnvvvVfbtm3zuI9t27ZpypQpWrBgge68806tXLlSqamp2rt3r2666SaP+mCtKeDnNVPeCsZ5kUBHlL14ijLOrJLFKdVbLly3OiSHWcqyTVF65kolJydr4MCBWrZsmUf9zp07V+vWrVNxcXHDtdLSUl199dXau3evYmNjva61pWumysrKlJiYqFtuuUUrVqyQ2ezzb5AA0AG15vrOdevWKTU1VXV1dU1+l+d33X///aqpqVFeXl7DtVtuuUXDhw9XTk6O4VpYawpfCsZswG8JAJpVlJeljDOr5DI1DlKS+9xlkmba/6KtG7LldDobffH25cTFxemzzz7TyZMnG65t2rRJNpstIKNbx48fV2JiokaMGKHly5cTpAC0im9Pj25tlZWVeuuttzR69GiPg5TkXrOanJzc6NqECRO0ffv2FtXDWlN0ND6b5gegfViS/7Is4RcHKf1N0jWSIiRzrZT28//UP3fX6MMPP/S47/Hjx2vw4MF68MEH9etf/1rl5eV64YUXlJGR4dXayurqapWUlDScl5aWqri4WJGRkerbt69HfZwPUv369dOiRYt0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\n" | |
| }, | |
| "metadata": {} | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "https://viz.unargmaxable.ai/softmax/" | |
| ], | |
| "metadata": { | |
| "id": "NWcLLp4UC7Bw" | |
| } | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment