GitHub_collection_pykan/tutorials/Interp_10_hessian.ipynb
2024-08-11 18:21:12 -04:00

173 lines
53 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "5fcb9bb3",
"metadata": {},
"source": [
"# Interpretability 10: Hessian"
]
},
{
"cell_type": "markdown",
"id": "5230955e",
"metadata": {},
"source": [
"To understand the loss lanscape, we compute the hessian (loss wrt model parameters) and get its eigenvalues"
]
},
{
"cell_type": "markdown",
"id": "a480848a",
"metadata": {},
"source": [
"Try both KAN and MLP, you will usually see that KANs have more non-zero eigenvalues than MLPs, meaning that KANs have more effective number of parameters than MLP. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "c9ed6509",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cuda\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 8.51e-04 | test_loss: 8.26e-04 | reg: 1.11e+01 | : 100%|█| 1000/1000 [00:08<00:00, 114\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
}
],
"source": [
"from kan.utils import get_derivative\n",
"import torch\n",
"from kan.MLP import MLP\n",
"from kan.MultKAN import KAN\n",
"from kan.utils import create_dataset, model2param\n",
"import copy\n",
"\n",
"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
"print(device)\n",
"\n",
"f = lambda x: x[:,[0]]**2\n",
"dataset = create_dataset(f, n_var=1, train_num=1000, device=device)\n",
"\n",
"inputs = dataset['train_input']\n",
"labels = dataset['train_label']\n",
"\n",
"#model = MLP(width = [1,30,1])\n",
"model = KAN(width=[1,5,1], device=device)\n",
"model.fit(dataset, opt='Adam', lr=1e-2, lamb=0.000, steps=1000);"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1096bee1",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 17 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model.plot()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "6fdd3ac8",
"metadata": {},
"outputs": [],
"source": [
"hess = get_derivative(model, inputs, labels, derivative='hessian')\n",
"values, vectors = torch.linalg.eigh(hess)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "9c43e892",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.plot(values.cpu().numpy()[0], marker='o');\n",
"plt.yscale('log')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "89095a9f",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "292cd529",
"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.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}