{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": { "title": "First steps" } }, "source": [ "# Introduction to Tensor Networks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tensor Networks (TNs) are renowned for their ability to approximate ground states in quantum physics.\n", "
\n", "Over time, their application has expanded beyond quantum mechanics to a wide range of fields, particularly Machine Learning.\n", "\n", "**Overview**\n", "1. Basic operations with tensors\n", "2. Contractions\n", "3. Creation of Tensor Network\n", "4. MNIST classification with MPS" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "os.environ[\"KMP_WARNINGS\"] = \"0\"\n", "\n", "import jax\n", "import numpy as np\n", "import quimb.tensor as qtn\n", "from jax.nn.initializers import *\n", "\n", "from tn4ml.embeddings import *\n", "from tn4ml.initializers import *\n", "from tn4ml.metrics import *\n", "from tn4ml.models.model import *\n", "from tn4ml.models.mps import *\n", "from tn4ml.strategy import *\n", "from tn4ml.util import *" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "jax.config.update(\"jax_enable_x64\", True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic operations with tensors\n", "The primary strength of Tensor Networks (TNs) lies in their ability to easily contract and split tensor indices. By taking a large tensor with many indices (a rank-L tensor), we can reconfigure it into a more convenient form. This reconfiguration allows us to apply advanced linear algebra tools that are typically only available for matrices.
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**From Vector to Matrix = Index Splitting**\n", "\n", "Imagine having a vector (rank-1 tensor) $T_k$ where \n", "$k=\\underbrace{1,2,\\dotsc,i-1,i}_{i},\\underbrace{i+1,\\dotsc,N}_{j}$. \n", "
\n", "Then, we can see that \n", "$$ T_k = T_{i,j}$$\n", "Now $T$ is represented as a matrix. \n", "\n", "\n", "`data` - raw data array
\n", "`inds` - a set of ‘indices’ to label each dimension with
\n", "`tags` - name of a tensor" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# visualize a vector\n", "data = np.array([1, 0, 0, 1])\n", "inds = \"k\"\n", "tags = (\"Vector\",)\n", "\n", "ket = qtn.Tensor(data=data, inds=inds, tags=tags)\n", "ket.draw()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# visualize a matrix\n", "data = data.reshape((2, 2)) # reshape vector to matrix\n", "inds = (\"k0\", \"k1\")\n", "tags = (\"Matrix\",)\n", "ket = qtn.Tensor(data=data, inds=inds, tags=tags)\n", "ket.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Singular Value Decomposition**" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1., 1.])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qtn.decomp.svdvals(ket.data) # singular values of the matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Contraction\n", "As we just demonstrated, it's possible to reverse the splitting of tensor indices and fuse two (or more) indices together. By doing so, a rank-2 tensor (a matrix) $T_{i,j}$ can be fused to form a single global index, allowing it to be contracted with another tensor $A_k$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "data = np.array([[1, 0], [0, 1]])\n", "ket = qtn.Tensor(data=data, inds=(\"i\", \"j\"), tags=(\"$T_{i,j}$\",))\n", "ket.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**From Matrix to Vector = Index Fusion**" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "T_k = ket.fuse({\"k\": (\"i\", \"j\")}).retag({\"$T_{i,j}$\": \"$T_k$\"})\n", "T_k.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This contraction is feasible when the dimensions of the indices being contracted match. Specifically, the dimension of $k$ must equal the combined dimension of $ij$, such as $dim(k) = dim(ij)$.
\n", "Thus, the contraction is expressed as:\n", "$$T_{i,j} A_k = T_k A_k = s$$\n", "where s is a rank-$0$ tensor, meaning that is a scalar." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "A_k = qtn.Tensor(np.array([1, 1, 0, 0]), inds=(\"k\"), tags=(\"$A_k$\",))\n", "s = A_k | T_k\n", "s.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Result of contraction vector-vector = scalar**" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s.contract()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create a Tensor Network\n", "(example from Quimb)\n", "1. Create list of tensors\n", "2. Add physical indices to each tensor - `Tensor.new_ind()`\n", "3. Add bonds between neighbouring tensors - `Tensor.new_bond()`\n", "4. Create `TensorNetwork` object with these tensors" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "L = 10\n", "\n", "# create the nodes, by default just the scalar 1.0\n", "tensors = [qtn.Tensor() for _ in range(L)]\n", "\n", "for i in range(L):\n", " # add the physical indices, each of size 2\n", " tensors[i].new_ind(f\"k{i}\", size=2)\n", "\n", " # add bonds between neighbouring tensors, of size 7\n", " tensors[i].new_bond(tensors[(i + 1) % L], size=7)\n", "\n", "mps = qtn.TensorNetwork(tensors)\n", "mps.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Contraction of TN\n", "Tensor network can be contracted to one tensor of rank $N$, where $N$ is number of tensors in TN." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tensor(shape=(2, 2, 2, 2, 2, 2, 2, 2, 2, 2), inds=('k0', 'k1', 'k2', 'k3', 'k4', 'k5', 'k6', 'k7', 'k8', 'k9'), tags=oset([]), backend='numpy', dtype='float64')\n" ] } ], "source": [ "tensor = mps ^ all\n", "print(tensor)" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 2 }