{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 6.1 Example: Learning $XOR$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "X = np.array([[0, 0],\n", " [0, 1],\n", " [1, 0],\n", " [1, 1]])\n", "\n", "y = np.array([[0],\n", " [1],\n", " [1],\n", " [0]])\n", "\n", "bias = np.ones((4,1), dtype=int)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear approach\n", "\n", "Attempt to derive a model for $f(x; \\, \\theta)$ using the _normal equations_ : $(X^{\\intercal} X)^{-1} \\, X^{\\intercal} y$" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1.66533454e-16]\n", " [1.11022302e-16]\n", " [5.00000000e-01]]\n" ] } ], "source": [ "Xb = np.hstack((X, bias))\n", "\n", "XbTXb = Xb.T.dot(Xb)\n", "\n", "Xb_y = Xb.T.dot(y)\n", "\n", "sol = np.linalg.inv(XbTXb).dot(Xb_y)\n", "print(sol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The solution turns out to be\n", "\n", "\\begin{align}\n", " \\text{linear solution} &= \\begin{bmatrix}\n", " 0 \\\\\n", " 0 \\\\\n", " \\frac{1}{2}\n", " \\end{bmatrix}\n", "\\end{align}\n", "\n", "which ignores the inputs and simply yields $\\frac{1}{2}$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def _relu(x):\n", " \"\"\" Return max{0, x} \"\"\"\n", " return x * (x > 0)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "W = np.array([[1, 1],\n", " [1, 1]])\n", "\n", "c = np.array([[0, -1]])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "colors = ['#7570b3', '#d95f02', '#d95f02', '#7570b3']\n", "markers = list('oxxo')\n", "\n", "fig, (ax1, ax2) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 3]})\n", "\n", "ax1.table(cellText=X, colLabels=[r'$x_1$', r'$x_2$'], loc='center')\n", "ax1.axis('off')\n", "\n", "for (x,y), col, m in zip(X, colors, markers):\n", " ax2.scatter(x, y, color=col, marker=m)\n", "ax2.set_xlabel(r'$x_1$')\n", "ax2.set_ylabel(r'$x_2$')\n", "fig.subplots_adjust(wspace=0.5, left=-.5, right=0.5)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "XW = X.dot(W)\n", "\n", "fig, (ax1, ax2) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 3]})\n", "\n", "ax1.table(cellText=XW, colLabels=[r'$x_1$', r'$x_2$'], loc='center')\n", "ax1.axis('off')\n", "\n", "for (x,y), col, m in zip(XW, colors, markers):\n", " ax2.scatter(x, y, color=col, marker=m)\n", "ax2.set_xlabel(r'$x_1$')\n", "ax2.set_ylabel(r'$x_2$')\n", "fig.subplots_adjust(wspace=0.5, hspace=1.2, left=-.5, right=1.)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "XW_c = XW + c\n", "\n", "fig, (ax1, ax2) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 3]})\n", "\n", "ax1.table(cellText=XW_c, colLabels=[r'$x_1$', r'$x_2$'], loc='center')\n", "ax1.axis('off')\n", "\n", "for (x,y), col, m in zip(XW_c, colors, markers):\n", " ax2.scatter(x, y, color=col, marker=m)\n", "ax2.set_xlabel(r'$x_1$')\n", "ax2.set_ylabel(r'$x_2$')\n", "fig.subplots_adjust(wspace=0.5, left=-.5, right=1.)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "h = _relu(XW_c)\n", "\n", "fig, (ax1, ax2) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 3]})\n", "\n", "ax1.table(cellText=h, colLabels=[r'$x_1$', r'$x_2$'], loc='center')\n", "ax1.axis('off')\n", "\n", "for (x,y), col, m in zip(h, colors, markers):\n", " ax2.scatter(x, y, color=col, marker=m)\n", "ax2.set_xlabel(r'$x_1$')\n", "ax2.set_ylabel(r'$x_2$')\n", "fig.subplots_adjust(wspace=0.5, left=-.5, right=1.)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0]\n", " [1]\n", " [1]\n", " [0]]\n" ] } ], "source": [ "w = np.array([[1], \n", " [-2]])\n", "\n", "b = 0\n", "\n", "y = h.dot(w) + b\n", "print(y)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }