Created
May 29, 2026 06:21
-
-
Save ankurdhuriya/fd47e52920b4be54d98d39671dedfb5d to your computer and use it in GitHub Desktop.
understanding-kl-divergence-from-first-principles.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": "ABX9TyOz4WAg3wYX4xMPXR1USG/O", | |
| "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/ankurdhuriya/fd47e52920b4be54d98d39671dedfb5d/understanding-kl-divergence-from-first-principles.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "# Understanding KL Divergence from First Principles\n", | |
| "\n", | |
| "## 1. Introduction\n", | |
| "\n", | |
| "**KL Divergence** (Kullback-Leibler Divergence), also known as relative entropy, measures how one probability distribution $P$ differs from a second, reference probability distribution $Q$.\n", | |
| "\n", | |
| "It is **not** a true distance metric because:\n", | |
| "1. It is not symmetric: $D_{KL}(P||Q) \\neq D_{KL}(Q||P)$.\n", | |
| "2. It does not satisfy the triangle inequality.\n", | |
| "\n", | |
| "### The Formula\n", | |
| "\n", | |
| "For **discrete** distributions:\n", | |
| "$$ D_{KL}(P || Q) = \\sum_{x} P(x) \\log \\left( \\frac{P(x)}{Q(x)} \\right) $$\n", | |
| "\n", | |
| "For **continuous** distributions:\n", | |
| "$$ D_{KL}(P || Q) = \\int_{-\\infty}^{\\infty} p(x) \\log \\left( \\frac{p(x)}{q(x)} \\right) dx $$\n", | |
| "\n", | |
| "> Add blockquote\n", | |
| "\n" | |
| ], | |
| "metadata": { | |
| "id": "NZY1Wu8ASApi" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "id": "p1iExawIR787" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "from scipy.stats import norm, poisson, entropy\n", | |
| "import seaborn as sns\n", | |
| "\n", | |
| "# Set style for better visuals\n", | |
| "sns.set_style(\"whitegrid\")\n", | |
| "plt.rcParams['figure.figsize'] = (10, 6)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## 2. Discrete Case Implementation\n", | |
| "\n", | |
| "In this section, we implement KL divergence from scratch for discrete distributions (e.g., histograms, categorical data) and verify it against `scipy`.\n", | |
| "\n", | |
| "### Key Constraints\n", | |
| "* $P(x)$ and $Q(x)$ must sum to 1.\n", | |
| "* If $P(x) > 0$, then $Q(x)$ **must** be $> 0$. If $Q(x)=0$ where $P(x)>0$, the divergence is infinite (undefined).\n", | |
| "* If $P(x)=0$, the term contributes 0 to the sum (by limit definition $\\lim_{p\\to0} p \\log p = 0$).\n" | |
| ], | |
| "metadata": { | |
| "id": "G-cyNg3DTV4w" | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Step 2.1: Define Two Distributions" | |
| ], | |
| "metadata": { | |
| "id": "PzPe4yt9Vzkx" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "# Define outcomes (e.g., classes 0 to 4)\n", | |
| "x = np.arange(5)\n", | |
| "\n", | |
| "# True Distribution P (e.g., actual data histogram)\n", | |
| "P = np.array([0.1, 0.2, 0.4, 0.2, 0.1])\n", | |
| "\n", | |
| "# Approximate Distribution Q (e.g., model prediction)\n", | |
| "# Let's make Q slightly different from P\n", | |
| "Q = np.array([0.15, 0.15, 0.35, 0.25, 0.1])\n", | |
| "\n", | |
| "# Verify they sum to 1\n", | |
| "assert np.isclose(np.sum(P), 1), \"P must sum to 1\"\n", | |
| "assert np.isclose(np.sum(Q), 1), \"Q must sum to 1\"\n", | |
| "\n", | |
| "# Visualize\n", | |
| "plt.bar(x - 0.2, P, width=0.4, label='True Dist P', color='deepskyblue')\n", | |
| "plt.bar(x + 0.2, Q, width=0.4, label='Approx Dist Q', color='salmon')\n", | |
| "plt.title('Discrete Probability Distributions')\n", | |
| "plt.xlabel('Outcome')\n", | |
| "plt.ylabel('Probability')\n", | |
| "plt.legend()\n", | |
| "plt.show()" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 564 | |
| }, | |
| "id": "l2qMsLdOSfYw", | |
| "outputId": "2d82a8bf-514b-4e6f-93c0-31bf8e9787fd" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 1000x600 with 1 Axes>" | |
| ], | |
| "image/png": "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PaVJkybJx8dHDz30kCSpVq1aCgwMVOvWrfXRRx9p8ODBTs9ZtWqVKleu7HRPVXGFh4erQYMG+u677y7ZJicnR/Hx8crJyVFcXJxq1aqlI0eO6KuvvtLp06dVtWpVvfTSS/rnP/+psLAwxxj/83iUCv95XsqGDRuUmpqqgQMHytPTU++9954eeOABffDBB2rWrFmx9rEotf3ZjBkzNHPmTEVEROi+++7T7t279d577yk9PV3vvfee05nJU6dO6YEHHlDXrl11++2367PPPtMrr7yiZs2aqUuXLpKkpUuX6vnnn1e3bt00aNAgXbhwQdu2bdMvv/yiO++8s1j7AqDiI1wBwBXUrVtXVatW1f79+y/Z5ttvv3WcQahZs2ahbVauXKm0tDQ9+eSTTm+0H3zwwQJvVg8fPqwvvvjCqa/BgwerXr16Wr58ueMSwf79++u+++7TK6+8oq5duyowMFBt2rRRcnKyIiIi1L59e8fzz507p8mTJ6tv376aNGmSY3nv3r3VvXt3zZ0712n5pZw7d07Hjx9XXl6etm7dqsmTJ8vNzU233XabU7ugoCC9+uqrjse//fabUlJS1LdvXz3//POSpAEDBqhmzZqaP3++vv/+e8dZMOliuJoxY4aj37vvvlvdu3fXK6+84ghXFotFn332mUym/12I0bNnT91+++1atmyZRo4c6VTTqVOnlJqa6pigJCQkRI899piWLl3qNFlHcUVHR+v111+Xr69vgcv3evXqpWeeeUY7d+50hNzc3FytXr1at912m7y9vUu8XUm66aab9OWXX+rs2bOFTryyc+dOHThwQNOmTXNczilJjzzyiOP7nj17auLEiQoMDCxQf76//jwvZ/v27Vq+fLlatGghSerRo4e6d++u6dOna+bMmcXZvSLVlu/48eOaO3euOnfurHnz5jnGRePGjfXcc8/po48+Up8+fRztjx49qhdffFG9evWSdHGMRUVFafny5Y5w9dVXX+mmm27S9OnTi1U3gOsTlwUCQBH4+Pjo3Llzl1xfrVo1SdKXX34pm81WaJvPP/9cvr6+iouLK7DOzc3N6fFtt93mFKxOnjyp77//XrfffrvOnj2r48eP6/jx4zpx4oQ6d+6sPXv26MiRI5fdh++++06nT59Wjx49HM8/fvy4TCaTWrZsWeSpu5966il17NhRkZGRevDBB5Wdna0pU6Y43a8mSffee6/T47Vr10qShgwZ4rR86NChTuvz1a5dW127dnU8rlKlinr16qUtW7YoIyND0sWZHfPfQFutVp04cUI+Pj668cYbtWXLlgK19+rVyymAdO/eXf7+/gW2baTbb79dlSpVcrqMbN26dTpx4oTuuuuuq+4//162S43P/P1dt26dsrOzS7ydv/48Lyc8PNwRrCSpfv36uvXWW7Vu3TpZrdYS13Al3333nXJzczVo0CCnwN23b19VqVKlwM/Zx8fHKbB5enoqNDTU6T9SqlWrpsOHD2vTpk2lVjeAioMzVwBQBFlZWfLz87vk+piYGH3wwQf65z//qVdffVUdO3ZU165d1b17d8ebvH379unGG28s0gQAf708b9++fbLb7Zo2bZqmTZtW6HMyMzMvO1vfnj17JEn3339/oeuLOt38yJEj1aZNG5lMJvn6+qpJkyaF7tNf9+HgwYMymUwFLuny9/dXtWrVdPDgQaflDRs2LBA6GzVq5OjL399fNptNixYt0rvvvqsDBw44vXH/62WK+X3+mZubmxo2bFhg20aqVq2a/v73v+vjjz/WY489JuniJYF16tRxOlNXUllZWZKkypUrF7o+MDBQQ4YM0YIFC7Rq1Sq1adNGUVFRuuuuu1S1atUib6c4l4z+9ThLF3922dnZOn78uPz9/YvcV3H88ccfkuS4HDafp6enAgMDC/yc69atW2CMVa9eXdu2bXM8HjZsmL777jv17dtXDRs2VKdOnXTHHXfo5ptvLpV9AFC+Ea4A4AoOHz6sM2fOXPY+Dy8vLy1evFjr16/XV199pW+++UapqalasmSJ5s+fX+wZzf56/0/+2bChQ4cqMjKy0Odcrj5JjksPX3rppULf3Ba1xmbNmikiIuKK7S41Y91f38xejTfeeEPTpk1Tnz59NHr0aFWvXl0mk0kvvPDCFe8LKku9evXSp59+qp9++knNmjXTv//9b913331OZ1dKaseOHfLz87tsOJ4wYYJ69+6tL7/8Ut9++62ef/55zZ07V0uXLlXdunWLtB2jZyC81DgozTNbf1WUMd+kSRN9+umnjt/rzz//XO+++65GjhypRx99tAyqBFCeEK4A4Ao+/PBDSVLnzp0v285kMqljx47q2LGjnnzySb3xxht67bXXtH79ekVERKhBgwb65ZdflJubW+zPIMr/gF4PD48rBptLvWnN78PPz69I4choN9xwg2w2m/bu3eu490iSjh07ptOnT+uGG25war93717Z7Xan/ck/+5bf9rPPPlP79u31wgsvOD339OnT8vX1LVDD3r17nR7b7Xbt3bv3kjPeFcflQmNkZKRq1qypVatWqWXLlsrOzr7i/UNFsXHjRu3bt69Ilxfmz7T38MMP66efftJ9992n9957T48//vhV1/FXfz3O0sWfnbe3t+Ny12rVqhWYwU/639mnksj/QOVdu3Y5fah1Tk6ODhw4UOJx7+Pjo5iYGMXExCgnJ0ejRo3SG2+8oeHDh5f6tPcAyhfuuQKAy0hLS9Ps2bMVEBBw2TewJ0+eLLAsODhYkhzTjN922206ceKEFi9eXKDtlc6y+Pn5qV27dlqyZImOHj1aYP3x48cd3+dPkJA/zXa+yMhIValSRXPnzlVubu5l+ygN+RMELFy40Gn5ggULnNbnO3r0qL744gvH47Nnz2rlypUKDg52nHkzm80Fjt3q1asvef/ZypUrdfbsWcfjTz/9VBkZGbrllltKuFf/4+3tXWhYkC5+LlqPHj20evVqrVixQs2aNXP6UOqSOHjwoCZMmCAPDw/Fx8dfst3Zs2eVl5fntKxZs2YymUxOU+D7+Phcsv7i2rhxozZv3ux4fOjQIX355Zfq1KmT42xRgwYNdObMGadp8//6My9ubREREfLw8FBycrLTuFi2bJnOnDlTYIwVxYkTJ5wee3p6qkmTJrLb7YX+HgG4vnHmCgD+39dff61du3bJarXq2LFjWr9+vb799lvVr19fc+bMuez/UM+aNUs//vijunTpohtuuEGZmZl69913VbduXce9Gb169dLKlSuVmJioTZs26eabb1Z2drbS0tJ03333KTo6+rL1Pfvss+rfv7/uvPNO9evXT4GBgTp27Jh+/vlnHT582PE5XMHBwTKbzZo3b57OnDkjT09PdejQQX5+fpo4caLGjRun2NhYxcTEqGbNmvrjjz+0du1atW7dWs8884xxB/QvgoKC1Lt3by1ZskSnT59W27ZtlZ6erpSUFEVHRxe4/6hRo0Z6+umnlZ6eLj8/Py1fvlyZmZlKTEx0tPnb3/6mWbNm6cknn1R4eLi2b9+uVatWOZ21+LPq1aurf//+io2NdUzF3rBhw0tOsV8czZs313vvvafZs2erYcOGqlmzpjp27OhY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Czx06FCxr3MfNmyYsrOz9cwzz+j06dO6+eablZSUxGdcAQAAACg1Lg9XkhQXF1foZYCSCr3x7c+mTJlSYJmbm5tGjx6t0aNHG1IfAAAAAFwJUx8BAAAAgAEIVwAAAABgAMIVAAAAABiAcAUAAAAABiBcAQAAAIABCFcAAACokOw2W4XcVkUxY8YM9ezZ09VlGOqamIodAAAAMJqbyaS8FYtlzzhSutvxryP32AElfv7GjRvVv39/RUZG6s033zSwsrJ34MAB3XrrrY7HPj4+ql+/vtq1a6f7779fjRo1cqwbOnToJT+O6a9mzJihNWvW6MMPP7xi25MnT2rWrFlas2aNMjIyVKNGDUVGRmrUqFGqX79+sfepOAhXAAAAqLDsGUekwwdLdxtX+fxly5YpLi5Oy5Yt05EjR1SnTh1D6rqcnJwceXp6llr/b7/9tpo2barz589r27ZtWrRokXr27Kk33nhDHTt2lCRVrlxZlStXNnS7J0+e1D333CMPDw9NnDhRN910kw4ePKjXX39dd999t5YsWaLAwEBDt/lnXBYIAAAAuMi5c+eUmpqq++67T3/729+UkpLitH79+vWyWCz66quvdNddd6lDhw665557tH37dkebFStWqE2bNlqzZo1uu+02hYaGKj4+XocOHXK0yb8E74MPPlBUVJTCwsIkSX/88YdGjBih8PBwtW7dWqNHj9axY8ckSTt37lTLli21atUqRz+pqakKCwvT77//ftn9qlGjhvz9/RUYGKjo6Gi9/fbbCgsL09NPPy2r1epU05/39e6771arVq3Upk0b3XvvvTp48KBWrFihmTNn6rfffpPFYpHFYtGKFSsK3e5rr72mo0ePasGCBerSpYvq16+vtm3b6q233pK7u7sSEhKK8mMpMcIVAAAA4CKrV69W48aN1bhxY911111avny57PaC58JeeukljR8/XsnJyfL19dVDDz2k3Nxcx/rz589rzpw5evHFF/Xee+/p9OnTevzxx5362Ldvnz777DPNnDlTK1eulM1m08MPP6xTp04pOTlZCxYs0P79+x3Pa9KkicaNG6eEhAT98ccfOnz4sCZOnKixY8eqadOmxdpPk8mk+++/XwcPHtTmzZsLrM/Ly9PIkSPVtm1bffTRR1qyZInuueceubm5KSYmRkOHDtVNN92kdevWad26dYqJiSnQh81m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OnfurBYtWujvf/+7nn/+eZ04caLIfRw4cEAWi0Vbt24txUoBANcjd1cXAABAUezfv1/33HOPGjVqpKlTpyogIEA7duzQyy+/rG+++UZLlixRjRo1XF0mAOA6xpkrAEC5kJCQIA8PD82fP1/t2rVT/fr11aVLFy1YsEBHjhzRa6+9JkmyWCxas2aN03PbtGmjFStWSJJuvfVWSVKvXr1ksVg0cOBAR7tly5apR48eatGihTp37qznnnvOse6PP/7QiBEjFB4ertatW2v06NE6duyYY/2MGTPUs2dPLVu2TH/7298UHh6uiRMnymq1at68eerUqZM6duyoOXPmONV2+vRpPf300+rQoYNat26tQYMG6bfffjP24AEAygThCgBwzTt58qTWrVun/v37y8vLy2mdv7+/7rzzTq1evVp2u/2KfX3wwQeSpLffflvr1q3TjBkzJEnvvvuunnvuOfXr10+rVq3S7Nmz1aBBA0mSzWbTww8/rFOnTik5OVkLFizQ/v379fjjjzv1vW/fPn399ddKSkrSq6++qmXLlunBBx/UkSNHlJycrLFjx+r111/XL7/84njO6NGjlZmZqXnz5mnFihVq3ry57r//fp08efJqDhkAwAW4LBAAcM3bu3ev7Ha7mjRpUuj6Jk2a6NSpUzp+/PgV+6pZs6YkqUaNGvL393csnzNnjoYMGaL777/fsSwsLEySlJaWpu3bt+vLL79UvXr1JEkvvfSSevTooU2bNjna2e12vfDCC6pSpYqaNm2q9u3ba/fu3Zo3b55MJpMaN26sefPmaf369WrZsqV+/PFHbdq0SWlpafL09JQkjR8/XmvWrNFnn32me+65pwRHCwDgKoQrAEC5UZQzUyWRmZmpo0ePqmPHjoWu37lzp+rWresIVpLUtGlTVatWTbt27XKEqxtuuEFVqlRxtKlVq5bMZrNMJpPTsszMTEnStm3blJWVpfbt2ztt7/z589q3b59h+wcAKBuEKwDANa9BgwZyc3PTzp071bVr1wLrd+7cqerVq6tmzZpyc3MrEMLy8vIu23+lSpUMqdPd3fnPqpubW6HLbDabJOncuXPy9/dXcnJygb6qVq1qSE0AgLLDPVcAgGuer6+vOnXqpHfffVfnz593WpeRkaFVq1bp9ttvl5ubm2rWrKmjR4861u/Zs0fZ2dmOxx4eHpIkq9XqWFalShXdcMMNSktLK3T7TZo00eHDh3Xo0CHHst9//12nT5++5KWKRdG8eXMdO3ZMZrNZDRs2dPrKv3wRAFB+EK4AAOXCv/71L+Xk5Cg+Pl4bNmzQoUOH9PXXX2vo0KGqU6eOY3KJDh06aPHixdqyZYvS09P17LPPOgKVJPn5+cnLy0vffPONjh07pjNnzkiSRo0apQULFmjRokXas2ePNm/e7DijFBERoWbNmmns2LHavHmzNm3apHHjxqldu3YKDQ0t8T5FRESoVatWGjlypNatW6cDBw7op59+0muvvab09PSrOFoAAFcgXAEAyoVGjRpp+fLlCgwM1GOPPaauXbvqmWeeUfv27fX+++87PuNq/PjxqlevngYMGKCxY8dq6NChTjMMuru765///KeWLFmiyMhIPfzww5Kk3r1766mnntK7776rO+64Q8OHD9fevXslXbyUb/bs2apWrZri4uI0ePBgBQYGOqZ/Lyk3Nze9+eabatu2rZ588kl1795dTzzxhA4ePKhatWpdVd8AgLLnZi+tu4MBAAAA4DrCmSsAAAAAMADhCgAAAAAMQLgCAAAAAAMQrgAAAADAAIQrAAAAADAA4QoAAAAADEC4AgAAAAADEK4AAAAAwACEKwAAAAAwAOEKAAAAAAxAuAIAAAAAA/wfXLSwI5jKD8UAAAAASUVORK5CYII=\n" | |
| }, | |
| "metadata": {} | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Step 2.2: Implement KL Divergence from Scratch" | |
| ], | |
| "metadata": { | |
| "id": "unp84XNAVo5K" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "def kl_divergence_manual(p, q):\n", | |
| " \"\"\"\n", | |
| " Calculate KL Divergence D_KL(P || Q) for discrete distributions.\n", | |
| "\n", | |
| " Args:\n", | |
| " p: Array-like, true probability distribution\n", | |
| " q: Array-like, approximate probability distribution\n", | |
| "\n", | |
| " Returns:\n", | |
| " float: KL Divergence value\n", | |
| " \"\"\"\n", | |
| " p = np.asarray(p, dtype=np.float64)\n", | |
| " q = np.asarray(q, dtype=np.float64)\n", | |
| "\n", | |
| " # Handle cases where P(x) is 0.\n", | |
| " # By limit definition, 0 * log(0/q) = 0.\n", | |
| " # So we only calculate where P > 0.\n", | |
| " mask = p > 0\n", | |
| "\n", | |
| " if not np.all(q[mask] > 0):\n", | |
| " raise ValueError(\"Q(x) must be > 0 wherever P(x) > 0\")\n", | |
| "\n", | |
| " # The core formula: sum( P * log(P/Q) )\n", | |
| " kl = np.sum(p[mask] * np.log(p[mask] / q[mask]))\n", | |
| " return kl\n", | |
| "\n", | |
| "# Calculate manually\n", | |
| "kl_manual = kl_divergence_manual(P, Q)\n", | |
| "print(f\"Manual KL(P || Q): {kl_manual:.4f} nats\")" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "Pate_j2cTO77", | |
| "outputId": "033254ea-b550-4571-9ae5-a2ff1896e5d7" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Manual KL(P || Q): 0.0258 nats\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Step 2.3: Verify with SciPy" | |
| ], | |
| "metadata": { | |
| "id": "8MpUnhe4Vkol" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "# scipy.stats.entropy(pk, qk) computes sum(pk * log(pk/qk))\n", | |
| "kl_scipy = entropy(P, qk=Q)\n", | |
| "print(f\"SciPy KL(P || Q): {kl_scipy:.4f} nats\")\n", | |
| "\n", | |
| "# Check equality\n", | |
| "assert np.isclose(kl_manual, kl_scipy)\n", | |
| "print(\"Manual and SciPy results match!\")" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "oulPlGJtVX7S", | |
| "outputId": "c71f889f-9510-466b-ca4d-2a64e6d0d9ea" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "SciPy KL(P || Q): 0.0258 nats\n", | |
| "Manual and SciPy results match!\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Step 2.4: Asymmetry Demonstration" | |
| ], | |
| "metadata": { | |
| "id": "DuRNop67V8Ob" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "kl_pq = entropy(P, qk=Q)\n", | |
| "kl_qp = entropy(Q, qk=P)\n", | |
| "\n", | |
| "print(f\"D_KL(P || Q): {kl_pq:.4f}\")\n", | |
| "print(f\"D_KL(Q || P): {kl_qp:.4f}\")\n", | |
| "\n", | |
| "if not np.isclose(kl_pq, kl_qp):\n", | |
| " print(\"Confirmed: KL Divergence is NOT symmetric.\")" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "VHgCMTq_V6yC", | |
| "outputId": "4a33b533-9871-4bcc-87b2-49bf75105f90" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "D_KL(P || Q): 0.0258\n", | |
| "D_KL(Q || P): 0.0267\n", | |
| "Confirmed: KL Divergence is NOT symmetric.\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## 3. Continuous Case: Gaussian Distributions\n", | |
| "\n", | |
| "In machine learning, we often deal with continuous distributions. The Normal (Gaussian) distribution is the most common example.\n", | |
| "\n", | |
| "### Analytical Solution\n", | |
| "For two univariate Gaussians $P = \\mathcal{N}(\\mu_1, \\sigma_1^2)$ and $Q = \\mathcal{N}(\\mu_2, \\sigma_2^2)$, there is a closed-form solution:\n", | |
| "\n", | |
| "$$ D_{KL}(P || Q) = \\log\\left(\\frac{\\sigma_2}{\\sigma_1}\\right) + \\frac{\\sigma_1^2 + (\\mu_1 - \\mu_2)^2}{2\\sigma_2^2} - \\frac{1}{2} $$\n", | |
| "\n", | |
| "### Monte Carlo Estimation\n", | |
| "If an analytical solution doesn't exist, we can estimate KL divergence by sampling:\n", | |
| "1. Draw samples $x_i$ from $P$.\n", | |
| "2. Evaluate the log-ratio $\\log \\frac{P(x_i)}{Q(x_i)}$ for each sample.\n", | |
| "3. Take the average: $D_{KL} \\approx \\frac{1}{N} \\sum \\log \\frac{P(x_i)}{Q(x_i)}$." | |
| ], | |
| "metadata": { | |
| "id": "m_0LtbSAWDjs" | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Step 3.1: Analytical Solution for Gaussians" | |
| ], | |
| "metadata": { | |
| "id": "-rWOAA2dWSMq" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "def kl_gaussian_analytical(mu1, sigma1, mu2, sigma2):\n", | |
| " \"\"\"\n", | |
| " Analytical KL Divergence between two 1D Gaussians.\n", | |
| " D_KL(N(mu1, sigma1^2) || N(mu2, sigma2^2))\n", | |
| " \"\"\"\n", | |
| " term1 = np.log(sigma2 / sigma1)\n", | |
| " term2 = (sigma1**2 + (mu1 - mu2)**2) / (2 * sigma2**2)\n", | |
| " term3 = -0.5\n", | |
| " return term1 + term2 + term3\n", | |
| "\n", | |
| "# Parameters\n", | |
| "mu1, sigma1 = 0, 1 # Standard Normal P\n", | |
| "mu2, sigma2 = 1, 1.5 # Shifted and wider Q\n", | |
| "\n", | |
| "kl_gauss = kl_gaussian_analytical(mu1, sigma1, mu2, sigma2)\n", | |
| "print(f\"Analytical KL(Gaussian P || Gaussian Q): {kl_gauss:.4f}\")" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "6yGGkfTUV97j", | |
| "outputId": "fb874e56-9210-4b84-bbff-8f73b31d4768" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Analytical KL(Gaussian P || Gaussian Q): 0.3499\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Step 3.2: Numerical Approximation via Sampling" | |
| ], | |
| "metadata": { | |
| "id": "Te2xS2IzWuQw" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "def kl_gaussian_mc(mu1, sigma1, mu2, sigma2, n_samples=100000):\n", | |
| " \"\"\"\n", | |
| " Estimate KL Divergence using Monte Carlo sampling.\n", | |
| " Sample from P, then evaluate log(P/Q) on those samples.\n", | |
| " \"\"\"\n", | |
| " # 1. Generate samples from P\n", | |
| " samples = np.random.normal(loc=mu1, scale=sigma1, size=n_samples)\n", | |
| "\n", | |
| " # 2. Evaluate PDFs of P and Q at these sample points\n", | |
| " # Using scipy.norm.pdf\n", | |
| " p_vals = norm.pdf(samples, mu1, sigma1)\n", | |
| " q_vals = norm.pdf(samples, mu2, sigma2)\n", | |
| "\n", | |
| " # 3. Calculate log ratio\n", | |
| " # Add small epsilon to avoid log(0) if necessary, though unlikely with Gaussian tails\n", | |
| " log_ratios = np.log(p_vals / q_vals)\n", | |
| "\n", | |
| " # 4. Take the mean (Expectation)\n", | |
| " return np.mean(log_ratios)\n", | |
| "\n", | |
| "kl_mc = kl_gaussian_mc(mu1, sigma1, mu2, sigma2)\n", | |
| "print(f\"Monte Carlo Estimate: {kl_mc:.4f}\")\n", | |
| "print(f\"Analytical Value: {kl_gauss:.4f}\")\n", | |
| "print(f\"Difference: {abs(kl_mc - kl_gauss):.5f}\")" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "XIbmtmWVWqZX", | |
| "outputId": "3a8e4f7c-033c-4f20-9a32-43a4492ecd74" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Monte Carlo Estimate: 0.3476\n", | |
| "Analytical Value: 0.3499\n", | |
| "Difference: 0.00228\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "### Step 3.3: Visualizing the Difference\n", | |
| "\n", | |
| "Let's see how the KL divergence changes as we shift the mean of Q away from P." | |
| ], | |
| "metadata": { | |
| "id": "_EtpLHkaXjCU" | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "mu_range = np.linspace(-3, 3, 100)\n", | |
| "kl_values = []\n", | |
| "\n", | |
| "for mu2_val in mu_range:\n", | |
| " k = kl_gaussian_analytical(mu1=0, sigma1=1, mu2=mu2_val, sigma2=1)\n", | |
| " kl_values.append(k)\n", | |
| "\n", | |
| "plt.figure(figsize=(10, 5))\n", | |
| "plt.plot(mu_range, kl_values, label='D_KL(P || Q)', color='darkred', linewidth=2)\n", | |
| "plt.axvline(0, linestyle='--', color='gray', label='Mean of P')\n", | |
| "plt.title('KL Divergence vs Shift in Mean (σ fixed at 1)')\n", | |
| "plt.xlabel('Mean of Q (μ2)')\n", | |
| "plt.ylabel('KL Divergence (nats)')\n", | |
| "plt.legend()\n", | |
| "plt.grid(True, alpha=0.3)\n", | |
| "plt.show()" | |
| ], | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 487 | |
| }, | |
| "id": "FLHpl_e9XJiU", | |
| "outputId": "75e987ce-a3cd-4191-8925-f54593f189fa" | |
| }, | |
| "execution_count": null, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 1000x500 with 1 Axes>" | |
| ], | |
| "image/png": "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\n" | |
| }, | |
| "metadata": {} | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "Observation: The KL divergence is minimized (0) when the distributions are identical. It grows quadratically as the means diverge." | |
| ], | |
| "metadata": { | |
| "id": "HsCwa4r5Xvs_" | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "## 4. Summary\n", | |
| "\n", | |
| "1. **Always check support:** Ensure $Q(x) > 0$ wherever $P(x) > 0$.\n", | |
| "2. **Mind the order:** $D_{KL}(P||Q)$ is NOT the same as $D_{KL}(Q||P)$. Always define which is the \"Truth\" and which is the \"Model\".\n", | |
| "3. **Units:**\n", | |
| " * Natural Log ($\\ln$): Units are **nats**.\n", | |
| " * Log Base 2 ($\\log_2$): Units are **bits**.\n", | |
| "4. **Zero Meaning:** $D_{KL} = 0$ if and only if $P = Q$ everywhere." | |
| ], | |
| "metadata": { | |
| "id": "u3l5TXE2X-3v" | |
| } | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment