{ "cells": [ { "cell_type": "markdown", "id": "9719678d", "metadata": {}, "source": [ "# Transferring from QKAN to KAN\n", "\n", "In the paper, we also introduce a method to transfer the learned parameters from QKAN to KAN. This is useful when you want to use the learned parameters in a different environment.\n", "\n", "On the other hand, it is also possible to showcase that QKAN may have better learning landscape in optimizing the parameters than KAN. If the transferred KAN can achieve better performance than the pure KAN, it is a strong evidence that QKAN has better learning landscape.\n", "\n", "Here is a simple example of how to transfer the learned parameters from QKAN to KAN:" ] }, { "cell_type": "code", "execution_count": 1, "id": "df6aed0c", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "from tqdm import tqdm\n", "\n", "from qkan import KAN, QKAN, create_dataset" ] }, { "cell_type": "code", "execution_count": 2, "id": "e4928d84", "metadata": {}, "outputs": [], "source": [ "# create dataset\n", "f = lambda x: torch.sin(torch.exp(x[:, [0]]) + x[:, [1]] ** 2)\n", "dataset = create_dataset(\n", " f,\n", " n_var=2,\n", " train_num=10000,\n", " test_num=1000,\n", ")\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "f80d95d9", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████| 500/500 [00:05<00:00, 86.70it/s, train loss=0.0025606856, test loss=0.0022567876]\n", "train loss: 8.97e-08 | test loss: 1.56e-08: 100%|██████████████| 1000/1000 [00:02<00:00, 488.57it/s]\n" ] } ], "source": [ "qkan_model = QKAN(\n", " [2, 1, 1],\n", " num_qlayers=3,\n", " solver=\"exact\",\n", " device=device,\n", " preact_trainable=True,\n", " postact_bias_trainable=False,\n", " postact_weight_trainable=False,\n", " ba_trainable=True,\n", " seed=0,\n", ")\n", "optimizer = optim.Adam(qkan_model.parameters(), lr=1e-2)\n", "result = qkan_model.train_(dataset, steps=500, optimizer=optimizer)\n", "\n", "kan_model = KAN([2, 1, 1], grid_size=5, seed=0).to(device)\n", "x0 = torch.stack(\n", " [torch.linspace(-1, 1, steps=100, device=device) for _ in range(2)]\n", ").permute(1, 0) # x.shape = (sampling, in_dim)\n", "kan_model.initialize_from_qkan(qkan_model, x0=x0, sampling=100)\n", "\n", "optimizer = optim.Adam(kan_model.parameters(), lr=1e-2)\n", "pbar = tqdm(range(1000), desc=\"KAN\", ncols=100)\n", "batch_size = dataset[\"train_input\"].shape[0]\n", "batch_size_test = dataset[\"test_input\"].shape[0]\n", "criterion = loss_fn_eval = nn.MSELoss()\n", "for _ in pbar:\n", " train_id = np.random.choice(\n", " dataset[\"train_input\"].shape[0], batch_size, replace=False\n", " )\n", " test_id = np.random.choice(\n", " dataset[\"test_input\"].shape[0], batch_size_test, replace=False\n", " )\n", " pred = kan_model.forward(dataset[\"train_input\"][train_id].to(device))\n", " loss = criterion(pred, dataset[\"train_label\"][train_id].to(device))\n", " optimizer.zero_grad()\n", " loss.backward()\n", " optimizer.step()\n", "\n", " test_loss = loss_fn_eval(\n", " kan_model.forward(dataset[\"test_input\"][test_id].to(device)),\n", " dataset[\"test_label\"][test_id].to(device),\n", " )\n", " result[\"train_loss\"].append(loss.cpu().detach().numpy())\n", " result[\"test_loss\"].append(test_loss.cpu().detach().numpy())\n", " pbar.set_description(\n", " \"train loss: %.2e | test loss: %.2e\"\n", " % (\n", " loss.cpu().detach().numpy(),\n", " test_loss.cpu().detach().numpy(),\n", " )\n", " )" ] }, { "cell_type": "code", "execution_count": 4, "id": "63f0f432", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "train loss: 2.00e-02 | test loss: 2.07e-02: 100%|██████████████| 1500/1500 [00:03<00:00, 496.32it/s]\n" ] } ], "source": [ "kan_model2 = KAN([2, 1, 1], grid_size=5, seed=0).to(device)\n", "\n", "# Define loss\n", "criterion = loss_fn_eval = nn.MSELoss()\n", "result2 = {}\n", "result2[\"train_loss\"] = []\n", "result2[\"test_loss\"] = []\n", "\n", "steps = 1500\n", "pbar = tqdm(range(steps), desc=\"description\", ncols=100)\n", "batch_size = dataset[\"train_input\"].shape[0]\n", "batch_size_test = dataset[\"test_input\"].shape[0]\n", "\n", "optimizer = optim.Adam(kan_model2.parameters(), lr=1e-2)\n", "for _ in pbar:\n", " train_id = np.random.choice(\n", " dataset[\"train_input\"].shape[0], batch_size, replace=False\n", " )\n", " test_id = np.random.choice(\n", " dataset[\"test_input\"].shape[0], batch_size_test, replace=False\n", " )\n", " pred = kan_model2.forward(dataset[\"train_input\"][train_id].to(device))\n", " loss = criterion(pred, dataset[\"train_label\"][train_id].to(device))\n", " optimizer.zero_grad()\n", " loss.backward()\n", " optimizer.step()\n", "\n", " test_loss = loss_fn_eval(\n", " kan_model2.forward(dataset[\"test_input\"][test_id].to(device)),\n", " dataset[\"test_label\"][test_id].to(device),\n", " )\n", " result2[\"train_loss\"].append(loss.cpu().detach().numpy())\n", " result2[\"test_loss\"].append(test_loss.cpu().detach().numpy())\n", " pbar.set_description(\n", " \"train loss: %.2e | test loss: %.2e\"\n", " % (\n", " loss.cpu().detach().numpy(),\n", " test_loss.cpu().detach().numpy(),\n", " )\n", " )" ] }, { "cell_type": "code", "execution_count": 5, "id": "89cd15d8", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "ax = plt.subplot(111)\n", "\n", "ax.plot(result[\"test_loss\"], label=r\"QKAN $\\rightarrow$ KAN\")\n", "ax.plot(result2[\"test_loss\"], label=\"KAN\")\n", "ax.legend()\n", "ax.set_xlabel(\"Epoch\")\n", "ax.set_ylabel(\"MSE loss\")\n", "ax.set_title(r\"Fitting $f(x,y) = \\sin{(e^x+y^2)}$\"+ \"\\nTest loss of transfer learning from QKAN to KAN\")\n", "ax.set_yscale(\"log\")" ] }, { "cell_type": "markdown", "id": "d0b61c61", "metadata": {}, "source": [ "From the results, we can see that the transferred KAN achieves better performance than the pure KAN trained from scratch.\n", "\n", "Which provides a strong support for the claim that QKAN/DARUAN or QVAF has better learning landscape than classical VAF." ] } ], "metadata": { "kernelspec": { "display_name": "venv", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }