Skip to content

Instantly share code, notes, and snippets.

@fperez
Last active April 19, 2022 18:52
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save fperez/c7b1cb4810f9d0935e893f34c41f0c62 to your computer and use it in GitHub Desktop.
Save fperez/c7b1cb4810f9d0935e893f34c41f0c62 to your computer and use it in GitHub Desktop.
Notes for "Why does deep and cheap learning work so well?" (ArXiv:1608.08225v1/cond-mat.dis-nn) by Lin and Tegmark.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Multiplication with simple neural nets\n",
"\n",
"[Fernando Perez](http://fperez.org)\n",
"\n",
"Notes for *Why does deep and cheap learning work so well?* \n",
"[(ArXiv:1608.08225v1/cond-mat.dis-nn)](https://arxiv.org/abs/1608.08225) by Lin and Tegmark.\n",
"\n",
"Let's implement a simple multiplication network as per figure 2 in the paper. Obviously this could be done much\n",
"more efficiently with any of the deep-learning-in-a-box packages that exist today. My interest is strictly to gain\n",
"some intuition about this result, so I'm doing it all by hand here."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"plt.style.use('ggplot')\n",
"plt.rcParams['figure.figsize'] = 10, 6\n",
"plt.rcParams['axes.facecolor'] = \"0.92\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def σ(y):\n",
" \"Logistic sigmoid\"\n",
" return 1/(1+np.exp(-y))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10ab9ff60>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y = np.linspace(-10, 10)\n",
"plt.plot(y, σ(y));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We need $\\sigma''(0)$. Analytically I'm getting \n",
"\n",
"$$ \n",
"\\sigma''(y) = e^{-y} \\frac{e^{-y}-1}{(e^{-y}+1)^3} \n",
"$$\n",
"\n",
"I'm rusty, so let's double check my algebra with SymPy:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import sympy as S\n",
"S.init_printing(use_latex=True)\n",
"y = S.symbols('y')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAF4AAAAzBAMAAADslqLZAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEIl2mSJE3e9UMqtm\nzbsXyEShAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB1ElEQVRIDe2Vv0vDQBTHX1rSpElLHVo3IWg3\nEQp2FHRwc8lfIKVLQQR1U1w6CYLg4CCCQ/4Di24uxj9AqCBCh4CFuvmrg671fuTSa5LrcaPgG5J3\n733uXd9rki+A2Jod2BNnkxlnaLWTUWFEn93NvgizfCL/gawPtmPX+LDMNxqmJ2NAW6i7IWR4O1Ic\nWq7uhFTu5l3K68dQ9kKqAm9S3j5ZvmfQda7LXOG91BmnLufHvsgrOaJMetxEvMrQs10os3mmV4xF\n6yt+LPK//MsTGKmZSqvVwYwKnnHtrgpvuNa3Cm829B8VHiA/VOMNlTcPla6S8pYvP6XgIaawRsBN\ndC3KJnuLoCZs4Q2PAPrnFJ7IRhHA6l30EZ51QBvcMb6CK0wakQ1EmaPRF8qYLrqsMv5skkUrKhta\nmyVa2EnlJ2Sjx3gypATPywCRDTpLtIl8sxM8JwNUNh5Y/QPsxHleBqhsnDP+KI3nZYDKxlUKvxQE\n+0HwhDK8DFDZiPjU38PLAJUNMkZ8Rmq/SRmI+l3Em+L9JmVgHWPY8EEbp4c+9gHY/5uQgWeaBzDw\n8xAZ46NA6OhtFgmf6nC5zcKxe6YWBV4jb4ozN87h90VqXFHdl9JQYE3+AjU8lOJQYNXRAAAAAElF\nTkSuQmCC\n",
"text/latex": [
"$$\\frac{e^{- y}}{\\left(1 + e^{- y}\\right)^{2}}$$"
],
"text/plain": [
" -y \n",
" ℯ \n",
"──────────\n",
" 2\n",
"⎛ -y⎞ \n",
"⎝1 + ℯ ⎠ "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = 1/(1+S.exp(-y))\n",
"s1 = S.diff(s, y)\n",
"s1"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAG8AAAA1BAMAAAC9/qjCAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMmYiu80QdonvRN2Z\nVKvu110NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC50lEQVRIDd1VPWgUURCe3F42d3vk7rDSKovg\nHwgeIqKVQbETTLMWRmEhBERShJCQFAG3CVpIiIogghgEQQho5FBQUaJRtBAJNhY2J4KJlanESp15\nO7P73r29oFtYOMXON9/Mt293uL0PIH90+X+iLdStqX0m481CJTQp6EbiU8LdacFDKk4kjAKlWrjF\nZMA5HgJ0J2T0vWsOi54oYRTYvwDjzAzF2T32LdTmnLOLPf3YKTfidnJdg1XGH4Q7FwK4dIqKalQd\nRbDAZZIewyXGhhBOy0RlvlxHfFFqzO756Qbc99aZMoVq8MzkMlTq92jgME9RWmg4EdwdH2DKFG5D\n1mvCAfBWj9LAU57C5NyAkbrbKPpMmcKPyB5ccZ/DUHzYdXzCwScYD+rVy5PboRrdZh2Ywj6kv+4Y\nC2HNU4+EQolaC1HvzkjVM0HwKAhOKUxbBRL+pPL9Bbrqj1qLFJNczBNp/T+SnrGccgQwqrVMIS3n\nGv4QZGBWAHIDMNJIy7Z3fIudCXCXZUD/AUyP+UJTlhPf3XyG/Elkel5vpYaKin6GkHEWoaqcObMJ\nhaU2Ii1vpRCgpL+9ahzR253xsNVq+5CtPhP2/R2/06zOFzqvQh/7v/CvfLH+b7ZQmvqS76AX8DKf\n8A3syScEeJVT6Mpf9V/q3Qnr06I7bNroNmyPWctx+jsKU3vsW7GHqEshthlXdBV7xDc85Ke0oCkG\nbJtYufEnmNpjE3aFMp7mKzEU28SqV1Yh9rh56nM6L8hbZMS22S5M7VEUnEtLCJT7xbaJlXGi4aOs\nUanos/uxbVpCcoCsqOCilfuxbeKMeSLZY1aU59n92DZxxhSSy2UFCZX7sW2WgmDwahAs0Wxij1S0\nBz2qcj+2TeybJ+rmpItpObr7WcJOyym1TPezhGSPWUE/AN39cEYeNbXHLCE0LVaEqmHZYzK+O0EC\nPF8QZtsepVlsCMrMw5kskRt8yNS27ZFYFXsFZGXLHn8Dcg3fo0FgFhgAAAAASUVORK5CYII=\n",
"text/latex": [
"$$\\frac{\\left(- e^{y} + 1\\right) e^{y}}{\\left(e^{y} + 1\\right)^{3}}$$"
],
"text/plain": [
"⎛ y ⎞ y\n",
"⎝- ℯ + 1⎠⋅ℯ \n",
"─────────────\n",
" 3 \n",
" ⎛ y ⎞ \n",
" ⎝ℯ + 1⎠ "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s2 = S.simplify(S.diff(s1, y))\n",
"s2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These appear to be different, but it's b/c sympy simplified it to use $e^y$ and I computed it with $e^{-y}$. \n",
"Since I'm lazy, let's have sympy check that the two forms are identical (the algebra is trivial but it's \n",
"late and I'm tired):"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAIkAAAA1BAMAAACHAtX0AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMmYiu80QdonvRN2Z\nVKvu110NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACy0lEQVRIDe1WPYsUQRCtmXG/9/b2HzgiGk9g\nYnZ4aiS4ySh4CguHyMkFi4kGB04iayDLIWggiIeRcIGbKIgo+wNExMTA5Iw08zAwE63p7pmp6pov\n5UI7mKl69er1dM/XAzig4fh/IXSkiHuCFBpjkljhsz14CYNhHorYhQz3zo+zxI6in842wMiCNQqt\nKMWb576PTdIMUtQE3vV5awXgFscNCh3Kvz02pKVJxl46jeMsDKIBghsJzlDYTeD4nKtiCL2dzhCg\n8YHyATQK9ygqVJrTrSBRGT7HqL3Ag0DhlCGpk1DZDbzIELpfz2DkjvAgUHhjSOpkq3iPYROXoca6\nmnBpDiBReIQXuPYaxwuk2yqD+zePGxH41o0vw9kHkGiskg2t0g7DtQdhuABY3stqH+/Gcawi0fIV\nLUeZio66c1QRaPnudpA/YULx7koUZpRk70trBJsBJUB/ASBR9tS9f/LW1z3Js7t1wwAaxqduByOB\nQo/PhZx4JCo6I8eTJCahuyBJGnb9NOTBlKdptppGNYImbm7uoF+pXAIFD+WuHxmeT2kV8dGK+v8y\n24HfBzD2mWL9ZDob1ycXMft+f6WoVh/vR+6/roJN0i96ExirKtkYVjFq1K9drEGqppTtruNX97tq\nLc6vYmb8kSizMKrzC/7yh96PYhW0MqUWRhmhBv7iA/dhoQpaGWJh1iVPWR5kOdNZIKsGUVYm/Zl8\nEjxteZrbosAAZWVyVZjlucKaRKKsjFChZkUZIeZ4hIj+2QoVYlZ6yggdk50UUVbGVqFmRRuhz7RH\nxsqE2CrUrGgjdFh2UoSo3AnDV2F4GavUrGgjVKGSuyJqVrQRUreSzs5jZRTtFUmzUrG7ysrYKtKs\nvONz21l8qZmFSZ5dYVYu2X0851YmUeEcfF8r3gBuZZ7a7SZvTwoKCbyaBGXnq2XFuFbLylROVcfK\nuDlflj9euO3RZs4xmgAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\frac{\\left(-1 + e^{- y}\\right) e^{- y}}{\\left(1 + e^{- y}\\right)^{3}}$$"
],
"text/plain": [
"⎛ -y⎞ -y\n",
"⎝-1 + ℯ ⎠⋅ℯ \n",
"──────────────\n",
" 3 \n",
" ⎛ -y⎞ \n",
" ⎝1 + ℯ ⎠ "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ey = S.exp(-y)\n",
"s2f = ey*(ey-1)/(ey+1)**3\n",
"s2f"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJdjLNVN0iZu+7\nq0QgoRR7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAVklEQVQIHWNgEDJRZWBgSGeQmMDAtYGBOYGB\n5wID+0cG/gsMfN8Z5BUY+L4wzDdgYP0MJeUNQCL8Cgzs3xk4DjBwfWRg2cDAlMDA0M4gHcDAIOxy\nlQEA9FISlFfRJtkAAAAASUVORK5CYII=\n",
"text/latex": [
"$$0$$"
],
"text/plain": [
"0"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"S.simplify(s2 - s2f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Indeed."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As per the paper, $\\mu$ must be defined as \n",
"\n",
"$$\n",
"\\mu = \\frac{\\lambda^{-2}}{8\\sigma''(0)}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that in order to construct the full network, we need shift the origin of $\\sigma$ by 1 to ensure \n",
"$\\sigma''(0) \\neq 0$ so $\\mu$ can be finite.\n",
"We can do this by adding a bias term $\\mathbf{b} = [1, 1, 1, 1]$, as described in the paper. \n",
"This means we need to evaluate $\\sigma''(1)$ instead:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.09085774767294841"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"S.init_printing(use_latex=False) # Turn it off again so it doesn't slow everything down.\n",
"# Let's evaluate the 2nd derivative at the origin (shifted to y=1), numerically \n",
"# (so we can use it below in the network). Since the the point of evaluation of σ'' must be consistent \n",
"# with the definition of the vector b below, let's store it in a variable we also use to construct b\n",
"σ_origin = 1\n",
"s2_ori = float(s2.subs(y, σ_origin).n())\n",
"s2_ori"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's define the generic form of an affine layer. To support proper composition in a multi-layer network, \n",
"we need to express the affine layer as a function:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def A(W, b):\n",
" \"Affine layer\"\n",
" return lambda y: W @ y + b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, let's construct the full network in Fig. 2 (left side). It should converge to the multiplication operator as \n",
"$\\lambda \\rightarrow 0$. \n",
"\n",
"**Warning:** I am having to redefine $\\mu \\rightarrow 2\\times\\mu$, in order to get the right numerical results. \n",
"It may be an error in the paper's algebra or in my implementation, but I haven't had the time to track it down yet.\n",
"Feedback/hints welcome."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# The connection matrices for the two affine layers. These are just constants\n",
"# that only need to be defined once\n",
"w1 = np.array([1.0, 1, -1, -1, 1, -1, -1, 1]).reshape(4,2)\n",
"b = σ_origin * np.array([1.0, 1, 1, 1]) # The bias shift to avoid evaluating σ''(0)\n",
"w2 = np.array([1.0, 1, -1, -1])"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"λ : 1e-05\n",
"Network u*v: 162430.792953\n",
"Exact u*v : 162432\n",
"Abs. Error : 1.2\n",
"Rel. Error : 7.4e-06\n"
]
}
],
"source": [
"λ = 0.00001 # as it -> 0, the multiply() function improves in accuracy\n",
"μ = 1.0/(8*s2_ori*λ**2) # from formula in fig. 2\n",
"\n",
"# The actual matrices carry λ and μ:\n",
"W1 = λ*w1 \n",
"W2 = 2*μ*w2 # This factor of 2 is not in the paper. Error in my algebra?\n",
"\n",
"# Now we build the affine layers as functions\n",
"A1 = A(W1, b)\n",
"A2 = A(W2, 0)\n",
"\n",
"# With these in place, we can then build the 3-layer network that approximates\n",
"# the multiplication operator\n",
"def multiply(u, v):\n",
" \"Multiply two numbers with a neural network.\"\n",
" y = np.array([u, v], dtype=float)\n",
" return A2(σ(A1(y)))\n",
"\n",
"\n",
"# Let's verify it with two numbers\n",
"u, v = 376, 432\n",
"uvn = multiply(u, v)\n",
"uv = u*v\n",
"err = abs(uv - uvn)\n",
"\n",
"print(\"λ :\", λ)\n",
"print(\"Network u*v:\", uvn)\n",
"print(\"Exact u*v :\", uv)\n",
"print(\"Abs. Error : %.2g\" % err)\n",
"print(\"Rel. Error : %.2g\" % (err/uv))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Error properties of the approximation\n",
"\n",
"Let's have a quick look at how the approximation converges. From eq. (8) in the paper, we expect the error \n",
"to be $\\mathcal{O}(\\lambda^2(u^2+v^2))$. Note that the equation in the paper states the error without the extra\n",
"$\\lambda^2$ factor, but that's because it's making an analysis assuming $|u| \\ll 1, |v| \\ll 1$, where as once \n",
"implemented we relax this restriction by rescaling $u$ and $v$ by $\\lambda$ via the first affine layer.\n",
"\n",
"In order to conveniently scan over values of $\\lambda$, $u$ and $v$, it will be helpful to encapsulate the above\n",
"construction into a callable object that precomputes all relevant quantities at construction time (for each \n",
"$\\lambda$) and then can be quickly called:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"λ : 1e-05\n",
"Network u*v: 162430.792953\n",
"Exact u*v : 162432\n",
"Abs. Error : 1.2\n",
"Rel. Error : 7.4e-06\n"
]
}
],
"source": [
"class NNMultiply:\n",
" def __init__(self, λ=1e-5):\n",
" self.λ = λ\n",
" μ = 1.0/(8*s2_ori*λ**2)\n",
" self.W1 = λ*w1 \n",
" self.W2 = 2*μ*w2 # This factor of 2 is not in the paper. Error in my algebra?\n",
" self.b = σ_origin * np.array([1.0, 1, 1, 1]) # The bias shift to avoid evaluating σ''(0)\n",
" \n",
" def __call__(self, u, v):\n",
" \"Multiply two numbers with a neural network.\"\n",
" y = np.array([u, v], dtype=float)\n",
" # Since we'll be calling this a lot, let's make a small optimization and \"unroll\"\n",
" # our network to avoid a few unnecessary function calls\n",
" return self.W2 @ σ(self.W1 @ y + self.b)\n",
"\n",
"# Let's verify it with the same values as above, as a sanity check\n",
"u, v = 376, 432\n",
"mult = NNMultiply(λ)\n",
"uvn = mult(u, v)\n",
"uv = u*v\n",
"err = abs(uv - uvn)\n",
"\n",
"print(\"λ :\", mult.λ)\n",
"print(\"Network u*v:\", uvn)\n",
"print(\"Exact u*v :\", uv)\n",
"print(\"Abs. Error : %.2g\" % err)\n",
"print(\"Rel. Error : %.2g\" % (err/uv))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can build an error plot at various values of $\\lambda$. Since the function we're approximating is simply\n",
"$uv$, we can keep $u$ constant and only scan over $v$ for each $\\lambda$, as long as we cover a range that goes\n",
"from $u \\ll v$ to $u \\gg v$.\n",
"\n",
"In the figure below, next to each line for a given $\\lambda$ and in the same color, is a dashed line that plots\n",
"$\\lambda^2(u^2+v^2)$, which should be (modulo a constant) a good estimate of the observed error."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d1a8128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"u = 10\n",
"lambdas = np.logspace(-1, -7, 7)\n",
"vv = np.linspace(0.1, 100, 50)\n",
"\n",
"fig, ax = plt.subplots()\n",
"for λ in lambdas:\n",
" mult = NNMultiply(λ)\n",
" err = []\n",
" for v in vv:\n",
" uvn = mult(u, v)\n",
" uv = u*v\n",
" err.append(abs(uv - uvn)/uv)\n",
" \n",
" l, = ax.semilogy(vv, err, label=r\"$\\lambda =$ %.2g\" % λ)\n",
" ax.semilogy(vv, (λ**2)*(u**2+vv**2), '--', color=l.get_color())\n",
" \n",
"ax.set_xlabel('v')\n",
"ax.set_ylabel('Rel. error')\n",
"ax.set_title(\"u fixed at %g\" % u)\n",
"ax.legend();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we see, once $\\lambda < 10^{-5}$, we start hitting some numerical issues, and below $\\lambda < 10^{-6}$,\n",
"the error is not only worse than the analytical estimate, it actually starts getting worse as $\\lambda$ gets\n",
"smaller. This is because $\\mu \\sim 1/\\lambda^2$, and in double precision we don't have enough digits to go further."
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [default]",
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
@hwlin76
Copy link

hwlin76 commented Sep 10, 2016

Thanks for the interest in our paper: you are right about the factor of 2! It is correct in equation (11) but incorrect in the figure. We are correcting it in the next draft and will acknowledge you appropriately!

@fperez
Copy link
Author

fperez commented Sep 11, 2016

Thanks for pitching in, @hwlin76! Lovely paper: I had been thinking about these questions for a while in my "spare time", and I am finding it very interesting.

One question: in eq. (11) your denominator is still $1/8\sigma_2$, so I'm a bit confused by your comment. I thought the value in the figure came from the same 1/8 in (11). Am I misunderstanding?

BTW, I added a bit of error analysis to the notebook above, it's nicely informative (and consistent with the analytical estimates, up to numerical precision).

@hwlin76
Copy link

hwlin76 commented Sep 11, 2016

Glad to hear that the paper has resonated with you! Yes, you are right that the 1/8 in the figure comes from equation (11), but we have defined sigma_2 somewhat confusingly as sigma''/2 (see equation 10). We'll likely change this quirky notation in the next iteration of the paper.

Your error plots are very interesting. It would be cool to see how the error scales for approximating complicated multivariate polynomials in addition to just the multiplication gate.

@fperez
Copy link
Author

fperez commented Sep 12, 2016

Ah @hwlin76, of course! I just didn't pay enough attention to eq. (10) and fell in the same trap you probably did: once I accepted it as correct (yup, Taylor series, fine, move along), then after that in my head I simply identified sigma_2 with sigma'', and the trap was closed.

I'd be happy to look at the numerical error for multivariate polynomials, but in a couple of days, I'm currently traveling.

BTW, if you don't mind, I'd like to use this little exchange to illustrate two things:

  • your very interesting results/paper (which I'm not done digesting)
  • the value of open work with Jupyter, Github, etc, for this kind of exchange, that is even more lightweight and direct than an exchange of ArXiv preprints (and there's code to work reproducibly off actual implementations).

On Tuesday I'm giving the colloquium in the CS department at CU Boluder but I know some of the folks from my former physics dept will be in attendance. Would you be OK if I mention it?

@fperez
Copy link
Author

fperez commented Sep 12, 2016

ps - small typo, in the paragraph right after eq. (11) it says that the approximation is exact as lambda -> \infty. It should be "as lambda -> 0."

@fperez
Copy link
Author

fperez commented Sep 13, 2016

BTW @hwlin76, for the multivariate case, are you thinking of representing it as nested networks, e.g. g(u,v,w) = uvw as g = f(u, f(v,w)) where f(u,v) = uv, or do you have a similar (explicit) construction to the paper for the 3-variable case, with a 3-n-1 network? I imagine this should be possible/easy, but I haven't tried yet figuring out what the nx3 matrix would be, nor what \mu would become. And if that's the case, do you have the inductive result for the p-term multivariate product?

Before I dive into the multivariate analysis, it would be good to know which way you're thinking of it, and if you have these constructive results ready then we could formulate the implementation that way directly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment