Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction to Neural Networks\n",
"\n",
"## TO DO: Almost all the figues and schematics will be replaced or improved slowly\n",
"\n",
"<img src=\"./images/neuralnets/Colored_neural_network.svg\"/>\n",
"source: https://en.wikipedia.org/wiki/Artificial_neural_network\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## History of Neural networks\n",
"\n",
"**TODO: Make it more complete and format properly**\n",
"\n",
"1943 - Threshold Logic\n",
"\n",
"1940s - Hebbian Learning\n",
"\n",
"1958 - Perceptron\n",
"\n",
"1975 - Backpropagation\n",
"\n",
"1980s - Neocognitron\n",
"\n",
"1982: Hopfield Network\n",
"\n",
"1986: Convolutional Neural Networks\n",
"\n",
"1997: Long-short term memory (LSTM) model\n",
"\n",
"2014: Gated Recurrent Units, Generative Adversarial Networks(Check)?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Why the boom now?\n",
"* Data\n",
"* Data\n",
"* Data\n",
"* Availability of GPUs\n",
"* Algorithmic developments which allow for efficient training and training for deeper networks\n",
"* Much easier access than a decade ago"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Building blocks\n",
"### Perceptron\n",
"\n",
"Smallest unit of a neural network is a **perceptron** like node.\n",
"\n",
"**What is a Perceptron?**\n",
"\n",
"It is a simple function which has multiple inputs and a single output.\n",
"\n",
"Step 1: Weighted sum of the inputs is calculated\n",
"\n",
"\\begin{equation*}\n",
"weighted\\_sum = \\sum_{k=1}^{num\\_inputs} w_{i} x_{i}\n",
"\\end{equation*}\n",
"\n",
"Step 2: The following activation function is applied\n",
"\n",
"$$\n",
"f(weighted\\_sum) = \\left\\{\n",
" \\begin{array}{ll}\n",
" 0 & \\quad weighted\\_sum < threshold \\\\\n",
" 1 & \\quad weighted\\_sum \\geq threshold\n",
"\n",
"You can see that this is also a linear classifier as we introduced in script 02."
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"%config InlineBackend.figure_format = 'retina'\n",
"import matplotlib as mpl\n",
"mpl.rcParams['lines.linewidth'] = 3"
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"def perceptron(X, w, threshold=1):\n",
" # This function computes sum(w_i*x_i) and \n",
" # applies a perceptron activation\n",
" linear_sum = np.dot(X,w)\n",
" output=0\n",
" if linear_sum >= threshold:\n",
" output = 1\n",
" # print(\"The perceptron has peaked\")\n",
" return output\n",
"X = [1,0]\n",
"w = [1,1]\n",
"perceptron(X,w)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Boolean AND\n",
"\n",
"| x$_1$ | x$_2$ | output |\n",
"| --- | --- | --- |\n",
"| 0 | 0 | 0 |\n",
"| 1 | 0 | 0 |\n",
"| 0 | 1 | 0 |\n",
"| 1 | 1 | 1 |"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Perceptron output for x1, x2 = [0, 0] is 0\n",
"Perceptron output for x1, x2 = [1, 0] is 0\n",
"Perceptron output for x1, x2 = [0, 1] is 0\n",
"Perceptron output for x1, x2 = [1, 1] is 1\n"
]
}
],
"source": [
"# Calculating Boolean AND using a perceptron\n",
"import matplotlib.pyplot as plt\n",
"w=[1,1]\n",
"X=[[0,0],[1,0],[0,1],[1,1]]\n",
"for i in X:\n",
" print(\"Perceptron output for x1, x2 = \" , i , \" is \" , perceptron(i,w,threshold))"
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this simple case we can rewrite our equation to $x_2 = ...... $ which describes a line in 2D:"
]
},
{
"cell_type": "code",
"image/png": "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5ZVXFBERoTVr1jiUCgAA/0ZBABC03n33Xc2cOVP58+f3OHfgwAH93//9nzp37qxjx445lA4AAP9EQQAQtEJCQvT4448rLi5O9957b7rzr7/+ulwul95//30H0gEA4J8oCACCXvHixbV8+XItWrRIhQsX9jj722+/6YEHHlDr1q11+PBhhxICAOA/KAgAsgRjjB5++GG53W61bds23fl3331X5cuX14IFC8TtoAEAWQkFAUCWcsMNN+itt97SihUrVKxYMY+zx44dU4cOHXTPPffop59+cighAAC+RUEAkCXde++9iouLU7du3dKd/eSTTxQeHq7p06crKSnJgXQAAPgOBQFAllWgQAG99tprWr9+vUqXLu1x9p9//lGvXr3UoUMHh9IBAOAbFAQAWd4dd9yhPXv2qH///goJ8fxjsWPHjs6EAgDARygIACApd+7cGj9+vLZs2aLIyMhUZzp37qxGjRo5nAwAAGdREADgX6pWrart27dr1KhRypYt24X1N910kyZMmODDZAAAOIOCAACXyJ49u4YPH66dO3eqevXqkqRXX31VBQsW9HEyAAC8L8zXAQDAX4WHh+vzzz/XRx99pGbNmmVon1OnTikhIUH58uXzcjoAALyDKwgA4EFoaGiGy4EkDR8+XBEREfr000+9mAoAAO+hIABAJvnyyy81ceJE/fTTT7rrrrvUsWNH/fnnn76OBQDAFaEgAEAmOHv2rDp37nzRg9TeeOMNuVwuvffeez5MBgDAlaEgAEAmePHFFxUbG3vZ+sOHD6tVq1Zq2bKlDh065INkAABcGQoCAFyjX3/9Vc8//7zHmaVLl8rlcmnevHmy1jqUDACAK0dBAIBrVKxYMX3wwQcqXry4x7m//vpLjz32mJo0aaIDBw44Ew4AgCtEQQCATHDPPfcoLi5OPXr0SHd29erVioiI0JQpU5SYmOhAOgAAMo6CAACZJH/+/JoxY4Y+++wz3XbbbR5nT5w4od69e6tevXrat2+fQwkBAEgfBQEAMlm9evW0e/duDRw4UCEhnn/Mbt68WVFRURozZozOnTvnUEIAANJGQQAAL8iVK5fGjRunrVu3qkKFCh5nz549q2HDhqlq1aqKiYlxKCEAAKmjIACAF1WpUkXbt2/X888/r+zZs3uc3b17t6pVq6ZBgwbp1KlTDiUEAOBiFAQA8LJs2bJp6NCh2rVrl2rWrOlxNjExUePGjVNUVJS2b9/uUEIAAP4/CgIAOKR8+fLatGmTXnnlFeXOndvj7IEDB9KdAQDAGygIAOCg0NBQPfXUU9q7d68aN26c5tyzzz4rl8vlYDIAAJJREADAB2699VatWrVKr7/+ugoWLHjRtgoVKmjgwIE+SgYAyOooCADgI8YYderUSW63W/fff78kKSQkRHPnzk33A80AAHhLmK8DAEBWd9NNN2np0qV67733tH//flWpUsXXkQAAWRgFAQD8RMuWLa9ovkuXLqpRo4Y6d+4sY4yXUgEAshreYgQAAWjp0qWaO3euunbtqsaNG+v777/3dSQAQJCgIABAgDl27Jh69ux54et169YpMjJSkydPVmJiog+TAQCCAQUBAAJMv3799Ntvv1207uTJk+rTp49q166tuLg4HyUDAAQDCgIABJDVq1dr3rx5aW7funWrKlWqpOeee05nz551MBkAIFhQEAAggBQpUkRRUVEeZ86dO6fhw4erSpUq+vLLLx1KBgAIFhQEAAggFStW1LZt2zR27FjlyJHD42xsbKxq1KihAQMG6OTJkw4lBAAEOgoCAASYbNmyafDgwdq1a5dq167tcTYpKUkTJkxQxYoVtWHDBmcCAgACGgUBAAJUuXLltHHjRk2dOlV58uTxOPvtt9+qQYMG6t69u+Lj4x1KCAAIRBQEAAhgISEh6tWrl+Li4tSkSZN052fOnKnw8HCtXLnSgXQAgEBEQQCAIHDLLbfo448/1htvvKHrrrvO4+yvv/6qe++9V+3atdORI0ccSggACBQUBAAIEsYYtW/fXvv27VOrVq3SnV+0aJFcLpf++9//ylrrQEIAQCCgIABAkClatKjeffddLV26VDfeeKPH2T/++EM9e/bUX3/95VA6AIC/oyAAQJC6//775Xa79dhjj3mcmzx5crpvSwIAZB0UBAAIYtddd53mzp2r1atXq2TJkpdtv+uuu/TII484HwwA4LcoCACQBTRu3FixsbHq3bu3jDGSpLx582rmzJkXvgYAQKIgAECWkTdvXk2ePFmff/65ypcvr3HjxqlEiRK+jgUA8DNhvg4AAHBWzZo1tXPnTmXLli1D84mJiZo9e7Y6deqkHDlyeDkdAMDXuIIAAFlQjhw5FBKSsf8LmDJlinr06KHKlStr69atXk4GAPA1CgIAIE3ff/+9hg4dKkmKi4tTzZo11bdvX504ccLHyQAA3kJBAACkylqrrl276tSpUxetmzRpkipUqKB169b5MB0AwFsoCACAVL3++utploDvv/9ejRo1UteuXXnIGgAEGQoCACBVGblCMGfOHIWHh2v58uUOJAIAOIGCAABI1cKFC7Vw4UJdf/31HucOHjyo++67Tw899JB+//13h9IBALyFggAASJUxRu3atZPb7dZDDz2U7vzbb78tl8ult956S9ZaBxICALzBLwqCMaaVMWaqMWaTMeZvY4w1xiy8ymMVN8a8bow5aIw5Y4w5YIyZbIy5LrNzA3DGsmVSy5ZS48bJy2XLfJ0oaylSpIgWL16sZcuW6eabb/Y4e/ToUT3yyCO699579fPPPzuUEN7CuQdkTX5RECQNk9RLUpSkX6/2IMaY0pJ2SOokaZukSZK+l9Rb0hfGGM/XyQH4lfHjpYIFpRYtpKVLpbVrk5ctWiSvHz/e1wmzlubNmysuLk5du3ZNd/ajjz5SeHi4Xn31VSUlJTmQDpmJcw/I2vylIPSRdLuk/JJ6XMNxZkgqIukpa20La+0ga21DJReFspLGXHNSAI7o2FEaOFCKj099e3x88vZOnRyNleUVLFhQs2bN0tq1a1WqVCmPs8ePH9cTTzyhBg0aaP/+/Q4lxLXi3APgFwXBWrveWrvfXsObVo0xpSTdKemApOmXbB4h6YSkR40xea46KABHjB8vvfFGxmbnz+evmb7QsGFD7dmzR3379k33icwbN25UhQoV9NJLLykhIcGhhLganHsAJD8pCJmkYcpylbX2ouvZ1trjkj6XlFtSDaeDAbgyY67wWt+VziNz5MmTRy+//LI2b96s8PBwj7OnT5/WM888o0ceecShdLganHsApOAqCGVTlt+ksf389e3bHcgC4CotW5b2WxvSEh/Phyd9qXr16oqJidGIESOULVs2j7M9elzLu0jhTZx7AM4LpoJQIGWZ1o+38+sLZuRgxpgdqb0klbvWoADStmCBs/shc2TPnl0jR47Ujh07VLVq1VRnunfvrvr16zucDBnFuQfgvGAqCOkxKUtuzg34sSv9C+a17ofMFRkZqS+++EITJkxQrly5LqwvXry4xo0b58NkSA/nHoDzgqkgnP8RVSCN7fkvmfPIWls5tZekr641KIC0FUjrDPbSfsh8oaGh6tevn/bs2aM77rhDkvTaa68pf/78nneET3HuATgvmArC1ynLtD5jcFvKMq3PKADwA+3bO7sfvKdMmTJau3at1qxZo6ZNm2ZonxMnTujYsWNeTobUcO4BOC+YCsL6lOWdxpiL/l3GmHySaks6JWmL08EAZNx99135XyQLFEjeD/4nJCREjRo1yvD8sGHD5HK59P7773sxFVLDuQfgvIArCMaYbMaYcilPTb7AWvudpFWSSkrqecluoyTlkbTAWnvCkaAArtrQod6dh3/64osv9Morr+i3337TAw88oNatW+vw4cO+jpWlcO4BkPykIBhjWhhj5htj5ksalLK65vl1xpgJ/xovJmmfpLWpHOoJSb9LmmKM+cAY84IxZp2Sn9T8jSR+lAEBYMAAqUOHjM127Jg8j8B25swZde7cWf9+Xua7776r8uXLa8GCBbqG52jiCnDuAZD8pCBIipLUIeXVJGVdqX+ta5WRg6RcRagiab6k6pL6SSotaYqkmtbao5maGoDXzJ8vvfRS2m95KFAgefu8eY7GgpeMGTNG+/btu2z9sWPH1KFDB91999368ccffZAs6+HcA2D4q8yVMcbsiI6Ojt6xY4evowBZxrJlyfdaj49P/uWkfXve9xxMDh48qJIlS+rcuXMe5/LmzasXX3xRPXr0UEiIv/x9K7hx7gG+VblyZcXExMSk3EnTMRSEK0RBAIDMt2HDBnXp0kXfffddurN16tTRnDlzVLZsWQeSAYDv+Kog8CcYAIDP3XHHHdqzZ4/69++f7tWB//3vf6pYsaJefPHFdK86AACuHAUBAOAXcufOrfHjx2vLli2KjIz0OHvmzBkNHjxY1atX186dOx1KCABZAwUBAOBXqlatqu3bt2v06NHKli2bx9mdO3eqatWqGjJkiE6fPu1QQgAIbhQEAIDfyZ49u5599lnt3LlT1atX9zibmJioF154QVFRUfr8888dSggAwYuCAADwW+Hh4fr88881adIk5c6d2+Ps119/rbp16+rJJ5/U8ePHHUoIAMGHggAA8GuhoaF6+umnFRsbq0aNGnmctdZq2rRpioiI0ObNmx1KCADBhYIAAAgIpUqV0urVqzVnzhwVSOspXikOHz6s66+/3qFkABBcKAgAgIBhjFHnzp3ldrt1n4cndo0cOZLnJADAVaIgAAACzs0336z3339f77zzjooUKXLRtujoaPXv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AEBAyJkzp55//nlt375dlSpV8jh77tw5jRw5UpUrV9aXX37pUEIgOFAQAABAQImKitK2bdv04osvKkeOHB5n9+7dqxo1aqh///46efKkQwmBwEZBAAAAAScsLEzPPPOMdu/erTp16nicTUpK0ssvv6yHHnrIoXRAYKMgAACAgFW2bFl99tlnmj59uvLmzZvmXEhIiIYOHepgMiBwURAAAEBACwkJ0RNPPKG4uDjdddddqc48/fTTql69usPJgMBEQQAAAEGhRIkS+uijj7RgwQIVKlTowvpSpUpp9OjRPkwGBBYKAgAACBrGGD366KNyu91q3bq1JGn27NnKkyePj5MBgYOCAAAAgk7RokX19ttvKyYmRg0bNszQPvHx8frll1+8nAzwfxQEAAAQtNJ7XsK/DRw4UC6XSzNnzlRSUpIXUwH+jYIAAACyvPXr12vWrFk6fvy4unfvrkaNGunbb7/1dSzAJygIAAAgSzt58qS6du160boNGzYoMjJSEyZMUEJCgo+SAb5BQQAAAFnaiBEj9N133122/vTp0xowYIBq1qypPXv2+CAZ4BsUBAAAkGUdPnxY06ZN8zizfft2Va5cWSNGjNCZM2ccSgb4DgUBAABkWUWLFtXWrVtVpUoVj3MJCQkaPXq0oqOjtWXLFofSAb5BQQAAAFlahQoV9MUXX2j8+PHKmTOnx1m3261atWqpb9++OnHihEMJAWdREAAAQJYXFham/v37KzY2VvXr1/c4a63VpEmTFBkZqbVr1zqUEHAOBQEAACBFmTJltG7dOr322mvKly+fx9kffvhBjRs3VpcuXfTXX385lBDwPgoCAADAv4SEhKhbt25yu91q2rRpuvNz586Vy+XSsmXLHEgHeB8FAQAAIBXFixfXihUr9NZbb+n666/3OHvo0CG1aNFCbdq00eHDhx1KCHgHBQEAACANxhi1bdtW+/bt00MPPZTu/DvvvCOXy6U1a9Y4kA7wDgoCAABAOm644QYtXrxYy5Yt08033+xx9syZMypTpoxDyYDMR0EAAADIoObNm8vtdqtr165pzowdO1YlS5Z0LhSQySgIAAAAV6BAgQKaNWuW1q5dq1KlSl20rWbNmurZs6ePkgGZg4IAAABwFRo2bKjY2Fj169dPISEhyp49u+bMmaPQ0FBfRwOuSZivAwAAAASq3Llza8KECWrdurVi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\n",
"image/png": {
"height": 252,
"width": 388
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotting the decision boundary\n",
"plt.xlim(-1,2)\n",
"plt.ylim(-1,2)\n",
"for i in X:\n",
" plt.plot(i,\"o\",color=\"b\");\n",
"# Plotting the decision boundary\n",
"# that is a line given by w_1*x_1+w_2*x_2-threshold=0\n",
"x1 = np.arange(-3,4)\n",
"x2 = threshold - np.arange(-3,4)\n",
"plt.plot(x1, x2 , \"--\" ,color=\"black\");"
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Exercise :Can you compute a Boolean \"OR\" using a perceptron?**\n",
"\n",
"Hint: copy the code from the \"AND\" example and edit the weights and/or threshold"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Boolean OR\n",
"\n",
"| x$_1$ | x$_2$ | output |\n",
"| --- | --- | --- |\n",
"| 0 | 0 | 0 |\n",
"| 1 | 0 | 1 |\n",
"| 0 | 1 | 1 |\n",
"| 1 | 1 | 1 |"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"# Calculating Boolean OR using a perceptron\n",
"# Edit the code below"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Perceptron output for x1, x2 = [0, 0] is 0\n",
"Perceptron output for x1, x2 = [1, 0] is 1\n",
"Perceptron output for x1, x2 = [0, 1] is 1\n",
"Perceptron output for x1, x2 = [1, 1] is 1\n"
"image/png": "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\n",
"image/png": {
"height": 252,
"width": 388
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Solution\n",
"# Calculating Boolean OR using a perceptron\n",
"import matplotlib.pyplot as plt\n",
"threshold=0.6\n",
"w=[1,1]\n",
"X=[[0,0],[1,0],[0,1],[1,1]]\n",
"for i in X:\n",
" print(\"Perceptron output for x1, x2 = \" , i , \" is \" , perceptron(i,w,threshold))\n",
"# Plotting the decision boundary\n",
"plt.xlim(-1,2)\n",
"plt.ylim(-1,2)\n",
"for i in X:\n",
" plt.plot(i,\"o\",color=\"b\");\n",
"# Plotting the decision boundary\n",
"# that is a line given by w_1*x_1+w_2*x_2-threshold=0\n",
"x1 = np.arange(-3,4)\n",
"x2 = threshold - np.arange(-3,4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Optional exercise: Create a NAND gate using a perceptron**\n",
"\n",
"#### Boolean NAND\n",
"\n",
"| x$_1$ | x$_2$ | output |\n",
"| --- | --- | --- |\n",
"| 0 | 0 | 1 |\n",
"| 1 | 0 | 1 |\n",
"| 0 | 1 | 1 |\n",
"| 1 | 1 | 0 |"
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
"metadata": {},
"outputs": [],
"source": [
"# Calculating Boolean NAND using a perceptron\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In fact a single perceptron can compute \"AND\", \"OR\" and \"NOT\" boolean functions.\n",
"However, it cannot compute some other boolean functions such as \"XOR\"\n",
"\n",
"WHAT CAN WE DO?\n",
"Hint: What is the significance of the NAND gate we created above\n",
"\n",
"We said a single perceptron can't compute these functions. We didn't say that about **multiple Perceptrons**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**XOR function**\n",
"\n",
"**TO DO: INSERT IMAGE HERE!!!!!!!!!!!!!!**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
"### Google Playground\n",
"\n",
"UWE: move up before discussing gradient stuff etc\n",
"\n",
"https://playground.tensorflow.org/\n",
"\n",
"<img src=\"./images/neuralnets/google_playground.png\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Learning\n",
"\n",
"Now we know that we can compute complex functions if we stack together a number of perceptrons.\n",
"\n",
"However, we can DO NOT want to set the weights and thresholds by hand as we did in the examples above.\n",
"\n",
"We want some algorithm to do this for us!\n",
"\n",
"In order to achieve this we first need to choose a loss function for the problem at hand\n",
"\n",
"\n",
"### Loss function\n",
"As in the case of other machine learning algorithms we need to define a so-called \"Loss function\". In simple words this function measures how close are the predictions of our network to the supplied labels. Once we have this function we need an algorithm to update the weights of the network such that this loss decreases. As one can already imagine the choice of an appropriate loss function is very important to the success of the trained model. Fortunately, for classification and regression (which comprise of a large range of probelms) these loss functions are well known. Generally **crossentropy** and **mean squared error** loss functions are chosen for classification and regression problems, respectively.\n",
"\n",
"### Gradient based learning\n",
"Once we have a loss function we want to solve an **optimization problem** which minimizes this loss by updating the weights of the network and this is how the learning actually happens.\n",
"\n",
"One of the most popular optimization method used in machine learning is **Gradient-descent**\n",
"\n",
"INSERT MORE EXPLAINATIONS HERE\n",
"\n",
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
"In order to train the network we need to change Perceptron's **step** activation function as it does not allow training using the back-propagation algorithm among other drawbacks.\n",
"\n",
"Non-Linear functions such as:\n",
"\n",
"* ReLU (Rectified linear unit)\n",
"\n",
"\\begin{equation*}\n",
"f(z) = \\mathrm{max}(0,z)\n",
"\\end{equation*}\n",
"\n",
"* Sigmoid\n",
"\n",
"\\begin{equation*}\n",
"f(z) = \\frac{1}{1+e^{-z}}\n",
"\\end{equation*}\n",
"\n",
"* tanh\n",
"\n",
"\\begin{equation*}\n",
"f(z) = \\frac{e^{z} - e^{-z}}{e^{z} + e^{-z}}\n",
"\\end{equation*}\n",
"\n",
"\n",
"are some of the most popular choices used as activation functions.\n",
"\n",
"Linear activations are **NOT** used because it can be mathematically shown that if linear activations are used then output is just a linear function of the input. So adding any number of hidden layers does not help to learn interesting functions.\n",
"\n",
"Non-linear activation functions allow the network to learn more complex representations."
"image/png": "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
Loading
Loading full blame...