Skip to content

Instantly share code, notes, and snippets.

@davegreenwood
Created October 9, 2018 08:19
Show Gist options
  • Save davegreenwood/7c66588bf47fe9dc1b853c0c8ce4b63d to your computer and use it in GitHub Desktop.
Save davegreenwood/7c66588bf47fe9dc1b853c0c8ce4b63d to your computer and use it in GitHub Desktop.
Simple gradient descent for fitting points
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simple gradient descent for fitting points\n",
"\n",
"Often the simple examples show fitting a line to some noisy points.\n",
"\n",
"For this example, we will find the radius of points projected to a circle, \n",
"and the x and y offset of the centre.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from __future__ import print_function, division\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"n_pts = 20\n",
"\n",
"def hypothesis(theta):\n",
" # predict a circle from parameters: radius, x and y centre\n",
" r, xc, yc = theta\n",
" ln = np.linspace(-np.pi, np.pi, n_pts).reshape(-1, 1)\n",
" x = xc + np.cos(ln) * r\n",
" y = yc + np.sin(ln) * r\n",
" pts = np.hstack([x, y])\n",
" return pts\n",
"\n",
"def J(theta, y):\n",
" # return scalar mean square error\n",
" pred = hypothesis(theta)\n",
" return np.square(pred - y).mean()\n",
"\n",
"def gradient(theta_prev, theta, y, clip=2.5):\n",
" # returns partial derivative of theta.shape\n",
" # gradient is clipped by clip value.\n",
" \n",
" # delta-j-theta\n",
" cost_prev = J(theta_prev, y)\n",
" delta_j = np.ones(theta.size)\n",
" for i, t in enumerate(theta):\n",
" tt = theta_prev.copy()\n",
" tt[i] = t\n",
" delta_j[i] = J(tt, y) - cost_prev\n",
" \n",
" #delta-theta (eps avoids division by zero)\n",
" delta_t = (theta - theta_prev)\n",
" eps = np.ones(theta.size) * 1e-12\n",
" sign = delta_t/np.abs(delta_t)\n",
" delta_t = np.maximum(eps, np.abs(delta_t)) * sign\n",
" # partial derivative\n",
" grad = delta_j / delta_t\n",
" return np.clip(grad, -clip, clip)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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9Va97nWv0wMPPKBVq1bpyCOP1Hvf+16/bTabVTqdVl9fn5xzkqT3ve99evbZZ7Vp0yZNnTpVq1ev1tNPP+23cc7p9NNP16GHHqo777xTmUxGX/7yl9XZ2an+/n6dddZZ+ulPf6q7775b9957ryQpk8nU/X0PhWAARIgPvuH1Zgf8uRksFNWbHeAcTUJRh+hMJqNUKqUZM2boiCOO8POvuOIK/+e2tjY98MADuvXWWw8IBjNnztT111/v7yfwi1/8Qvfee68eeughLV26VJJ0/fXXq739ldo3btyoxx57TE8//bSmTZsmSfrsZz+rO+64Q7fddptWrVqlWbNmacqUKQfUExUuJQARCvrgQ0n1b4X9V5120KUXTC5dne3+/5O4QvSXvvQlLV26VHPmzNGsWbN03XXXafv27Qess3jx4gNu5vT4449rypQpOv744/28o48+Wq997Wv99MMPP6w9e/Zo9uzZmjVrln9t3bpVTzzxRPhvbASMGAARqR0OrUxLmvS/FQcNFQcNKWPyiHv06NZbb9UFF1ygz33uczrxxBPV0tKiz3zmM9q8efMB682cOfOA6crlhFrV84vFoo488kht2rTpoPVe85rXvPriXyWCARABPviGVyi6wKHiynShGPyPLSamOEJ0KpU64LbC999/v5YtW6YPf/jDft5ofps/5phjtH//fj3yyCM64YQTJElbtmzRCy+84Nc5/vjj9Zvf/EZTpkxRa2vrqOqJEsEAiAAffMO7YGXHkMsmc2CajOIK0a2trdq8ebO2bdumWbNm6eijj9ZNN92ke+65R21tbbr55pv10EMPqa2tbdj9HHPMMTrllFO0atUqffGLX9TUqVN14YUXavr06f72xaeccopOPPFEnXHGGfr0pz+tRYsWaefOnbrzzjt1xhlnaOnSpWptbdXWrVv14x//WPPmzVNLS4vvRwgbPQZABC4YpnGqq7N92A9GYDIZLkSvXtkRWoi+6KKLlEwmdeyxx2rOnDk69dRT9e53v1tnnXWW/uiP/kjPPffcAaMHw7npppt0+OGHa/ny5TrzzDP113/912ppadEhhxwiqfR8gzvvvFPLly/XBz7wAXV0dOjss8/Wtm3bdPjhh0uS/vzP/1ynnnqqTj75ZM2ZM0df+9rXQnnfQWyo6yGNwMzSknK5XE7pdDrucgAAI9i7d6+2bt2qtrY2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\n",
"text/plain": [
"<Figure size 600x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# generate points from known and unknown params\n",
"theta_target = np.array([2.7, 0.7, 0.8])\n",
"theta_prev = np.random.random([3])\n",
"\n",
"noise = np.random.random([n_pts, 2]) * 0.1\n",
"y = hypothesis(theta_target) + noise\n",
"y_prime = hypothesis(theta_prev)\n",
"\n",
"plt.figure(figsize=[6,6], dpi=100)\n",
"plt.plot(*y.T, marker='x', lw=0, label='target')\n",
"plt.plot(*y_prime.T, marker='x', lw=0, label='start')\n",
"plt.title('{} points on circle'.format(n_pts))\n",
"plt.axis('equal');\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"start cost 2.2423594747501405\n",
"start theta [0.62797052 0.91166359 0.49396124]\n",
"target theta [2.7 0.7 0.8]\n",
"final theta [2.69990513 0.74422969 0.85051282]\n",
"final cost 0.000770570848776681\n"
]
}
],
"source": [
"learning_rate = 0.001\n",
"theta = np.random.random([3])\n",
"costs, grads, thetas = [], [], []\n",
"\n",
"print('start cost', J(theta, y))\n",
"print('start theta', theta)\n",
"print('target theta', theta_target)\n",
"\n",
"for i in range(10000):\n",
" cost = J(theta, y)\n",
" if cost < 1e-4:\n",
" print('breaking at {}'.format(i))\n",
" break\n",
" grad = gradient(theta_prev, theta, y)\n",
" theta_prev = theta\n",
" costs.append(cost)\n",
" grads.append(grad.ravel())\n",
" thetas.append(theta.ravel())\n",
" theta = theta - learning_rate * grad \n",
" \n",
"grads = np.array(grads).reshape(-1, 3).T\n",
"thetas = np.array(thetas).reshape(-1, 3).T\n",
"\n",
"print('final theta', theta )\n",
"print('final cost', cost)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 600x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y_prime = hypothesis(theta)\n",
"\n",
"plt.figure(figsize=[6,6], dpi=100)\n",
"plt.plot(*y.T, marker='x', lw=0, label='target')\n",
"plt.plot(*y_prime.T, marker='x', lw=0, label='finish')\n",
"plt.title('{} points on circle'.format(n_pts))\n",
"plt.axis('equal');\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[9,6], dpi=100)\n",
"plt.title('cost at iteration')\n",
"plt.plot(costs);"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[9,6], dpi=100)\n",
"plt.title('gradients')\n",
"plt.plot(grads[0], alpha=0.3, label='grad 0')\n",
"plt.plot(grads[1], alpha=0.3, label='grad 1')\n",
"plt.plot(grads[2], alpha=0.3, label='grad 2')\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[9,6], dpi=100)\n",
"plt.title('thetas')\n",
"plt.plot(thetas[0], alpha=0.3, label = 'r')\n",
"plt.plot(thetas[1], alpha=0.3, label = 'xc')\n",
"plt.plot(thetas[2], alpha=0.3, label = 'yc')\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.15"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment