2024-08-11 13:02:16 -04:00

386 lines
95 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "134e7f9d",
"metadata": {},
"source": [
"# API 5: Grid"
]
},
{
"cell_type": "markdown",
"id": "2571d531",
"metadata": {},
"source": [
"One important feature of KANs is that they embed splines to neural networks. However, splines are only valid for approximating functions in known bounded regions, while the range of activations in neural networks may be changing over training. So we have to update grids properly according to that. Let's first take a look at how we parametrize splines. "
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "2075ef56",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'B_i(x)')"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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dHSD43U6HWFhYZcc05zvgCtoyfzqWL58OXfddReffvop06ZNu+RYjUbDyJEjnd/XtqQ1czyfMWPG8P777zv/9oZzKIRg6dKlLFiwAIPBcMmxnjyHzaXdXIMui97pRDQ3oPgf//iHc53ZbG4woHj58uXOMVlZWR4NKN65c6dz3Y4dO5ockLpw4cKLsmwa49ChQwIQP/74Y4vlbS6tnV8dBQUFwmg0infffVcI0X7OYUvnZ7FYxHXXXScGDBgg8vLymnSstjp/o0aNEr/5zW/qrevXr98lA4r79etXb93ixYsvCmacNWtWvTEzZ870WDBqc+YnhBAffvih8PHxuWxgZx0Oh0OMGDFC/PznP2+NqC2mJXO8kBtvvFFMmTLF+XdHP4dC/BQ4fejQocsew9PnsA6aGFDcHq5Bqdw0g7S0NLF//37x1FNPCX9/f7F//36xf/9+UV5e7hzTt29fsWLFCuffzz77rAgKChIrVqwQhw4dErfeemuDqeBxcXHihx9+EPv27RNTp071aCr4oEGDxPbt28X27dvFwIEDL0olvnCOQghRWloqfH19xauvvnrRPk+dOiWeeuopsXv3bnHmzBnxzTffiMTERDF06FCPpEo3Z37l5eXid7/7ndi2bZs4c+aM2LBhgxg7dqzo0qVLuzyHzZ2f1WoVc+fOFXFxceLAgQP10k7NZrMQwrPnry7NdsmSJSIlJUU88MADws/Pz5lZ8uijj4oFCxY4x9eloT744IMiJSVFLFmy5KI01K1btwqtViueffZZcfToUfHss896PI24qfP78MMPhU6nE//73/8aTct/8sknxZo1a0RqaqrYv3+/+PnPfy50Ol09pbctae4c//Of/4iVK1eKEydOiMOHD4tHH31UAOLzzz93junI57CO22+/XYwePbrBfbanc1heXu681wHi+eefF/v373dmU7bXa1AqN81g4cKFArho2bBhg3MMIN5++23n3w6HQzzxxBMiOjpaGI1GMXHixIs09erqanHvvfeK0NBQYTKZxDXXXCPS09PbaFb1KSwsFPPnzxcBAQEiICBAzJ8//6KUzAvnKIQQr7/+ujCZTA3WPklPTxcTJ04UoaGhwmAwiJ49e4rf/va3F9WKaQuaO7+qqioxffp0ERERIfR6vYiPjxcLFy686Py0l3PY3PmdOXOmwe/0+d9rT5+///3vfyIhIUEYDAYxbNiwetaihQsXikmTJtUbv3HjRjF06FBhMBhEt27dGlS4P/30U9G3b1+h1+tFYmJivRtnW9Oc+U2aNKnBc7Vw4ULnmAceeEDEx8cLg8EgIiIixPTp08W2bdvacEYX05w5/uMf/xA9e/YUPj4+IiQkRFxxxRXim2++uWifHfUcCqFae00mk3jjjTca3F97Ood1FqbGvnPt9RpUhKiN9JFIJBKJRCLxAmSdG4lEIpFIJF6FVG4kEolEIpF4FVK5kUgkEolE4lVI5UYikUgkEolXIZUbiUQikUgkXoVUbiQSiUQikXgVUrmRSCQSiUTiVUjlRiKRSCQSiVchlRuJRCKRSCRehVRuJBKJRCKReBVSuZFIJBKJROJVSOVGIpF0ePLz84mOjubpp592rtu5cycGg4Hvv//eg5JJJBJPIBtnSiQSr2D16tVcd911bNu2jcTERIYOHcrs2bN54YUXPC2aRCJpY6RyI5FIvIZ77rmHH374gZEjR5KcnMzu3bvx8fHxtFgSiaSNkcqNRCLxGqqrq0lKSiIjI4M9e/YwaNAgT4skkUg8gIy5kUgkXsPp06fJysrC4XCQlpbmaXEkEomHkJYbiUTiFVgsFkaNGsWQIUNITEzk+eef59ChQ0RFRXlaNIlE0sZI5UYikXgFf/jDH/jss89ITk7G39+fKVOmEBAQwNdff+1p0SQSSRsj3VISiaTDs3HjRl544QWWLVtGYGAgGo2GZcuWsWXLFl599VVPiyeRSNoYabmRSCQSiUTiVUjLjUQikUgkEq9CKjcSiUQikUi8CqncSCQSiUQi8SqkciORSCQSicSrkMqNRCKRSCQSr0IqNxKJRCKRSLwKqdxIJBKJRCLxKqRyI5FIJBKJxKuQyo1EIpFIJBKvQio3EolEIpFIvAqp3EgkEolEIvEq/h845tqa7ax/nQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from kan.spline import B_batch\n",
"import torch\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from kan.spline import extend_grid\n",
"\n",
"# consider a 1D example.\n",
"# Suppose we have grid in [-1,1] with G intervals, spline order k\n",
"G = 5\n",
"k = 3\n",
"grid = torch.linspace(-1,1,steps=G+1)[None,:]\n",
"grid = extend_grid(grid, k_extend=k)\n",
"\n",
"# and we have sample range in [-1,1]\n",
"x = torch.linspace(-1,1,steps=1001)[None,:]\n",
"\n",
"basis = B_batch(x, grid, k=k)\n",
"\n",
"for i in range(G+k):\n",
" plt.plot(x[0].detach().numpy(), basis[0,:,i].detach().numpy())\n",
" \n",
"plt.legend(['B_{}(x)'.format(i) for i in np.arange(G+k)])\n",
"plt.xlabel('x')\n",
"plt.ylabel('B_i(x)')"
]
},
{
"cell_type": "markdown",
"id": "75af662c",
"metadata": {},
"source": [
"There are $G+k$ B-spline basis. The function is a linear combination of these bases $${\\rm spline}(x)=\\sum_{i=0}^{G+k-1} c_i B_i(x).$$ We don't need worry about the implementation since it's already built in KAN. But let's check if KAN is indeed implementing this. We initialize a [1,1] KAN, which is simply a 1D spline."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "ccfecd98",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Parameter containing:\n",
"tensor([[[ 0.0781, 0.0073, -0.0178, -0.0140, 0.0396, -0.0596, 0.0312,\n",
" 0.0469]]], requires_grad=True)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.act_fun[0].coef"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "c3461a32",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([1001, 8])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"basis[0].shape"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "ac751154",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 0.0781, 0.0073, -0.0178, -0.0140, 0.0396, -0.0596, 0.0312, 0.0469]],\n",
" grad_fn=<SelectBackward0>)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.act_fun[0].coef[0]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "4369a310",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"data": {
"text/plain": [
"tensor(0.0040, grad_fn=<MeanBackward0>)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from kan import KAN\n",
"\n",
"model = KAN(width=[1,1], grid=G, k=k)\n",
"# obtain coefficients c_i\n",
"model.act_fun[0].coef\n",
"assert(model.act_fun[0].coef[0].shape[1] == G+k)\n",
"\n",
"# the model forward\n",
"model_output = model(x[0][:,None])\n",
"\n",
"# spline output\n",
"spline_output = torch.einsum('j,ij->i',model.act_fun[0].coef[0][0], basis[0])[:,None]\n",
"\n",
"torch.mean((model_output - spline_output)**2)"
]
},
{
"cell_type": "markdown",
"id": "82150587",
"metadata": {},
"source": [
"They are not the same, what's happening? We want to remind that we model the activation function to have two additive parts, a residual function $b$(x) plus the spline function, i.e., $$\\phi(x)={\\rm scale\\_base}*b(x)+{\\rm scale\\_sp}*{\\rm spline}(x),$$ and by default $b(x)={\\rm silu}(x)=x/(1+e^{-x})$."
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "7d76a3c4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor(0., grad_fn=<MeanBackward0>)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# residual output\n",
"residual_output = torch.nn.SiLU()(x[0][:,None])\n",
"scale_base = model.act_fun[0].scale_base\n",
"scale_sp = model.act_fun[0].scale_sp\n",
"torch.mean((model_output - (scale_base * residual_output + scale_sp * spline_output))**2)"
]
},
{
"cell_type": "markdown",
"id": "3d72e076",
"metadata": {},
"source": [
"What if my grid does not match my data? For example, my grid is in [-1,1], but my data is in [10,10] or [-0.5,0.5]. Use update_grid_from_sample to adjust grids to samples. This grid update applies to all splines in all layers."
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "46717e8b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n",
"Parameter containing:\n",
"tensor([[-2.2000, -1.8000, -1.4000, -1.0000, -0.6000, -0.2000, 0.2000, 0.6000,\n",
" 1.0000, 1.4000, 1.8000, 2.2000]])\n",
"Parameter containing:\n",
"tensor([[-22., -18., -14., -10., -6., -2., 2., 6., 10., 14., 18., 22.]])\n"
]
}
],
"source": [
"model = KAN(width=[1,1], grid=G, k=k)\n",
"print(model.act_fun[0].grid) # by default, the grid is in [-1,1]\n",
"x = torch.linspace(-10,10,steps = 1001)[:,None]\n",
"model.update_grid_from_samples(x)\n",
"print(model.act_fun[0].grid) # now the grid becomes in [-10,10]. We add a 0.01 margin in case x have zero variance"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "de04db15",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n",
"Parameter containing:\n",
"tensor([[-2.2000, -1.8000, -1.4000, -1.0000, -0.6000, -0.2000, 0.2000, 0.6000,\n",
" 1.0000, 1.4000, 1.8000, 2.2000]])\n",
"Parameter containing:\n",
"tensor([[-1.1000, -0.9000, -0.7000, -0.5000, -0.3000, -0.1000, 0.1000, 0.3000,\n",
" 0.5000, 0.7000, 0.9000, 1.1000]])\n"
]
}
],
"source": [
"model = KAN(width=[1,1], grid=G, k=k)\n",
"print(model.act_fun[0].grid) # by default, the grid is in [-1,1]\n",
"x = torch.linspace(-0.5,0.5,steps = 1001)[:,None]\n",
"model.update_grid_from_samples(x)\n",
"print(model.act_fun[0].grid) # now the grid becomes in [-10,10]. We add a 0.01 margin in case x have zero variance"
]
},
{
"cell_type": "markdown",
"id": "e418ca2c",
"metadata": {},
"source": [
"Uniform grid or non-uniform? We consider two options: (1) uniform grid; (2) adaptive grid (based on sample distribution) such that there are (rougly) same number of samples in each interval. We provide a parameter grid_eps to interpolate between these two regimes. grid_eps = 1 gives (1), and grid_eps = 0 gives (0). By default we set grid_eps = 1 (uniform grid). There could be other options but it is out of our scope here."
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "d2c4f636",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n",
"Parameter containing:\n",
"tensor([[-2.2000, -1.8000, -1.4000, -1.0000, -0.6000, -0.2000, 0.2000, 0.6000,\n",
" 1.0000, 1.4000, 1.8000, 2.2000]])\n",
"Parameter containing:\n",
"tensor([[-7.4371, -6.0845, -4.7319, -3.3793, -2.0267, -0.6741, 0.6785, 2.0311,\n",
" 3.3837, 4.7363, 6.0889, 7.4415]])\n"
]
}
],
"source": [
"# uniform grid\n",
"model = KAN(width=[1,1], grid=G, k=k)\n",
"print(model.act_fun[0].grid) # by default, the grid is in [-1,1]\n",
"x = torch.normal(0,1,size=(1000,1))\n",
"model.update_grid_from_samples(x)\n",
"print(model.act_fun[0].grid) # now the grid becomes in [-10,10]. We add a 0.01 margin in case x have zero variance"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "b9b354c6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n",
"Parameter containing:\n",
"tensor([[-2.2000, -1.8000, -1.4000, -1.0000, -0.6000, -0.2000, 0.2000, 0.6000,\n",
" 1.0000, 1.4000, 1.8000, 2.2000]])\n",
"Parameter containing:\n",
"tensor([[-7.4371, -6.0845, -4.7319, -3.3793, -0.8336, -0.2805, 0.2751, 0.8132,\n",
" 3.3837, 4.7363, 6.0889, 7.4415]])\n"
]
}
],
"source": [
"# adaptive grid based on sample distribution\n",
"model = KAN(width=[1,1], grid=G, k=k, grid_eps = 0.)\n",
"print(model.act_fun[0].grid) # by default, the grid is in [-1,1]\n",
"x = torch.normal(0,1,size=(1000,1))\n",
"model.update_grid_from_samples(x)\n",
"print(model.act_fun[0].grid) # now the grid becomes in [-10,10]. We add a 0.01 margin in case x have zero variance"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f7b8f994",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}