{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Uczenie maszynowe\n",
"# 10. Sieci neuronowe – wprowadzenie"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Przydatne importy\n",
"\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## 10.1. Perceptron"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"https://www.youtube.com/watch?v=cNxadbrN_aI"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Pierwszy perceptron liniowy\n",
"\n",
"* Frank Rosenblatt, 1957\n",
"* aparat fotograficzny podłączony do 400 fotokomórek (rozdzielczość obrazu: 20 x 20)\n",
"* wagi – potencjometry aktualizowane za pomocą silniczków"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Uczenie perceptronu\n",
"\n",
"Cykl uczenia perceptronu Rosenblatta:\n",
"\n",
"1. Sfotografuj planszę z kolejnym obiektem.\n",
"1. Zaobserwuj, która lampka zapaliła się na wyjściu.\n",
"1. Sprawdź, czy to jest właściwa lampka.\n",
"1. Wyślij sygnał „nagrody” lub „kary”."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Funkcja aktywacji perceptronu\n",
"\n",
"Funkcja bipolarna:\n",
"\n",
"$$ g(z) = \\left\\{ \n",
"\\begin{array}{rl}\n",
"1 & \\textrm{gdy $z > \\theta_0$} \\\\\n",
"-1 & \\textrm{wpp.}\n",
"\\end{array}\n",
"\\right. $$\n",
"\n",
"gdzie $z = \\theta_1x_1 + \\ldots + \\theta_nx_n$,
\n",
"$\\theta_0$ to próg aktywacji,
\n",
"$x_0 = 1$. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"def bipolar_plot():\n",
" matplotlib.rcParams.update({'font.size': 16})\n",
"\n",
" plt.figure(figsize=(8,5))\n",
" x = [-1,-.23,1] \n",
" y = [-1, -1, 1]\n",
" plt.ylim(-1.2,1.2)\n",
" plt.xlim(-1.2,1.2)\n",
" plt.plot([-2,2],[1,1], color='black', ls=\"dashed\")\n",
" plt.plot([-2,2],[-1,-1], color='black', ls=\"dashed\")\n",
" plt.step(x, y, lw=3)\n",
" ax = plt.gca()\n",
" ax.spines['right'].set_color('none')\n",
" ax.spines['top'].set_color('none')\n",
" ax.xaxis.set_ticks_position('bottom')\n",
" ax.spines['bottom'].set_position(('data',0))\n",
" ax.yaxis.set_ticks_position('left')\n",
" ax.spines['left'].set_position(('data',0))\n",
"\n",
" plt.annotate(r'$\\theta_0$',\n",
" xy=(-.23,0), xycoords='data',\n",
" xytext=(-50, +50), textcoords='offset points', fontsize=26,\n",
" arrowprops=dict(arrowstyle=\"->\"))\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAGVCAYAAABuPkCWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA23UlEQVR4nO3deXRU9f3/8ddkJQsJYCAm7CirLEoBQbYIVBMsqIBo+RW0hxZEpUKgCoJWgQa0qI2CIupXrYWKoqFSAipFkYBlF6xiWIQmLAIBzQoJJPf3B800YzJhhkwyyXyej3NyzuTe9/3kPZk7k1fuarMsyxIAAACM4eftBgAAAFCzCIAAAACGIQACAAAYhgAIAABgGAIgAACAYQiAAAAAhiEAAgAAGIYACAAAYBgCIAAjWZalnJwccS18ACYiAAIwUm5uriIjI5Wbm+vtVgCgxhEAAQAADEMABAAAMAwBEAAAwDAEQAAAAMMQAAEAAAxDAAQAADAMARAAAMAwBEAAAADDEAABAAAMQwAEAAAwDAEQAADAMARAAAAAwxAAAQAADEMABAAAMAwBEAAAwDAEQAAAAMMQAAEAAAxDAAQAADAMARAAAMAwBEAAAADDEAABAAAMQwAEAAAwDAEQAADAMARAAB6Vnp6uF198Uffdd5+6dOmigIAA2Ww2zZs3r0rjrl+/XkOHDlVUVJRCQkLUoUMHzZo1S3l5eR7qHADMEeDtBgD4lpdfflnJyckeHfP5559XYmKibDab+vfvr+joaG3atElJSUl6//33lZaWpqioKI/+TADwZWwBBOBRnTt31vTp07Vs2TLt27dPY8eOrdJ4u3fv1rRp0+Tv7681a9Zo48aNevfdd3Xo0CENHjxY6enpuv/++z3UPQCYgS2AADzqN7/5jcP3fn5V+z9z/vz5sixLv/71r5WQkGCfHhoaqtdff11t2rTR+++/r2+//VYdOnSo0s8CAFOwBRBArVVUVKQ1a9ZIksaMGVNufsuWLdW3b19JUkpKSo32BgB1GVsAAdhdLC5R9rkLHh2zyBYkv5AInbMCdCav0K1lv/32W523AuQXEqE2HbtWuHyXHn20eccebdvzjVvj5/639mxeoS74udcXAN/TMDRIfn42b7dRY2yWZVmuFObn5zud5+fnp5CQkCuqLSgokLMWbDabQkNDr6j23LlzKikpcdpHWFjYFdWeP39excXFHqkNDQ2VzXZpZSssLNTFixc9UhsSEmLf7VZUVKQLF5z/QXentl69evL393e79sKFCyoqKnJaGxwcrICAALdrL168qMJC53+4g4KCFBgY6HZtcXGxzp8/77Q2MDBQQUFBbteWlJTo3LlzHqkNCAhQcHCwJMmyLBUUFFS5dvXe7/XHdQeVW+h83fIlJYUFyvzzaDWf8q78gkMvvwAAn5Y2ra+aNW5g/76u5oiyy1fG5V3ATZo0UXh4eIVfZY/LkaRWrVo5rR0wYIBDbadOnZzW9uzZ06G2Z8+eTms7derkUDtgwACnta1atXKoTUhIcFrbpEkTh9qRI0c6rQ0PD3eoHTt2bKW1Zf8QT5w4sdLarKwse21iYmKltRkZGfbaWbNmVVq7b98+e21SUlKltbt27bLXJicnV1q7adMme+3SpUsrrf3oo4/stcuWLau0tuxuvpSUlEprly1bZq/96KOPKq1dunSpvXbTpk2V1pY9w3XXrl2V1iYlJdlr9+3bV2ntrFmz7LUZGRmV1iYmJtprs7KyKq2dOHGivbagoKDiuvoRemTFDmPCHwD8VL9+/Ry+r6s5wlUcAwhAfvXC5VfP9Q8OAEDdxi5gN2vZBcwuYF/cBXw2v0j9n9vidAxfxC5gAGWZtgvY5QAIwHedySvUz+atd5i2PnGAGoYGVXnsyZMna8WKFZoxc6YSp051a9l9+/Zp4MCBkqTvvvuuwt0bTzzxhJYsWaJhw4bp9ddfd3ns3JwctW7aRIePnVL9iAi3+gLge0w7CYSzgAFUqGFokK4KD67yOEFWkUrO5SjEdtHt8Xp166R6tosqKCjQd/v26uabby5X89WOL1RyLkc3Xn+dW+MHllyqbRQerAgPPE8AqEs4BhBArRUUFKTbbrtNkrR8+fJy8//zn/9oy5ZLu67vvPPOGu0NAOoyAiAAr1u0aJE6dOigcePGlZs3Y8YM2Ww2vfHGG1q3bp19ekFBgcaPH6/i4mKNHDmSu4AAgBvYBQzAo3bt2qUHHnjA/v2hQ4ckSa+88or+8Y9/2KenpKQoJiZG0qVL2aSnp+vqq68uN1737t317LPPKjExUUOHDtXAgQPVpEkTbdq0SSdOnFD79u21ZMmSan5WAOBbCIAAPConJ0dbt24tN/3o0aM6evSo/fvKzsr+qalTp6pLly569tlntW3bNuXn56tFixaaOXOmZs6cqfr163ukdwAwBWcBA6jwLOCds4d45CSQ2ionJ0eRkZHKzs5WBGcBAzAMxwACAAAYhgAIAABgGAIgAACAYQiAAAAAhiEAAgAAGIYACAAAYBgCIAAAgGEIgAAAAIYhAAIAABiGAAgAAGAYAiAAAIBhCIAAAACGIQACAAAYhgAIAABgGAIgAACAYQiAAAAAhiEAAgAAGIYACAAAYBgCIAAAgGEIgAAAAIYhAAIAABiGAAgAAGAYAiAAAIBhCIAAAACGIQACAAAYhgAIAABgGAIgAACAYQiAAAAAhiEAAgAAGIYACAAAYBgCIAAAgGEIgAAAAIYhAAIAABiGAAgAAGAYAiAAAIBhCIAAAACGIQACAAAYhgAIAABgGAIgAACAYQiAAAAAhiEAAgAAGIYACAAAYBgCIAAAgGEIgAAAAIYhAAIAABiGAAgAAGAYAiAAAIBhCIAAAACGIQACAAAYhgAIAABgGAIgAACAYQiAAAAAhiEAAgAAGIYACAAAYBgCIAAAgGEIgMBlFBUV6f3339eoUaPUrl07hYaGqkmTJrrxxhv1pz/9SWfPnvV2iwAAuCXA2w0AtdmmTZv029/+Vunp6Q7Tz507p9OnT2vbtm164YUXtGbNGnXt2tVLXQIA4B62AAJOvPTSSxo4cKA9/AUEBKhLly7q16+foqKi7HVHjx7VkCFD2BIIAKgzCIBABRYvXqwHH3xQlmVJku6//35lZGRo79692rRpk44dO6Y5c+bY60+fPq0ZM2Z4q10AANxCAAR+4osvvtCUKVPs3y9ZskQvv/yyYmJi7NOCgoL0+OOP695777VPW7ZsmQoKCmqyVQAArggBECgjLy9PY8aM0cWLFyVJU6ZM0cSJE53WP/roo/bHBQUF+uijj6q9RwAAqooACJTx5z//WUeOHJEkNW3aVPPmzau0vmPHjmrYsKH9+6+//ro62wMAwCMIgMB//fDDD1q4cKH9+9///vcKCwu77HLR0dH2x6XhEQCA2owACPzXG2+8oezsbElSWFiYxo8f79JygYGB9sf5+fnV0ltd9N577ykuLk4NGzZUWFiYunXrpmeeeUYXLlxwa5w333xTNput0q9169ZV07MAAN/EdQCB//rLX/5ifzxq1CiFh4e7tFzZQFOvXj2P91UXTZkyRcnJyQoICNCgQYMUHh6uDRs26NFHH9Xq1av18ccfKyQkxK0xr7nmGvXr16/CeU2bNvVE2wBgDAIgIOnf//639uzZY//+rrvucnnZH3/80f44NDTUk23VSatWrVJycrLCw8O1ceNGde/eXZKUlZWlQYMGKS0tTY8//rjD7nZX9OvXT2+++WY1dAwA5mEXMCA5nL0bGhqqwYMHu7zsmTNn7I9btmzp0b7qoqSkJEnSjBkz7OFPkqKiovTSSy9JkhYtWmTf3Q4AqHkEQEDSxo0b7Y8LCgoUEhJy2ePOSr/K7gJu3769N9qvNY4dO6bt27dLksaMGVNufr9+/dS8eXMVFhYqNTW1ptsDAPwXu4BhPMuytGnTJo+MZXoA3L17tySpUaNGat26dYU1PXr0UGZmpnbv3q1f/vKXLo998OBBzZ49W6dOnVJ4eLg6d+6s4cOHO9yWDwDgGgIgjJeZmelwHF+fPn0UERHh0rJff/21jh49KulS6DE9AB4+fFiS1KJFC6c1zZs3d6h11ebNm7V582aHafXq1dOTTz7pcEFuAMDlEQBhvP379zt8v3z5crVq1cqlZW+66SZ7ABwwYIBsNluFdfn5+Xr++ee1cuVKHTp0SNKls1pHjhypxMREl643WBfk5uZKUqXPp/Ts6pycHJfGvPrqqzVr1iwNHz5cbdq0UXBwsNLT0/Xiiy/q7bff1owZM1RcXKzHHnus0nEKCwtVWFho/97Vnw8AvogACOMdOHDA/tjPz0/NmjVzabns7Gxt27bN/n1cXFyFdZmZmbr55pvtwS8kJESWZWnPnj3as2eP3nrrLX366af2LWNwFB8fr/j4eIdpPXr00FtvvaVu3bpp2rRpmjNnjsaPH+9wUe6fmj9/vp566qnqbhcA6gROAoHxzp49a3/cqFEjBQS49n9RamqqiouLJV0KjiNGjChXU1xcrOHDh+vQoUOKjo5Wamqq8vPzVVBQoDVr1qhJkyY6dOiQhg8frpKSEs88IS+qX7++pMoviJ2XlydJLu9mr8zDDz+sqKgoFRYW6uOPP660dubMmcrOzrZ/ZWZmVvnnA0BdRQCE8c6fP29/7M6u2L/97W/2x3FxcRVuwfvLX/6iL7/8UtKlO2MkJCTYzx4eOnSoVq5cKUn68ssvHS5EXVeV7jqvLFyVznN1N3tl/P391bZtW0my74p3Jjg4WBEREQ5fAGAqAiCMV3bLm5+fa2+JzMxMh9uPObttXOmFiwcOHKj+/fuXm9+/f3/79LfeesvVlmutG264QdKlayM6O8ljx44dkuRwjcCqKL0OY+nWRwDA5REAYbyytxFz9eLEzz77rP36fx07dtQ999xTrubcuXNKS0uTJA0dOtTpWLfddpskadOmTTp37pzLfddGzZo1U8+ePSVdOpnmp9LS0pSZmang4OBKfyeu2rVrl/0knl69elV5PAAwBQEQxiu7K/Ls2bM6ceJEpfVff/21/Y4WkjRv3rwKtxzu27fPvnWxc+fOTscrnVdcXKxvv/3WndZrpdKzcRcsWKBdu3bZp585c0YPPPCAJOmhhx5SZGSkfV5KSoo6dOhQ7g4sBQUFWrx4sf3s4rI+//xzjRw5UtKlC0wTAAHAdQRAGK9fv34KDg62f//OO+84rc3OztY999xj3/o3evToCk/+kC7dFaNUZWcWl513/Phxl/uure644w797ne/U15ennr37q2EhASNGjVK1157rb766iv17dtXc+fOdVgmOztb6enp9jOlSxUVFemhhx5S48aN1adPH919990aOXKkunTpooEDB+rIkSPq0qWL3n333Zp8igBQ5xEAYbyIiAjdeuut9u+TkpJ08ODBcnXHjh1TfHy8/v3vf0uS2rRpo6VLlzodt+xWq9DQUKd1Zef5yrXpkpOTtWLFCvXp00dbtmxRamqqmjVrpgULFmjDhg0KCQlxaZzQ0FA9/vjjGjRokE6ePKm1a9fqww8/1MmTJzVkyBC98sor2rFjh2JiYqr5GQGAb+E6gICkp556SmvWrFFxcbGysrJ00003aerUqerZs6fOnTunjRs36vXXX7ffMaRVq1Zav369w25MOBo9erRGjx7tUu19992n++67r9z0oKAgzZkzx8OdAQAIgICk66+/Xn/84x81Y8YMSdLp06ed3lmid+/eWrFiRaW3O5Mcz0otKChwWld2HpcmAQDUBHYBA//16KOP6q233nJ6vN4111yjF154QZs3b75s+JMczy4uezzgT5W9fl1sbKwbHQMAcGXYAgiUMW7cOI0ZM0afffaZDh48qB9//FGxsbHq2LGj/fImrurYsaP8/PxUUlKir776SgkJCRXWlR5T6O/vrw4dOlT5OQAAcDkEQOAnAgICNGTIEA0ZMqRK44SEhKhfv376/PPPlZqaqkceeaTCutTUVEmXLgrt6skRAABUBbuAgWpUemLDxo0btXnz5nLzN2/erM8//1ySdO+999ZkawAAgxEAgWo0btw4XX/99ZKkUaNGad26dbIsS5Zlad26dRo1apSkSyehjB071oudAgBMwi5goBr5+/vrww8/1M0336xDhw4pISHBvpu39LZv11xzjT788EP5+/t7s1UAgEHYAghUs+bNm2vPnj2aM2eOunXrJn9/f/n7+6tr16566qmntGfPHjVv3tzbbQIADGKzLMvydhMAvOtMXqF+Nm+9w7Sds4foqvBgJ0vUfTk5OYqMjFR2djbXXwRgHLYAAgAAGIYACAAAYBgCIAAAgGEIgAAAAIYhAAIAABiGAAh40VdffWW/EwgAADWFAAh40T/+8Q8lJCToyJEj3m4FAGAQAiDgRQ899JAaNWqkSZMmiUtyAgBqCgEQ8KL69etr8eLFWrdunVasWOHtdgAAhiAAAl42fPhwjRw5Ug8//LB++OEHb7cDADAAARCoBV544QWdP39ejzzyiLdbAQAYgAAI1AKxsbFasGCBXnvtNc4KBgBUOwIgUEtMnDhRffr00YQJE1RYWOjtdgAAPowACNQSfn5+Wrp0qQ4dOqQFCxZ4ux0AgA8jAAK1SOfOnfXII48oKSlJ3377rbfbAQD4KAIgUMvMnj1bLVq00MSJE1VSUuLtdgAAPogACNQyISEhWrJkiT7//HO98cYb3m4HAOCDCIBALTR48GDde++9mj59uk6ePOntdgAAPoYACNRSCxculL+/v6ZOnertVgAAPoYACNRSUVFRev755/W3v/1N69at83Y7AAAfQgAEarFf/epXGjx4sCZNmqT8/HxvtwMA8BEEQKAWs9lsWrJkib7//ns9+eST3m4HAOAjCIBALXfttdfqiSee0PPPP6/du3d7ux0AgA8gAAJ1wPTp09WxY0dNmDBBxcXF3m4HAFDHEQCBOiAwMFCvvvqqdu7cqUWLFnm7HQBAHUcABOqI3r1764EHHtCsWbOUkZHh7XYAAHUYARCoQ5KSkhQZGamHHnpIlmV5ux0AQB1FAATqkIiICC1atEirV6/WBx984O12AAB1FAEQqGPuvPNO3X777Zo8ebKys7O93Q4AoA4iAAJ10KJFi5Sbm6uZM2d6uxUAQB1EAATqoGbNmikpKUkvv/yytmzZ4u12AAB1DAEQqKMeeOAB9erVSxMmTFBRUZG32wEA1CEEQKCO8vf316uvvqpvv/1Wf/rTn7zdDgCgDiEAAnVY165dNX36dM2dO1cHDhzwdjsAgDqCAAjUcU888YRiY2M1ceJErg0IAHAJARCo40JDQ7VkyRJ9+umn+stf/uLtdgAAdQABEPABt9xyi/7f//t/SkxM1OnTp73dDgCgliMAAj7iueeekyRNmzbNy50AAGo7AiDgI5o0aaKFCxfq7bff1ieffOLtdgAAtRgBEPAh9913n+Li4nT//feroKDA2+0AAGopAiDgQ2w2m1555RUdO3ZMc+fO9XY7AIBaigAI+Jh27dpp9uzZWrhwofbu3evtdgAAtRABEPBBjzzyiNq1a6cJEyaouLi4whrLsjRo0CBt27athrsDAHgbARDwQUFBQVq6dKm2bt2qJUuWVFhjs9m0bds2paWl1XB3AABvIwACPqpv376aOHGiZs6cqWPHjlVYExsbq+PHj9dwZwAAbyMAAj5swYIFCgsL0+TJkyucHxMToxMnTtRwVwAAbyMAAj6sQYMGeuGFF5SSkqJVq1aVm88WQAAwEwEQ8HGjRo3Sbbfdpoceekg5OTkO89gCCABmIgACPs5ms2nx4sX68ccfNWvWLId5BEAAMBMBEPAhx44dk2VZ5aa3bNlSc+fO1eLFi7V161b79NjYWOXk5Cg/P78m2wQAeBkBEPARJ06cULNmzfSLX/xChw4dKjd/8uTJ6t69u37729/qwoULki5tAZSkk99/X6O9AgC8iwAI+IiYmBitWrVK//73v3Xdddfpqaee0vnz5+3zAwICtHTpUn399dd67rnnJF3aAihJ35/gRBAAMAkBEPAht99+u7755hslJibqj3/8ozp37qy1a9fa53fv3l1Tp07Vk08+qUOHDv1vC+BJtgACgEkIgICPCQsLU1JSkvbu3atWrVpp6NChGjFihDIyMiRJTz31lKKjozVp0iTVr19foaGh+p4TQQDAKARAwEd16NBBn3zyid555x1t3bpVHTt21IIFCxQYGKiXXnpJn3zyiZYvX66YmBiOAQQAwxAAAR9ms9l0991369tvv9X999+v2bNnq1u3bqpXr57uvvtuTZ06VY0bN9b333v+GMD33ntPcXFxatiwocLCwtStWzc988wz9hNQ3LVz507dddddio6OVr169dS6dWtNnjxZp06d8nDnAOD7CICAAerXr69nn31Wu3fvVuPGjTV48GAVFhaqqKhI33//vce3AE6ZMkWjR4/W5s2b1atXL8XHxysjI0OPPvqoBg0apHPnzrk13sqVK9W7d2+tXLlSLVu21O233y4/Pz8tWrRIXbt21cGDBz3aPwD4OgIgYJAuXbpo48aNeuutt7RlyxYVFhbqyJEjOvxd+cvGXKlVq1YpOTlZ4eHh2rp1qz766CO9//77OnDggLp06aK0tDQ9/vjjLo93/Phx3Xvvvbp48aJeeeUVbdu2TStWrND+/fv1q1/9SidPntSYMWMqvP4hAKBiBEDAMDabTePGjVN6errGjx8vSTrhwfsBJyUlSZJmzJih7t2726dHRUXppZdekiQtWrRI2dnZLo335z//WQUFBRoyZIgmTJhgn+7v76+XX35ZkZGR2r59uz7++GOPPQcA8HUEQMBQDRo00OLFi7V27VpNmPSgR8Y8duyYtm/fLkkaM2ZMufn9+vVT8+bNVVhYqNTUVJfGTElJcTpeeHi4hg8fLkn64IMPrrRtADAOARAwXHx8vObOf8YjY+3evVuS1KhRI7Vu3brCmh49ejjUViY3N9d+fF/pclUZDwBwSYArRZZlKTc3t7p7AeAluXmFKikscJyWk6PAkmC3xvnmm28kSU2bNlVOTk6FNU2aNJEk7d+/32lNqa+//tr+uEGDBhXWX3XVVZKkQ4cOVTpeYWGhCgsL7d+XfqZdrgcAqGvq168vm81WaY3NcuHI6ZycHEVGRnqsMQAAAFSP7OxsRUREVFrjUgD0tS2AOTk5at68uTIzMy/7C4JvYh1wdDavUAP+9JnDtM9/H6dG4e5tAVy4cKHmzp2rG2+80elJGXPmzNGzzz6rQYMG2Y/vc2br1q265ZZbJElnzpxRQED5nRYbNmzQnXfeqcDAQGVlZTkd66dbAE+cOKFevXrpm2++UdOmTV15evAxfA7AV9cBV7YAurQL2Gaz+dQvplRERIRPPi+4jnXgkgt+hfILDnWYVj8iQhFuBsDGjRtLuhS2nP1eSy8E3ahRo8v+7q+++mr7Y39//wrrS/+HjYyMvKLXsn79+qwDhuNzACauA5wEAsBjWrVqJUnKzMx0WlM6r7S2Mi1btrQ/Lr2XcVXGAwBcQgAE4DE33HCDpEu7aw8fPlxhzY4dOyTJ4RqBzkREROjaa691WK4q4wEALjEyAAYHB+sPf/iDgoPd270F38E6UD2aNWumnj17SpKWL19ebn5aWpoyMzMVHBysoUOHujTmnXfe6XS8vLw8rV69WpI0YsQIt3otfe1ZB8zF5wBMXgdcOgkEgG87k1eon81b7zBt5+whusrNYwClS7eCu/POOxUeHq6NGzfat8ydOXNGN998s7766itNmzZNCxcutC+TkpKimTNnqmnTpvrnP//pMN7x48fVtm1bFRQUaOnSpfrtb38rSSouLtavf/1rvf322+rZs6e2bt162YOeyyq9uoErZ8sBgK8xcgsggOpzxx136He/+53y8vLUu3dvJSQkaNSoUbr22mv11VdfqW/fvpo7d67DMtnZ2UpPT9ehQ+XvSRwbG6s333xT/v7+mjBhgnr37q177rlH7dq109tvv63o6GgtX77crfAHAKYjAALwuOTkZK1YsUJ9+vTRli1blJqaqmbNmmnBggXasGGDQkJC3Brvrrvu0tatWzVixAh99913SklJUXFxsR588EHt2bPHfpwgAMA17AIG4NFdwHUFu4ABmMyntwCmpqbqySef1LBhwxQbGyubzSabzaajR49WadyioiI9/fTT6tatm8LCwtSwYUPFxcVp5cqVHuocnpSbm6vHHntM7du3V0hIiKKionTbbbdpw4YNVzReXFycfV2q6KvstetQc9577z3FxcWpYcOGCgsLU7du3fTMM8/Yrzvorp07d+quu+5SdHS06tWrp9atW2vy5Mk6deqUhzuHp3hqHXjzzTcrfY/bbDatW7eump4FrkR6erpefPFF3XffferSpYsCAgJks9k0b968Ko27fv16DR06VFFRUQoJCVGHDh00a9Ys5eXleahz73HpQtB11ZgxY5Sdne3RMQsKCvTzn/9cW7ZsUYMGDRQfH6+8vDxt2LBBGzduLHdwO7zr1KlT6t+/v/bv36+YmBgNGzZMJ0+e1Nq1a7V27VolJydr8uTJVzT2rbfeWmHY47aJNW/KlClKTk5WQECABg0apPDwcG3YsEGPPvqoVq9erY8//tit3c4rV67UL3/5S128eFE9e/ZU69attWPHDi1atEjvvfee0tLS2O1cy3h6HZCka665Rv369atwHnePqV1efvllJScne3TM559/XomJibLZbOrfv7+io6O1adMmJSUl6f3331daWpqioqI8+jNrlOXDfv3rX1tJSUnWunXrrFOnTlmS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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"bipolar_plot()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Schemat perceptronu\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Zasada działania perceptronu\n",
"\n",
"1. Ustal wartości początkowe $\\theta$ (wektor 0 lub liczby losowe blisko 0).\n",
"1. Dla każdego przykładu $(x^{(i)}, y^{(i)})$, dla $i=1,\\ldots,m$\n",
" * Oblicz wartość wyjścia $o^{(i)} = g(\\theta^{T}x^{(i)}) = g(\\sum_{j=0}^{n} \\theta_jx_j^{(i)})$\n",
" * Wykonaj aktualizację wag (tzw. *perceptron rule*):\n",
" $$ \\theta := \\theta + \\Delta \\theta $$\n",
" $$ \\Delta \\theta = \\alpha(y^{(i)}-o^{(i)})x^{(i)} $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"$$\\theta_j := \\theta_j + \\Delta \\theta_j $$\n",
"\n",
"Jeżeli przykład został sklasyfikowany **poprawnie**:\n",
"\n",
"* $y^{(i)}=1$ oraz $o^{(i)}=1$ : $$\\Delta\\theta_j = \\alpha(1 - 1)x_j^{(i)} = 0$$\n",
"* $y^{(i)}=-1$ oraz $o^{(i)}=-1$ : $$\\Delta\\theta_j = \\alpha(-1 - -1)x_j^{(i)} = 0$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Czyli: jeżeli trafiłeś, to nic nie zmieniaj."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"$$\\theta_j := \\theta_j + \\Delta \\theta_j $$\n",
"\n",
"Jeżeli przykład został sklasyfikowany **niepoprawnie**:\n",
"\n",
"* $y^{(i)}=1$ oraz $o^{(i)}=-1$ : $$\\Delta\\theta_j = \\alpha(1 - -1)x_j^{(i)} = 2 \\alpha x_j^{(i)}$$\n",
"* $y^{(i)}=-1$ oraz $o^{(i)}=1$ : $$\\Delta\\theta_j = \\alpha(-1 - 1)x_j^{(i)} = -2 \\alpha x_j^{(i)}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Czyli: przesuń wagi w odpowiednią stronę."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Zalety perceptronu\n",
"\n",
"* intuicyjny i prosty\n",
"* łatwy w implementacji\n",
"* jeżeli dane można liniowo oddzielić, algorytm jest zbieżny w skończonym czasie"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Wady perceptronu\n",
"\n",
"* jeżeli danych nie można oddzielić liniowo, algorytm nie jest zbieżny"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"def plot_perceptron():\n",
" plt.figure(figsize=(12,3))\n",
"\n",
" plt.subplot(131)\n",
" plt.ylim(-0.2,1.2)\n",
" plt.xlim(-0.2,1.2)\n",
"\n",
" plt.title('AND')\n",
" plt.plot([1,0,0], [0,1,0], 'ro', markersize=10)\n",
" plt.plot([1], [1], 'go', markersize=10)\n",
"\n",
" ax = plt.gca()\n",
" ax.spines['right'].set_color('none')\n",
" ax.spines['top'].set_color('none')\n",
" ax.xaxis.set_ticks_position('none')\n",
" ax.spines['bottom'].set_position(('data',0))\n",
" ax.yaxis.set_ticks_position('none')\n",
" ax.spines['left'].set_position(('data',0))\n",
"\n",
" plt.xticks(np.arange(0, 2, 1.0))\n",
" plt.yticks(np.arange(0, 2, 1.0))\n",
"\n",
"\n",
" plt.subplot(132)\n",
" plt.ylim(-0.2,1.2)\n",
" plt.xlim(-0.2,1.2)\n",
"\n",
" plt.plot([1,0,1], [0,1,1], 'go', markersize=10)\n",
" plt.plot([0], [0], 'ro', markersize=10)\n",
"\n",
" ax = plt.gca()\n",
" ax.spines['right'].set_color('none')\n",
" ax.spines['top'].set_color('none')\n",
" ax.xaxis.set_ticks_position('none')\n",
" ax.spines['bottom'].set_position(('data',0))\n",
" ax.yaxis.set_ticks_position('none')\n",
" ax.spines['left'].set_position(('data',0))\n",
"\n",
" plt.title('OR')\n",
" plt.xticks(np.arange(0, 2, 1.0))\n",
" plt.yticks(np.arange(0, 2, 1.0))\n",
"\n",
"\n",
" plt.subplot(133)\n",
" plt.ylim(-0.2,1.2)\n",
" plt.xlim(-0.2,1.2)\n",
"\n",
" plt.title('XOR')\n",
" plt.plot([1,0], [0,1], 'go', markersize=10)\n",
" plt.plot([0,1], [0,1], 'ro', markersize=10)\n",
"\n",
" ax = plt.gca()\n",
" ax.spines['right'].set_color('none')\n",
" ax.spines['top'].set_color('none')\n",
" ax.xaxis.set_ticks_position('none')\n",
" ax.spines['bottom'].set_position(('data',0))\n",
" ax.yaxis.set_ticks_position('none')\n",
" ax.spines['left'].set_position(('data',0))\n",
"\n",
" plt.xticks(np.arange(0, 2, 1.0))\n",
" plt.yticks(np.arange(0, 2, 1.0))\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAEXCAYAAACZJdj6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAm8UlEQVR4nO3deXRU9f3/8dfNnpCQEGgVDesIrVUOiyxWQEArqLS2Gpe6piqtiIDy07rUpUfleKhaPUlEVKBKFI5CAat1ibQGIa1lacBavwoYwiKiNgkhA2FJyOf3x2RuEpjsQ5LPzPNxTo5h5nPv/Qzcz9v7mnvv5zrGGCMAAAAAACwV0dEdAAAAAACgLQi2AAAAAACrEWwBAAAAAFYj2AIAAAAArEawBQAAAABYjWALAAAAALAawRYAAAAAYDWCLQAAAADAagRbAAAAAIDVCLZhaNasWXIcR47j6Mc//nGT7Xfs2OG2dxxH119/fZPL+Ns+9NBDJ7y3evXqeuvz/8TExOh73/ueBgwYoMsuu0yPPfaYNm3a1KrPCAAny5YtW/TQQw9p5MiROvXUUxUTE6NTTjlFI0aM0IMPPqgvvvii0eVfeeWVgDUwIiJCycnJGjRokKZOnaqCgoJ2+kQAcKL//e9/6tGjhxzH0bBhw1RVVdVo+08//VQxMTFyHEdXXnnlCe9XVVVp8eLFuuaaa+TxeJSYmKjExER5PB5dddVVevXVV1VZWdlkv/r27RuwhsbFxem0007TpEmT9Pzzz6uioqLVnx2WMggrlZWV5vvf/76R5P5s2bKl0WWKiorqtY+IiDD//e9/G13G3/bBBx884b28vLx662vqZ9SoUWbdunVt+twA0FZHjhwx06dPN1FRUY3WrMjISHPHHXeYI0eOBFzPyy+/3KzaFxERYR577LF2/pQAUOvVV191a9ITTzzRYLuqqiozfPhwI8mkpqaab775pt77a9asMQMHDmyy7g0cONCsWbOm0T716dOnWTV0wIABZvv27UH5e4AdOGMbZt577z1999139V7Lyclp0Tqqq6v1yCOPBKU/L7zwgrxer7xer8rLy7V7925t2LBBc+fO1bhx4yRJ69at0+jRo/Xiiy8GZZsA0FIHDx7UxRdfrOeee05VVVU666yz9OKLL+qLL75QSUmJtmzZovnz52vQoEE6duyY5s6dq4svvrjJMwbvvvuuWwP37dungoICPfroo4qLi3Nr7YoVK9rpUwJAfTfccIMuvfRSSdJjjz2mrVu3Bmz3zDPPaOPGje7vp5xyivveypUrddFFF2nr1q2KiorS7bffrtWrV+vrr7/W3r17tWbNGt1xxx2KiorS1q1bddFFF+nNN99ssm9jxoxx66fX69WuXbv07rvvauTIkZKkbdu26fLLL1d1dXUb/xZgjY5O1mhf6enpRpLp0aOHOe+884wk07t3b1NdXd3gMnXP2Ho8HiPJOI5jCgoKGlzG376pM7Yvv/xyo/3Nzc01PXr0cM+CvP/++83+rAAQLDfffLNbt2655RZz9OjRgO2OHj1qbr31VrftrbfeekKbumds8/LyAq7nz3/+s9vm3HPPDeZHAYAW2bVrl0lKSjKSzJgxY044Zty6dauJj483ksykSZPqvff555+bhIQE90zu+vXrG9zOhg0bTGpqqpFkunTpYr744ouA7fxnbMeNGxfw/aqqKjN48GC3hnLsGD44YxtGSktL9fbbb0uSrr32Wt16662SpF27dikvL69Z67jjjjvUvXt3GWP08MMPn7S++k2cOFFvvfWWoqKidOzYMd1555188wagXa1evVovv/yyJOnCCy/UggULFB0dHbBtdHS05s+frwsuuECStHDhQn300Uct3mZ6eroGDBggSdqwYYOOHj3ayt4DQNv06tVLc+bMkSTl5+fr+eefd98zxujXv/61Dh06pMTERL300kv1lp06daoqKirkOI6WL1+uESNGNLid4cOHa/ny5XIcRwcPHtTUqVNb1d/IyEjde++97p//8Y9/tGo9sA/BNoy8/vrr7sHRjTfeqKuuukrx8fGSpEWLFjVrHUlJSW6xeOedd/Svf/3r5HS2jh//+Me6+eabJfkmbfnrX/960rcJAH5PP/20+3t2drYcx2m0veM4eu655wIu3xJnnnmmJOnYsWMqLS1t1ToAIBhuv/12jR07VpL0wAMPaNeuXZJ8t5T5v7ybM2eOevfu7S6zceNG972rr75a48ePb3I748eP19VXXy3J96Xiv//971b1118/JZ1wCx5CF8E2jPjD6w9/+EONGDFCSUlJ+sUvfiFJWrFihQ4ePNis9UyfPl2nnnqqJLXLWVtJ7tllSfrggw/aZZsAcPDgQeXm5kqSxo4dW+9gqTFnnnmmxowZI0l6//33m11f66p7dUpycnKLlweAYHEcRwsWLFBcXJy8Xq9uu+027dq1S/fdd58k3/2u06ZNq7fM8uXL3d9/85vfNHtbv/71rwOuoyXq1s+UlJRWrQP2IdiGiS+++ELr16+X5Dtb63fTTTdJkg4cONDs4pGQkKAHHnhAkvS3v/1Na9asCXJvTzRs2DDFxcVJkj7++OOTvj0AkKR//etf7iMu/BPaNZe/fVVVldatW9fibfsfG+TxeNyrawCgowwcOFC///3vJfm+sDv//PPl9XoVFxenhQsXnnA1S35+viTfLRrnnXdes7czevRoRUVF1VtHS9V97NrZZ5/dqnXAPgTbMOE/W+s4jm644Qb39Ysuukg9e/as16Y5brvtNvXq1UuSAj6rNtiio6PVt29fSdLevXtP+vYAQJK2b9/u/n7WWWe1aNm67YuKilq07LJly/Tll19K8l0lAwCdwT333KOhQ4dKknbu3ClJ+v3vf6+BAwee0NZfP/v37++enGiOuLg49e/fX1LLa6fku33jySeflCSdcsopAZ+pi9BEsA0D1dXVeu211yT5ziDUvf8hMjJS119/vSQpLy/PvWeiKbGxsW6gXbt2rXup3snkv5Rk3759J31bACCp3r2t3bp1a9GydduXlJQEbHPo0CEdOHBABw4c0P79+7V582Y9/vjj7tU01157rWbMmNGKngNA8EVFRemXv/yl++dTTz1V99xzT8C2/vrZ0tpZd5mGaqfkC7D++nngwAHt3r1b77//vkaPHq3//Oc/6tq1q958880WhWrYjWAbBv7+97/rq6++klT/MmQ//wGUMUavvvpqs9d7yy23uN+oBeu5to0xxkhSkxO3AEBn0JxademllyopKUlJSUlKSUnR0KFD9cgjj+jYsWNasmSJlixZosjIyHboLQA07euvv9YTTzzh/vmbb77RW2+9FfTtNKd+5ufnu/UzKSlJvXv31iWXXKJ169ZpwoQJ2rZtm84999yg9w2dF8E2DPgvMY6Pjw94OcagQYM0ZMgQSVJOTk6z1xsVFeXea7F+/fqTUtjq2r9/vyQpNTX1pG4HAPzqnmkoKytr0bJ1ry5pad2qrKzUb3/7W23btq1FywHAyTRt2jTt379fsbGx6tevnyTf7RL+Y7S6/PWzpbVTqq2frT3my8vLa/WM9LAXwTbEeb1erVy5UpI0YsQIbd26VRs3bjzh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AMBqBFsAAAAAgNUItgAAAAAAqxFsAQAAAABWI9gCAAAAAKxGsAUAAAAAWI1gCwAAAACwGsEWAAAAAGA1gi0AAAAAwGoEWwAAAACA1Qi2AAAAAACrEWwBAAAAAFYj2AIAAAAArEawBQAAAABYjWALAAAAALAawRYAAAAAYDWCLQAAAADAagRbAAAAAIDVCLYAAAAAAKsRbAEAAAAAViPYAgAAAACsRrAFAAAAAFiNYAsAAAAAsBrBFgAAAABgNYItAAAAAMBqBFsAAAAAgNUItgAAAAAAqxFsAQAAAABWI9gCAAAAAKxGsAUAAAAAWI1gCwAAAACwGsEWAAAAAGA1gi0AAAAAwGoEWwAAAACA1Qi2AAAAAACrEWwBAAAAAFYj2AIAAAAArEawBQAAAABYjWALAAAAALAawRYAAAAAYDWCLQAAAADAagRbAAAAAIDVCLYAAAAAAKsRbAEAAAAAViPYAgAAAACsRrAFAAAAAFiNYAsAAAAAsBrBFgAAAABgNYItAAAAAMBqBFsAAAAAgNUItgAAAAAAqxFsAQAAAABWI9gCAAAAAKxGsAUAAAAAWI1gCwAAAACwGsEWAAAAAGA1gi0AAAAAwGoEWwAAAACA1Qi2AAAAAACrEWwBAAAAAFYj2AIAAAAArEawBQAAAABYjWALAAAAALAawRYAAAAAYDWCLQAAAADAagRbAAAAAIDVCLYAAAAAAKsRbAEAAAAAViPYAgAAAACsRrAFAAAAAFiNYAsAAAAAsBrBFgAAAABgNYItAAAAAMBqBFsAAAAAgNUItgAAAAAAqxFsAQAAAABWI9gCAAAAAKxGsAUAAAAAWI1gCwAAAACwGsEWAAAAAGA1gi0AAAAAwGoEWwAAAACA1Qi2AAAAAACrEWwBAAAAAFYj2AIAAAAArEawBQAAAABYjWALAAAAALAawRYAAAAAYDWCLQAAAADAagRbAAAAAIDVCLYAAAAAAKsRbAEAAAAAViPYAgAAAACsRrAFAAAAAFiNYAsAAAAAsBrBFgAAAABgNYItAAAAAMBqBFsAAAAAgNUItgAAAAAAqxFsAQAAAABWI9gCAAAAAKxGsAUAAAAAWI1gCwAAAACwGsEWAAAAAGA1gi0AAAAAwGoEWwAAAACA1Qi2AAAAAACrEWwBAAAAAFYj2AIAAAAArEawBQAAAABYjWALAAAAALAawRYA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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_perceptron()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Perceptron – funkcje aktywacji\n",
"\n",
"Zamiast funkcji bipolarnej możemy zastosować funkcję sigmoidalną jako funkcję aktywacji."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"def plot_activation_functions():\n",
" plt.figure(figsize=(16,7))\n",
" plt.subplot(121)\n",
" x = [-2,-.23,2] \n",
" y = [-1, -1, 1]\n",
" plt.ylim(-1.2,1.2)\n",
" plt.xlim(-2.2,2.2)\n",
" plt.plot([-2,2],[1,1], color='black', ls=\"dashed\")\n",
" plt.plot([-2,2],[-1,-1], color='black', ls=\"dashed\")\n",
" plt.step(x, y, lw=3)\n",
" ax = plt.gca()\n",
" ax.spines['right'].set_color('none')\n",
" ax.spines['top'].set_color('none')\n",
" ax.xaxis.set_ticks_position('bottom')\n",
" ax.spines['bottom'].set_position(('data',0))\n",
" ax.yaxis.set_ticks_position('left')\n",
" ax.spines['left'].set_position(('data',0))\n",
"\n",
" plt.annotate(r'$\\theta_0$',\n",
" xy=(-.23,0), xycoords='data',\n",
" xytext=(-50, +50), textcoords='offset points', fontsize=26,\n",
" arrowprops=dict(arrowstyle=\"->\"))\n",
"\n",
" plt.subplot(122)\n",
" x2 = np.linspace(-2,2,100)\n",
" y2 = np.tanh(x2+ 0.23)\n",
" plt.ylim(-1.2,1.2)\n",
" plt.xlim(-2.2,2.2)\n",
" plt.plot([-2,2],[1,1], color='black', ls=\"dashed\")\n",
" plt.plot([-2,2],[-1,-1], color='black', ls=\"dashed\")\n",
" plt.plot(x2, y2, lw=3)\n",
" ax = plt.gca()\n",
" ax.spines['right'].set_color('none')\n",
" ax.spines['top'].set_color('none')\n",
" ax.xaxis.set_ticks_position('bottom')\n",
" ax.spines['bottom'].set_position(('data',0))\n",
" ax.yaxis.set_ticks_position('left')\n",
" ax.spines['left'].set_position(('data',0))\n",
"\n",
" plt.annotate(r'$\\theta_0$',\n",
" xy=(-.23,0), xycoords='data',\n",
" xytext=(-50, +50), textcoords='offset points', fontsize=26,\n",
" arrowprops=dict(arrowstyle=\"->\"))\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_activation_functions()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Perceptron a regresja liniowa\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Uczenie regresji liniowej:\n",
"* Model: $$h_{\\theta}(x) = \\sum_{i=0}^n \\theta_ix_i$$\n",
"* Funkcja kosztu (błąd średniokwadratowy): $$J(\\theta) = \\frac{1}{m} \\sum_{i=1}^{m} (h_{\\theta}(x^{(i)}) - y^{(i)})^2$$\n",
"* Po obliczeniu $\\nabla J(\\theta)$ - zwykły SGD."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Perceptron a dwuklasowa regresja logistyczna\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Uczenie dwuklasowej regresji logistycznej:\n",
"* Model: $h_{\\theta}(x) = \\sigma(\\sum_{i=0}^n \\theta_ix_i) = P(1|x,\\theta)$\n",
"* Funkcja kosztu (entropia krzyżowa): $$\\begin{eqnarray} J(\\theta) &=& -\\frac{1}{m} \\sum_{i=1}^{m} \\big( y^{(i)}\\log P(1|x^{(i)},\\theta) \\\\ && + (1-y^{(i)})\\log(1-P(1|x^{(i)},\\theta)) \\big) \\end{eqnarray}$$\n",
"* Po obliczeniu $\\nabla J(\\theta)$ - zwykły SGD."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Perceptron a wieloklasowa regresja logistyczna\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Wieloklasowa regresja logistyczna\n",
"* Model (dla $c$ klasyfikatorów binarnych): \n",
"$$\\begin{eqnarray}\n",
"h_{(\\theta^{(1)},\\dots,\\theta^{(c)})}(x) &=& \\mathrm{softmax}(\\sum_{i=0}^n \\theta_{i}^{(1)}x_i, \\ldots, \\sum_{i=0}^n \\theta_i^{(c)}x_i) \\\\ \n",
"&=& \\left[ P(k|x,\\theta^{(1)},\\dots,\\theta^{(c)}) \\right]_{k=1,\\dots,c} \n",
"\\end{eqnarray}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Funkcja kosztu (**przymując model regresji binarnej**): $$\\begin{eqnarray} J(\\theta^{(k)}) &=& -\\frac{1}{m} \\sum_{i=1}^{m} \\big( y^{(i)}\\log P(k|x^{(i)},\\theta^{(k)}) \\\\ && + (1-y^{(i)})\\log P(\\neg k|x^{(i)},\\theta^{(k)}) \\big) \\end{eqnarray}$$\n",
"* Po obliczeniu $\\nabla J(\\theta)$, **c-krotne** uruchomienie SGD, zastosowanie $\\mathrm{softmax}(X)$ do niezależnie uzyskanych klasyfikatorów binarnych."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Przyjmijmy: \n",
"$$ \\Theta = (\\theta^{(1)},\\dots,\\theta^{(c)}) $$\n",
"\n",
"$$h_{\\Theta}(x) = \\left[ P(k|x,\\Theta) \\right]_{k=1,\\dots,c}$$\n",
"\n",
"$$\\delta(x,y) = \\left\\{\\begin{array}{cl} 1 & \\textrm{gdy } x=y \\\\ 0 & \\textrm{wpp.}\\end{array}\\right.$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Wieloklasowa funkcja kosztu $J(\\Theta)$ (kategorialna entropia krzyżowa):\n",
"$$ J(\\Theta) = -\\frac{1}{m}\\sum_{i=1}^{m}\\sum_{k=1}^{c} \\delta({y^{(i)},k}) \\log P(k|x^{(i)},\\Theta) $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Gradient $\\nabla J(\\Theta)$:\n",
"$$ \\dfrac{\\partial J(\\Theta)}{\\partial \\Theta_{j,k}} = -\\frac{1}{m}\\sum_{i = 1}^{m} (\\delta({y^{(i)},k}) - P(k|x^{(i)}, \\Theta)) x^{(i)}_j \n",
"$$\n",
"\n",
"* Liczymy wszystkie wagi jednym uruchomieniem SGD"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Perceptron – podsumowanie\n",
"\n",
"* W przypadku jednowarstowej sieci neuronowej wystarczy znać gradient funkcji kosztu.\n",
"* Wtedy liczymy tak samo jak w przypadku regresji liniowej, logistycznej, wieloklasowej logistycznej itp. (wymienione modele to szczególne przypadki jednowarstwowych sieci neuronowych).\n",
"* Regresja liniowa i binarna regresja logistyczna to jeden neuron.\n",
"* Wieloklasowa regresja logistyczna to tyle neuronów, ile klas."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Funkcja aktywacji i funkcja kosztu są **dobierane do problemu**."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## 10.2. Funkcje aktywacji"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Operacje, które każdy neuron wykonuje, to dodawanie i mnożenie. Są to **funkcje liniowe**."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Złożenie funkcji liniowych jest funkcją liniową."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Gdyby nie było funkcji aktywacji, cała sieć neuronowa działałaby jak regresja liniowa."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* **Najważniejszym celem** stosowania funkcji aktywacji jest **wprowadzenie nieliniowości**, dzięki której sieć może uczyć się zależności bardziej skomplikowanych niż tylko liniowe."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Jakie cechy powinna mieć dobra funkcja aktywacji?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* **różniczkowalna** (co najmniej **przedziałami różniczkowalna**), aby można było obliczyć jej gradient"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* **prosta obliczeniowo**, ponieważ podczas uczenia sieci jej wartość obliczana jest wiele razy"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* odporna na **problem zanikającego gradientu** (wyjaśnienie kilka slajdów dalej)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2023-05-04 10:23:21.183242: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n",
"To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
"2023-05-04 10:23:22.176521: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n",
"2023-05-04 10:23:22.176596: I tensorflow/compiler/xla/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n",
"2023-05-04 10:23:24.881062: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory\n",
"2023-05-04 10:23:24.881370: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory\n",
"2023-05-04 10:23:24.881390: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.\n"
]
}
],
"source": [
"%matplotlib inline\n",
"\n",
"import math\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import random\n",
"\n",
"import keras\n",
"from keras.datasets import mnist\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense, Dropout, SimpleRNN, LSTM\n",
"from keras.optimizers import Adagrad, Adam, RMSprop, SGD\n",
"\n",
"from IPython.display import YouTubeVideo"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"def plot(fun):\n",
" x = np.arange(-3.0, 3.0, 0.01)\n",
" y = [fun(x_i) for x_i in x]\n",
" fig = plt.figure(figsize=(14, 7))\n",
" ax = fig.add_subplot(111)\n",
" fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n",
" ax.set_xlim(-3.0, 3.0)\n",
" ax.set_ylim(-1.5, 1.5)\n",
" ax.grid()\n",
" ax.plot(x, y)\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Funkcja logistyczna"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"$$ g(x) = \\frac{1}{1 + e^{-x}} $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Funkcja logistyczna – wykres"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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ryuHG264Idddd93E4+7u7ixatCgXX3xxZs6cWcaRweE1PDycO++8M694xStSXV1d7uHAYWGeM12Y60wX5jrTgXnOdLF9+/ZDPsZBh65NmzZlzZo1B/1Gvb29B/2ag9Hc3Jwk6evre94xtLS0POexamtrU1tbu9f26upqv1SYFsx1pgPznOnCXGe6MNeZDsxzim4q5vdBX4z+S1/6Ukql0kHfLrvsskMe7HNZunRpkmT9+vX73Wfjxo2T9gUAAACgOArzrYsrVqxIktx77737fP7xxx9PZ2dnkmT58uVHbFwAAAAAHBmFCV2vfvWrU1NTk/Xr1+cHP/jBXs/feuutSZLzzjsv8+fPP9LDAwAAAOAwO+ZC16WXXppTTz01t91226Tt7e3t+b3f+70kyTXXXDPpAmarV6/OH//xHydJPvCBDxy5wQIAAABwxBz0xeinykc+8pF84xvf2Gv7FVdckZqamiRjpyPecsstk55/7LHH8sQTT6Srq2uv137sYx/Lj370o/zLv/xLTjrppFxyySXp6+vLd77znQwPD+e6667La1/72sPzgQAAAAAoq7KFrsceeywrV67ca/v9998/8XNdXd1BHbOhoSH//M//nD/90z/Nl7/85dxxxx2pqanJr/zKr+Qd73hH3vCGNxzyuAEAAAA4OpUtdH3+85/P5z//+YN+3bp1657z+Zqamlx//fW5/vrrX9jAAAAAADgmHXPX6AIAAACAfRG6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACiEsoWuO+64IzfeeGMuv/zyzJ8/PxUVFamoqMjGjRtf8DGXLl06cZx93c4777wp/AQAAAAAHE2qyvXGV111Vbq6ug7LsX/zN38zTU1Ne20/4YQTDsv7AQAAAFB+ZQtdr3/963PSSSdlxYoVWbFiRWbPnj1lx/7EJz6RpUuXTtnxAAAAADj6lS10/eVf/mW53hoAAACAAnIxegAAAAAKoWwrug6nv/qrv0pnZ2dGRkYyf/78/Nqv/Vp+9Vd/tdzDAgAAAOAwKmTo+sM//MO9tp1zzjm59dZbc+KJJz7v64eGhjI0NDTxeM9F8zs7O6dukHAUGh4eTn9/f7Zv357q6upyDwcOC/Oc6cJcZ7ow15kOzHOmiz3dpVQqveBjFCp0veY1r8kFF1yQc889NwsWLMjTTz+d73//+/ngBz+YVatW5aKLLsrq1auf98L3N910Uz784Q/vtf3kk08+XEMHAAAAIMn27dvT2tr6gl5bUTrITPbe9743t99++0G/0Wc/+9lccMEF+x9IRUWSZMOGDVm4cOFBH/+5dHZ25qyzzsq6devyrne9K3/2Z3/2nPv/8oqunTt3ZsmSJVm/fv0L/g8ajgXd3d1ZtGhRNmzYkJaWlnIPBw4L85zpwlxnujDXmQ7Mc6aLrq6uLF68ODt27EhbW9sLOsZBr+jatGlT1qxZc9Bv1Nvbe9CvmSodHR259tprc+211+brX//684au2tra1NbW7rW9tbXVLxWmhZaWFnOdwjPPmS7MdaYLc53pwDxnuqisfOHfnXjQr/zSl76UUql00LfLLrvsBQ9yKrzoRS9KkmzcuLGs4wAAAADg8HjhiewYs3379iRJc3NzmUcCAAAAwOEwbULXV77ylSTJueeee9Cvra2tzX/9r/91n6czQpGY60wH5jnThbnOdGGuMx2Y50wXUzHXD/pi9IfLgV6M/tJLL82TTz6Zm266Ka973esmtv/DP/xDFi5cmLPOOmvS/j09PfnQhz6Um2++OUly55135uUvf/lh+AQAAAAAlNNBX4x+qnzkIx/JN77xjb22X3HFFampqUmSrFixIrfccsuk5x977LE88cQT6erqmrT9rrvuys0335zFixfn9NNPT1tbWzZt2pQf//jH2bFjR6qqqvKJT3xC5AIAAAAoqLKFrsceeywrV67ca/v9998/8XNdXd0BH+/KK69Mb29vVq9enXvvvTednZ2pqanJ4sWL81u/9Vu55pprcvrpp0/J2AEAAAA4+hw1py4CAAAAwKGYNhejBwAAAKDYhK4XoLu7Ox/60Ifymte8JieccEJaW1tTU1OT+fPn5zd+4zf2ee0xONZs2bIl/+f//J9cddVVOemkk1JXV5eGhoaceuqpeec735l169aVe4gwZe64447ceOONufzyyzN//vxUVFSkoqIiGzduLPfQ4KD97d/+bS666KK0t7ensbExZ555Zv7bf/tvGR4eLvfQYEqsWbMmn/rUp3L11Vfn9NNPT1VVVSoqKvLRj3603EODKTM8PJzvfOc7+c//+T/nnHPOSVtbW6qrqzN37txcccUV/s1JoXz5y1/OW97ylpx55pmZPXt2qqur09ramnPPPTc33XRTent7D+p4Tl18AR599NGcdNJJaWpqymmnnZZ58+alsrIyjz76aB544IEkyTXXXJM///M/L/NI4YV785vfnC9/+cuprKzMaaedllNOOSV9fX1ZtWpVtm7dmsbGxtx22215xSteUe6hwiFra2vb60tOkuf/JmA42lx77bW5+eabU1VVlUsuuSRNTU357ne/m507d+aCCy7It771rdTX15d7mHBI9szzX/aRj3wkH/zgB8swIph63/72tyf+zp47d27OOuusNDY25qGHHspPf/rTJMnb3/72/M//+T9TUVFRzqHCIbvgggtyzz335EUvelEWLVqUjo6ObN68Of/yL/+SgYGBnHjiifne976X+fPnH9DxhK4XoLe3Nz/96U9z9tlnp6pq8vX877rrrrz2ta9Nf39/vvnNb+aVr3xlmUYJh+ad73xnZs2albe+9a1ZsGDBxPbe3t78+3//7/OVr3wlHR0defTRR9Pe3l7GkcKh+3f/7t/lpJNOyooVK7JixYrMnj07idDFseVrX/taXve616WpqSnf+973smLFiiTJtm3bcskll+TBBx/Me97znnziE58o80jh0Hz2s5/NmjVrsnz58qxYsSIf+9jH8sUvflHoolC++93v5pZbbsm73vWuXHjhhZOe++u//uu86U1vyujoaL7whS/kLW95S5lGCVNj5cqVOemkk9LR0TFp+/bt23PllVfm7rvvzr/5N/8m//f//t8DOp7QdRi89a1vzV/+5V/muuuuy5/8yZ+Uezgw5fr7+zN37tz09PTki1/8Yt785jeXe0gwpfb8P6NCF8eSc889N6tWrcpHP/rRfOADH5j03N13350LL7wwtbW12bx5c1pbW8s0Sph6V199db7whS8IXUwrb3vb2/K5z30ul156ab797W+Xezhw2Hz/+9/Pr/7qr6ajoyPbt28/oNe4RtdhsGeVV21tbZlHAodHQ0NDTjnllCRjIQCA8nryySezatWqJMlVV1211/MXXHBBFi1alKGhodxxxx1HengATLHly5cn8bc4xfdC+orQNcVWrVqVv/7rv05FRUUuv/zycg8HDovh4eGJi9HPmzevvIMBIPfff3+SpKOjI8uWLdvnPmefffakfQE4dv3iF79I4m9xiq2npyc33nhjkuSKK6444NdVPf8uPJf/8l/+S9avX5+BgYGsXbs2q1atSk1NTT75yU/mV37lV8o9PDgsPve5z2Xbtm2pr6/Pq171qnIPB2DaW7t2bZJk8eLF+91n0aJFk/YF4Nj09NNP5/Of/3yS5Dd/8zfLOxiYQt/61rdy6623Zvfu3RMXo+/p6clll12WP/7jPz7g4whdh+j222+f+KbFJGlqasqf/umf5t/9u39XxlHB4fPggw/mP//n/5wk+dCHPpQ5c+aUeUQA9PT0JEkaGxv3u09TU1OSpLu7+4iMCYCpNzIykje/+c3p6urK6aefnv/wH/5DuYcEU+ahhx7KF77whUnbrrrqqvzpn/7pQV1fdNqFrve+9725/fbbD/p1n/3sZ3PBBRfstf3HP/5xkrE/GtesWZM/+7M/y9vf/vZ85Stfyde+9rU0Nzcf6pDhoE31PN9j48aNufzyy9Pb25srrrgi119//aEMEw7Z4ZrrAABHo//4H/9jvvOd72TmzJn5u7/7u9TU1JR7SDBlrr322lx77bUZHh7O+vXr8w//8A/56Ec/mm9+85u57bbb8qu/+qsHdJxpF7o2bdqUNWvWHPTrent7n/P5lpaWnHPOOfnyl7+ctra23HLLLfnwhz/sK7wpi8Mxz59++ulceumleeKJJ/LKV74yf/M3fzPxzXRQLofrdzoca/b8H2t9fX373WfPvG9paTkiYwJgar3rXe/K5z73ubS3t+fOO+/MySefXO4hwWFRXV2dE044Idddd13OP//8/Mqv/Ere/OY3Z82aNamvr3/e10+7i9F/6UtfSqlUOujbZZdddsDv8bu/+7tJkttuu+1wfQx4TlM9z7ds2ZJLLrkkjzzySF7+8pfna1/7mm8V5ahwJH6nw7Fg6dKlSZ7727f2PLdnXwCOHe95z3vyyU9+Mm1tbfnWt7418a2LUHQve9nL8uIXvzgbNmzIvffee0CvmXah60jYc32MLVu2lHkkcOi2bt2aSy65JD//+c9z6aWX5vbbb09dXV25hwXAs+z5B8/27dv3e7H5PX8crlix4oiNC4BD9973vnfiGkXf+ta3Jr5FF6aLg20sQtdh8J3vfCdJLCXlmLdt27Zccskl+dnPfpZLL700X//61w9oqSgAR9bChQtzzjnnJEluvfXWvZ6/++67s2HDhtTW1ubVr371kR4eAC/Q9ddfn//+3/97Wltbc+edd078rofpYtu2bRNfAHigjUXoegFuvfXW3HfffXttL5VK+fu///t88IMfTJK8/e1vP9JDgynT2dmZSy+9ND/96U/z8pe/XOQCOMq9//3vT5J8/OMfz+rVqye2b9++Pddcc02S5B3veMdBfWsRAOXzwQ9+MH/8x3+ctrY2kYvCeuihh/LlL385g4ODez33yCOP5A1veEOGhoZy3nnn5fTTTz+gY1aUSqXSVA+06K6++up84QtfyMKFC3PGGWekra0t27dvz8MPP5wnnngiSfKf/tN/yqc+9SkX6+aY9frXvz633XZbKioq8oY3vGG/kevKK6/MlVdeeWQHB1PsIx/5SL7xjW9MPF65cmWSsdPB9nyb0YoVK3LLLbeUZXxwoN71rnflk5/8ZKqrq3PppZemsbEx3/nOd7Jz586cf/75ufPOO/2fFhzzVq9ePRFvk+Sxxx7Ltm3bsnDhwixYsGBi+2233ZZ58+aVY4hwyG6//fb8xm/8RpLk7LPPzkte8pJ97jdr1ixfgMYx7Z//+Z9z8cUXp7GxMcuXL8/ChQuza9eurF+/PqtXr87u3bvzohe9KN/85jezePHiAzrmtPvWxanw7//9v09ra2vuueeerF69Otu3b091dXUWLlyY3/md38nb3vY2X1vPMa+zszPJ2ErFv/mbv9nvfkuXLhW6OOY99thjE3Hr2e6///6Jn12bjmPBzTffnPPPPz9//ud/nnvuuSfDw8M54YQTcv311+fd7363r6GnELq7u/f5O3vjxo3ZuHHjxOOhoaEjOSyYUnv+Fk/GrrG4v4twL1myROjimPaSl7wkf/RHf5Tvf//7efjhh3P//fdneHg4HR0dufTSS/P6178+v/u7v3tQX4ZmRRcAAAAAheAaXQAAAAAUgtAFAAAAQCEIXQAAAAAUgtAFAAAAQCEIXQAAAAAUgtAFAAAAQCEIXQAAAAAUgtAFAAAAQCEIXQAAAAAUgtAFAAAAQCEIXQAAAAAUgtAFAAAAQCH8/3SbPpCh6Z22AAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(lambda x: 1 / (1 + math.exp(-x)))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Funkcja logistyczna przyjmuje wartości z przedziału $(0, 1)$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Tangens hiperboliczny"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"$$ g(x) = \\tanh x = \\frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Tangens hiperboliczny – wykres"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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MdfhN5jr8AfMc5hdY8xvwxajT05OliRlZmYet0/1seq+J9KxY8ea7YyMjAaPBwAA0FrklZTr6tkrtGFvgWJCHPrvzcPUPT7s108EAAAwGcOCrgEDBkiqvCzteIvDr1q1SpKUkpLyq+OFh4era9eutc5ryHgAAACtweHick14qTLkig0l5AIAAP7NsKArISFBgwcPliTNnz//qONLly5VZmamnE6nzj///DqNeemllx53vKKiIi1atEiSdNlll51s2QAAAC3G4eLKK7k27qsMuebfRMgFAAD8m2FBlyTdf//9kqTHH39caWlpNe05OTm69dZbJUm33XZbrfW2FixYoJ49e2rMmDFHjTdlyhQFBwfriy++0EsvvVTT7vF4dOuttyovL0+DBw/WOeec01RvCQAAoFn8MuT6LyEXAACAsUHXJZdcottvv11FRUUaNmyYzjvvPP3mN79R165d9dNPP2n48OF65JFHap2Tn5+v9PR0bd9+9E2y27dvrzlz5shms+nmm2/WsGHD9Nvf/lbdu3fXG2+8ofj4eM2fP18Wi6W53iIAAECjyy0u14SakMup/940TN0IuQAAAIwNuiRp5syZeuutt3Taaadp+fLlWrx4sRISEvT444/rq6++UlBQUL3Gu+KKK7RixQpddtll2rFjhxYsWCCPx6M//vGPWrt2bc06XgAAAK1RbtWVXJtqQq6hhFwAAABVAowuQJKuvPJKXXnllXXqO3HiRE2cOPGEfQYOHKj33nuvESoDAABoOXKLyzXhpR+0eX+hYkOdevPmoeoaR8gFAABQzfArugAAAPDrCLkAAAB+XYu4ogsAAADHd3TINUxd40KNLgsAAKDFIegCAABowXKKXLp69gpt3l+oNmGVC88TcgEAABwbP10EAABooQi5AAAA6ocrugAAAFqgnCKXJry0QukHKkOuN28epi5tCLkAAABOhCu6AAAAWpjsI0KuOEIuAACAOuOKLgAAgBakMuT6QVsOFCkuzKn/EnIBAADUGUEXAABAC/HLkOvNm4epMyEXAABAnRF0AQAAtAAHC8t09UsrtPVgkeLDKxeeJ+QCAACoH4IuAAAAgx0oKNPvXvpBOw4VE3IBAAA0AEEXAACAgfbll2rCSyu0M7tY7SMCNf+mYUqODTG6LAAAgFaJoAsAAMAgWYdLNOGlFcrILVFCVJD+e9MwJUYH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0ksvrWn/8MMPlZCQoIEDB9bqX1hYqIceekgzZ86UJC1ZskRjx45tgncAAAAAAAAAI9V7MfrG8sgjj+jjjz8+qn38+PFyOBySpJSUFM2aNavW8e3bt2v37t3Kz8+v1f71119r5syZSkpKUp8+fRQZGam9e/fqxx9/1OHDhxUQEKAnn3ySkAsAAAAAAMCkDAu6tm/frhUrVhzVvmbNmprtwMDAOo93ySWXqKioSGlpaVq1apVyc3PlcDiUlJSkq666Srfeeqv69OnTKLUDAAAAAACg5WkxP10EAAAAAAAAGsJvFqMHAAAAAACAuRF0nYSCggI99NBDuuCCC9SlSxdFRETI4XCoffv2uvjii4+59hjQ2hw8eFCvv/66JkyYoG7duikwMFDBwcHq2bOnbr/9du3atcvoEoFGs3jxYk2fPl0XXXSR2rdvL4vFIovFoqysLKNLA+rtnXfe0ahRoxQVFaWQkBD169dPf//73+V2u40uDWgU6enpevbZZzVx4kT16dNHAQEBslgsevTRR40uDWg0brdbX375pf70pz9p8ODBioyMlN1uV9u2bTV+/Hj+zglTmTdvnq677jr169dPcXFxstvtioiI0JAhQzRjxgwVFRXVazx+ungStm3bpm7duik0NFS9e/dWu3btZLVatW3bNq1du1aSdOutt+r55583uFLg5F1zzTWaN2+erFarevfurR49eqi4uFipqak6dOiQQkJCtGDBAp199tlGlwo0WGRk5FE3OZF+/U7AQEszZcoUzZw5UwEBARo9erRCQ0P11VdfKS8vTyNGjNDnn3+uoKAgo8sEGqR6nv/SI488ogcffNCAioDG98UXX9R8z27btq0GDhyokJAQbdy4UevXr5ck3Xzzzfr3v/8ti8ViZKlAg40YMULLly9Xr169lJiYqOjoaB04cEDff/+9SktL1bVrV3377bdq3759ncYj6DoJRUVFWr9+vQYNGqSAgNrr+X/99de68MILVVJSok8//VTnnnuuQVUCDXP77bcrNjZWkyZNUocOHWrai4qKdNNNN+nNN99UdHS0tm3bpqioKAMrBRruxhtvVLdu3ZSSkqKUlBTFxcVJIuhC6/LBBx/o0ksvVWhoqL799lulpKRIkrKzszV69Gj99NNPuuuuu/Tkk08aXCnQMLNnz1Z6eroGDBiglJQUPfbYY3rjjTcIumAqX331lWbNmqU77rhDI0eOrHXsrbfe0tVXXy2Px6PXXntN1113nUFVAo1jxYoV6tatm6Kjo2u15+Tk6JJLLtHSpUv129/+Vv/973/rNB5BVxOYNGmSXnnlFU2dOlVPPfWU0eUAja6kpERt27ZVYWGh3njjDV1zzTVGlwQ0qup/GSXoQmsyZMgQpaam6tFHH9UDDzxQ69jSpUs1cuRIOZ1OHThwQBEREQZVCTS+iRMn6rXXXiPogl+ZPHmyXn75ZY0ZM0ZffPGF0eUATea7777TGWecoejoaOXk5NTpHNboagLVV3k5nU6DKwGaRnBwsHr06CGpMggAABhrz549Sk1NlSRNmDDhqOMjRoxQYmKiXC6XFi9e3NzlAQAa2YABAyTxXRzmdzL5CkFXI0tNTdVbb70li8Wiiy66yOhygCbhdrtrFqNv166dscUAALRmzRpJUnR0tDp16nTMPoMGDarVFwDQem3dulUS38VhboWFhZo+fbokafz48XU+L+DXu+BE/vznPysjI0OlpaXauXOnUlNT5XA49Mwzz+i0004zujygSbz88svKzs5WUFCQzjvvPKPLAQC/t3PnTklSUlLScfskJibW6gsAaJ3279+vOXPmSJIuv/xyY4sBGtHnn3+u+fPny+v11ixGX1hYqHHjxumJJ56o8zgEXQ20cOHCmjstSlJoaKiefvpp3XjjjQZWBTSdn376SX/6058kSQ899JDi4+MNrggAUFhYKEkKCQk5bp/Q0FBJUkFBQbPUBABofBUVFbrmmmuUn5+vPn366Pe//73RJQGNZuPGjXrttddqtU2YMEFPP/10vdYX9bug65577tHChQvrfd7s2bM1YsSIo9p//PFHSZVfGtPT0/Wvf/1LN998s95880198MEHCgsLa2jJQL019jyvlpWVpYsuukhFRUUaP368pk2b1pAygQZrqrkOAADQEv3hD3/Ql19+qZiYGL377rtyOBxGlwQ0milTpmjKlClyu93KyMjQhx9+qEcffVSffvqpFixYoDPOOKNO4/hd0LV3716lp6fX+7yioqITHg8PD9fgwYM1b948RUZGatasWXr44Ye5hTcM0RTzfP/+/RozZox2796tc889V2+//XbNnekAozTVZzrQ2lT/w1pxcfFx+1TP+/Dw8GapCQDQuO644w69/PLLioqK0pIlS9S9e3ejSwKahN1uV5cuXTR16lQNHz5cp512mq655hqlp6crKCjoV8/3u8Xo586dK5/PV+/HuHHj6vwaN9xwgyRpwYIFTfU2gBNq7Hl+8OBBjR49Wlu2bNHYsWP1wQcfcFdRtAjN8ZkOtAbJycmSTnz3repj1X0BAK3HXXfdpWeeeUaRkZH6/PPPa+66CJjd0KFDdcoppygzM1OrVq2q0zl+F3Q1h+r1MQ4ePGhwJUDDHTp0SKNHj9amTZs0ZswYLVy4UIGBgUaXBQA4QvVfeHJyco672Hz1l8OUlJRmqwsA0HD33HNPzRpFn3/+ec1ddAF/Ud+MhaCrCXz55ZeSxKWkaPWys7M1evRobdiwQWPGjNGiRYvqdKkoAKB5JSQkaPDgwZKk+fPnH3V86dKlyszMlNPp1Pnnn9/c5QEATtK0adP0j3/8QxEREVqyZEnNZz3gL7Kzs2tuAFjXjIWg6yTMnz9fq1evPqrd5/Pp/fff14MPPihJuvnmm5u7NKDR5ObmasyYMVq/fr3Gjh1LyAUALdz9998vSXr88ceVlpZW056Tk6Nbb71VknTbbbfV665FAADjPPjgg3riiScUGRlJyAXT2rhxo+bNm6eysrKjjm3ZskVXXHGFXC6Xhg0bpj59+tRpTIvP5/M1dqFmN3HiRL322mtKSEhQ3759FRkZqZycHG3evFm7d++WJP3xj3/Us88+y2LdaLUuu+wyLViwQBaLRVdcccVxQ65LLrlEl1xySfMWBzSyRx55RB9//HHN/ooVKyRV/hys+m5GKSkpmjVrliH1AXV1xx136JlnnpHdbteYMWMUEhKiL7/8Unl5eRo+fLiWLFnCP1qg1UtLS6sJbyVp+/btys7OVkJCgjp06FDTvmDBArVr186IEoEGW7hwoS6++GJJ0qBBg3Tqqaces19sbCw3QEOr9s033+iss85SSEiIBgwYoISEBJWXlysjI0NpaWnyer3q1auXPv30UyUlJdVpTL+762JjuOmmmxQREaHly5crLS1NOTk5stvtSkhI0PXXX6/Jkydz23q0erm5uZIqr1R8++23j9svOTmZoAut3vbt22vCrSOtWbOmZpu16dAazJw5U8OHD9fzzz+v5cuXy+12q0uXLpo2bZruvPNObkMPUygoKDjmZ3ZWVpaysrJq9l0uV3OWBTSq6u/iUuUai8dbhLtjx44EXWjVTj31VP3tb3/Td999p82bN2vNmjVyu92Kjo7WmDFjdNlll+mGG26o183QuKILAAAAAAAApsAaXQAAAAAAADAFgi4AAAAAAACYAkEXAAAAAAAATIGgCwAAAAAAAKZA0AUAAAAAAABTIOgCAAAAAACAKRB0AQAAAAAAwBQIugAAAAAAAGAKBF0AAAAAAAAwBYIuAAAAAAAAmAJBFwAAAAAAAEyBoAsAAAAAAACm8P9OdbbsnpENygAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(lambda x: math.tanh(x))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Tangens hiperboliczny przyjmuje wartości z przedziału $(-1, 1)$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Powstaje z funkcji logistytcznej przez przeskalowanie i przesunięcie."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Daje szybszą zbieżność niż funkcja logistyczna dzięki temu, że przedział wartości jest symetryczny względem zera."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Ze względu na ograniczony przedział wartości, obie funkcje (logistyczna i $\\tanh$) są podatne na problem zanikającego gradientu."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Problem zanikającego gradientu (*vanishing gradient problem*)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Sigmoidalne funkcje aktywacji ograniczają wartości na wyjściach neuronów do niewielkich przedziałów ($(-1, 1)$, $(0, 1)$ itp.).\n",
"* Jeżeli sieć ma wiele warstw, to podczas propagacji wstecznej mnożymy przez siebie wiele małych wartości → obliczony gradient jest mały.\n",
"* Im więcej warstw, tym silniejszy efekt zanikania."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Sposoby na zanikający gradient\n",
"\n",
"* Modyfikacja algorytmu optymalizacji (*RProp*, *RMSProp*)\n",
"* Użycie innej funckji aktywacji (ReLU, softplus)\n",
"* Dodanie warstw *dropout*\n",
"* Nowe architektury (LSTM itp.)\n",
"* Więcej danych, zwiększenie mocy obliczeniowej"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### ReLU (*Rectifier Linear Unit*)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"$$ g(x) = \\max(0, x) $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### ReLU – wykres"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABLoAAAJpCAYAAACq4lvbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7iklEQVR4nO3de5zVdb3v8fcgwwiD3I8XBKS8YUnGiB7bYCFoXkoiO7r3ITPcmrvIrYRtBS/nYLrFOtYJNdydo6Wp7G5uDJM84iWPlzaB0NUtJJmA7jQgGW6No875w8PsiIsMs2bWzG89n4/HPB6s3/qt7/qsHt9GfLnWb1U1NTU1BQAAAAA6uS7lHgAAAAAASkHoAgAAAKAQhC4AAAAACkHoAgAAAKAQhC4AAAAACkHoAgAAAKAQhC4AAAAACkHoAgAAAKAQhC4AAAAACqGsoWvZsmW56aabMmnSpAwfPjxdu3ZNVVVVrr322j1ab8aMGamqqtrlz7PPPlviVwEAAABAR9C1nE9+yy23ZNasWSVf96ijjsp73/veHd7Xu3fvkj8fAAAAAOVX1tB15JFH5vOf/3xGjBiRurq6XHfddbnzzjtbve6ECRMyY8aM1g8IAAAAQKdR1tB1/vnnb3O7SxeXDAMAAABgzyhLAAAAABRCWd/R1VaWLFmSadOmZd26dendu3dGjBiR008/Pfvss0+5RwMAAACgjRQydN1333257777tjnWu3fv3HjjjTnnnHPe9vENDQ1paGhovv3mm29m3bp16d+/f6qqqko+LwAAAECla2pqyoYNGzJw4MA9vrxVoULXwQcfnOuuuy6nnnpqDjrooCTJM888k+uvvz4//OEP88lPfjJ77bVXPv7xj+9ynZkzZ+bqq69uj5EBAAAA+DOrVq3KoEGD9uixVU1NTU0lnmePTZo0KXfccUeuueaaXHnllSVd+6KLLspNN92U//Sf/lNWr16dbt267fTcv3xH1/r16zNkyJAsX748/fr1K+lc0JE0Njbm0UcfzQknnJDq6upyjwNtwj6nUtjrVAp7vX1s2NKYT8/5WZ759w3p071rvn72iBy2n0vDtBf7nEqxbt26HHbYYXn11VfTu3fvPVqjUO/o2pUZM2Zk9uzZ+cMf/pCFCxfm+OOP3+m5NTU1qamp2e54v3790r9//7YcE8qqsbExPXr0SP/+/f0DlMKyz6kU9jqVwl5ve+u3NOaif16YZ9e9kf59e2fOp47LEQf0KvdYFcU+p9K05rJRFfOti/369cu+++6bJFm9enWZpwEAAOj41m9pzCduW5hfrF6fvj2qRS6gw6uY0PXGG29k/fr1SeLbFwEAAN6GyAV0RhUTuubNm5fNmzenqqoqI0eOLPc4AAAAHZbIBXRWnS503XzzzRk2bFjOOeecbY6vXLkyd911V/70pz9t95h77703559/fpLk4x//ePbff/92mRUAAKCzEbmAzqysF6NfsmRJJk+e3Hx7xYoVSZKvf/3r+eEPf9h8fO7cuTnggAOSJGvWrMmyZcu2i1Xr1q3LJz7xiXzmM5/JiBEjcuCBB2bLli155pln8pvf/CZJcsIJJ+SWW25p65cFAADQKYlcQGdX1tBVX1+fhQsXbnd89erV21wwvqGh4W3XGjx4cC677LIsWrQozz33XJYsWZLXXnstAwYMyIc//OFMnDgxf/3Xf50uXTrdm9gAAADanMgFFEFZQ9eYMWPS1NTUosfMmDEjM2bM2O54//79c/3115doMgAAgMohcgFF4e1NAAAAFUzkAopE6AIAAKhQIhdQNEIXAABABRK5gCISugAAACqMyAUUldAFAABQQUQuoMiELgAAgAohcgFFJ3QBAABUAJELqARCFwAAQMGJXEClELoAAAAKTOQCKonQBQAAUFAiF1BphC4AAIACErmASiR0AQAAFIzIBVQqoQsAAKBARC6gkgldAAAABSFyAZVO6AIAACgAkQtA6AIAAOj0RC6AtwhdAAAAnZjIBfAfhC4AAIBOSuQC2JbQBQAA0AmJXADbE7oAAAA6GZELYMeELgAAgE5E5ALYOaELAACgkxC5AHZN6AIAAOgERC6Atyd0AQAAdHAiF8DuEboAAAA6MJELYPcJXQAAAB2UyAXQMkIXAABAByRyAbSc0AUAANDBiFwAe0boAgAA6EBELoA9J3QBAAB0ECIXQOsIXQAAAB2AyAXQekIXAABAmYlcAKUhdAEAAJSRyAVQOkIXAABAmYhcAKUldAEAAJSByAVQekIXAABAOxO5ANqG0AUAANCORC6AtiN0AQAAtBORC6BtCV0AAADtQOQCaHtCFwAAQBsTuQDah9AFAADQhkQugPYjdAEAALQRkQugfQldAAAAbUDkAmh/QhcAAECJiVwA5SF0AQAAlJDIBVA+QhcAAECJiFwA5SV0AQAAlIDIBVB+QhcAAEAriVwAHYPQBQAA0AoiF0DHIXQBAADsIZELoGMRugAAAPaAyAXQ8QhdAAAALSRyAXRMQhcAAEALiFwAHZfQBQAAsJtELoCOTegCAADYDSIXQMcndAEAALwNkQugcxC6AAAAdkHkAug8hC4AAICdELkAOhehCwAAYAdELoDOR+gCAAD4CyIXQOckdAEAAPwZkQug8xK6AAAA/j+RC6BzE7oAAAAicgEUgdAFAABUPJELoBiELgAAoKKJXADFIXQBAAAVS+QCKBahCwAAqEgiF0DxCF0AAEDFEbkAiknoAgAAKorIBVBcQhcAAFAxRC6AYhO6AACAiiByARSf0AUAABSeyAVQGYQuAACg0EQugMohdAEAAIUlcgFUFqELAAAoJJELoPIIXQAAQOGIXACVqayha9myZbnpppsyadKkDB8+PF27dk1VVVWuvfbaVq370EMP5bTTTsuAAQPSvXv3DBs2LFdccUU2btxYoskBAICOSuQCqFxdy/nkt9xyS2bNmlXSNf/n//yfmTp1aqqqqnL88cdnv/32y+OPP57rrrsu99xzT5544okMGDCgpM8JAAB0DCIXQGUr6zu6jjzyyHz+85/P3XffnX/7t3/LJz7xiVatt3Tp0lxyySXZa6+9cv/99+exxx7Ld7/73axYsSLjxo3LsmXL8ulPf7pE0wMAAB2JyAVAWd/Rdf75529zu0uX1nW3mTNnpqmpKeeee25OPfXU5uM9evTIbbfdlne+852555578uyzz2bYsGGtei4AAKDjqN/SmHO/tUTkAqhwhbkY/WuvvZb7778/STJx4sTt7j/ooIMyatSoJMncuXPbdTYAAKDtbH49mXTH0yIXAMUJXcuXL8/mzZuTJCNHjtzhOVuPL126tN3mAgAA2k79lsbMfmav/PLFepELgOKErueffz5J0qdPn+yzzz47PGfw4MHbnAsAAHRe67c0ZtIdT2fVpiqRC4AkZb5GVylt2LAhSVJbW7vTc3r27Jkkqa+v3+VaDQ0NaWhoaL699fzGxsY0Nja2dlTosLbub/ucIrPPqRT2OkVX//8j1y9frE9t16Z84xPvzSEDutvzFJLf6VSKUuzxwoSuUpo5c2auvvrq7Y4/+uij6dGjRxkmgva1YMGCco8Abc4+p1LY6xTR5teT2c/slVWbqlLbtSmffdcbWfmLn2TlL8o9GbQtv9Mpuq2XpGqNwoSurR9X3LRp007P2bhxY5KkV69dv515+vTpmTp1avPt+vr6DB48OCeccEL69+9fgmmhY2psbMyCBQty0kknpbq6utzjQJuwz6kU9jpFVd/8ccW3rsn1jU+8Nyt/8RN7nULzO51KsXbt2lavUZjQNXTo0CTJq6++mg0bNuzwOl2rVq3a5tydqampSU1NzXbHq6ur/VKhItjrVAL7nEphr1Mk67c05txvLdnmwvOHDOielb+w16kM9jlFV4r9XZiL0R9++OHNHytcvHjxDs/Zeryurq7d5gIAAFpv/ZbGfOK2hfnF6vUuPA/AThUmdHXr1i0f+tCHkiRz5szZ7v4XXnghTz31VJLkox/9aLvOBgAA7DmRC4Dd1elC180335xhw4blnHPO2e6+adOmpaqqKt/85jfzwAMPNB/fvHlzzjvvvLzxxhv52Mc+lmHDhrXnyAAAwB4SuQBoibJeo2vJkiWZPHly8+0VK1YkSb7+9a/nhz/8YfPxuXPn5oADDkiSrFmzJsuWLcv++++/3Xp1dXX58pe/nKlTp+a0007LBz7wgey77755/PHH8+///u85/PDD80//9E9t/KoAAIBSELkAaKmyhq76+vosXLhwu+OrV6/O6tWrm283NDTs9pqf+9znMnz48Hz5y1/OT3/602zatClDhgzJ9OnTM3369B1epB4AAOhYRC4A9kRZQ9eYMWPS1NTUosfMmDEjM2bM2OU5J554Yk488cRWTAYAAJSLyAXAnup01+gCAACKS+QCoDWELgAAoEMQuQBoLaELAAAoO5ELgFIQugAAgLISuQAoFaELAAAoG5ELgFISugAAgLIQuQAoNaELAABodyIXAG1B6AIAANqVyAVAWxG6AACAdiNyAdCWhC4AAKBdiFwAtDWhCwAAaHMiFwDtQegCAADalMgFQHsRugAAgDYjcgHQnoQuAACgTYhcALQ3oQsAACg5kQuAchC6AACAkhK5ACgXoQsAACgZkQuAchK6AACAkhC5ACg3oQsAAGg1kQuAjkDoAgAAWkXkAqCjELoAAIA9JnIB0JEIXQAAwB4RuQDoaIQuAACgxUQuADoioQsAAGgRkQuAjkroAgAAdpvIBUBHJnQBAAC7ReQCoKMTugAAgLclcgHQGQhdAADALolcAHQWQhcAALBTIhcAnYnQBQAA7JDIBUBnI3QBAADbEbkA6IyELgAAYBsiFwCdldAFAAA0E7kA6MyELgAAIInIBUDnJ3QBAAAiFwCFIHQBAECFE7kAKAqhCwAAKpjIBUCRCF0AAFChRC4AikboAgCACiRyAVBEQhcAAFQYkQuAohK6AACggohcABSZ0AUAABVC5AKg6IQuAACoACIXAJVA6AIAgIITuQCoFEIXAAAUmMgFQCURugAAoKBELgAqjdAFAAAFJHIBUImELgAAKBiRC4BKJXQBAECBiFwAVDKhCwAACkLkAqDSCV0AAFAAIhcACF0AANDpiVwA8BahCwAAOjGRCwD+g9AFAACdlMgFANsSugAAoBMSuQBge0IXAAB0MiIXAOyY0AUAAJ2IyAUAOyd0AQBAJyFyAcCuCV0AANAJiFwA8PaELgAA6OBELgDYPUIXAAB0YCIXAOw+oQsAADookQsAWkboAgCADkjkAoCWE7oAAKCDEbkAYM8IXQAA0IGIXACw54QuAADoIEQuAGgdoQsAADoAkQsAWk/oAgCAMhO5AKA0hC4AACgjkQsASkfoAgCAMhG5AKC0hC4AACgDkQsASk/oAgCAdiZyAUDbELoAAKAdiVwA0HaELgAAaCciFwC0LaELAADagcgFAG1P6AIAgDYmcgFA+xC6AACgDYlcANB+OkTo+t73vpcxY8akb9++qa2tzVFHHZUvfelLaWxsbNE6t99+e6qqqnb588ADD7TRqwAAgG2JXADQvrqWe4ApU6Zk1qxZ6dq1a8aOHZuePXvmkUceyWWXXZb77rsvDz74YLp3796iNQ8++OCMHj16h/cdeOCBpRgbAAB2SeQCgPZX1tB17733ZtasWenZs2cee+yx1NXVJUnWrFmTsWPH5oknnshVV12VG264oUXrjh49OrfffnsbTAwAAG9P5AKA8ijrRxevu+66JMm0adOaI1eSDBgwILNnz06S3HzzzVm/fn1Z5gMAgJYSuQCgfMoWul588cUsWrQoSTJx4sTt7h89enQGDx6choaGzJ8/v73HAwCAFhO5AKC8yvbRxaVLlyZJ+vXrl3e84x07PGfkyJFZtWpVli5dmv/6X//rbq/93HPP5corr8wrr7ySnj175sgjj8z48eMzYMCAkswOAAB/SeQCgPIrW+h6/vnnkyRDhgzZ6TmDBw/e5tzd9eSTT+bJJ5/c5tjee++dGTNm5LLLLnvbxzc0NKShoaH5dn19fZKksbGxxd8ECZ3J1v1tn1Nk9jmVwl5vX/VbGjPpjqfzyxfr07dHdb517sgcMqC7//3bgb1OJbDPqRSl2ONlC10bNmxIktTW1u70nJ49eyb5j9D0dvbff/9cccUVGT9+fN75znempqYmy5Yty0033ZQ777wz06ZNyxtvvJHLL798l+vMnDkzV1999XbHH3300fTo0WO3ZoHObMGCBeUeAdqcfU6lsNfb3ubXk9nP7JVVm6pS27UpnzpkS3675PH8ttyDVRh7nUpgn1N0mzdvbvUaZf3WxVI75ZRTcsopp2xzbOTIkbnjjjty1FFH5ZJLLskXvvCFnHfeedlvv/12us706dMzderU5tv19fUZPHhwTjjhhPTv37/N5odya2xszIIFC3LSSSelurq63ONAm7DPqRT2evvY+k6uVZv+451cw/bfp9xjVRR7nUpgn1Mp1q5d2+o1yha69tnnrb8AbNq0aafnbNy4MUnSq1frr21w8cUXZ+bMmVmzZk0efPDBfOITn9jpuTU1NampqdnueHV1tV8qVAR7nUpgn1Mp7PW2s35LY8791pLmjyu6Jld52etUAvucoivF/i7bty4OHTo0SbJq1aqdnrP1vq3ntsZee+2VQw89NEmyevXqVq8HAEDlcuF5AOiYyha6RowYkeStt6Xt7GLzixcvTpLU1dWV5Dm3vgVu67vJAACgpUQuAOi4yha6Bg0alGOOOSZJMmfOnO3uf+KJJ7Jq1arU1NTktNNOa/XzLVmyJMuXL0+SHHvssa1eDwCAyiNyAUDHVrbQlaT52w+vv/76LFmypPn42rVrM3ny5CTJhRdemN69ezffN3fu3AwbNizjxo3bZq3Nmzfna1/7WvO3Of65//t//28+9rGPJUlGjx4tdAEA0GIiFwB0fGX91sUJEybkoosuyo033pjjjjsu48aNS21tbR5++OG8+uqrGTVqVK655pptHrN+/fosW7Ysf/rTn7Y5/tprr+XCCy/MJZdckhEjRmTIkCF5/fXXs3z58vzqV79KkgwfPjzf/e532+31AQBQDCIXAHQOZQ1dSTJr1qyMGjUqX/va1/LUU0+lsbExBx98cKZNm5bPfe5z6dat226t06NHj1x11VVZvHhxnn322fz617/Oli1b0rdv35x44ok588wzM2nSpN1eDwAAEpELADqTsoeuJDnrrLNy1lln7da5kyZNyqRJk7Y73q1bt3zhC18o8WQAAFQykQsAOpeyXqMLAAA6KpELADofoQsAAP6CyAUAnZPQBQAAf0bkAoDOS+gCAID/T+QCgM5N6AIAgIhcAFAEQhcAABVP5AKAYhC6AACoaCIXABSH0AUAQMUSuQCgWIQuAAAqksgFAMUjdAEAUHFELgAoJqELAICKInIBQHEJXQAAVAyRCwCKTegCAKAiiFwAUHxCFwAAhSdyAUBlELoAACg0kQsAKofQBQBAYYlcAFBZhC4AAApJ5AKAyiN0AQBQOCIXAFQmoQsAgEIRuQCgcgldAAAUhsgFAJVN6AIAoBBELgBA6AIAoNMTuQCAROgCAKCTE7kAgK2ELgAAOi2RCwD4c0IXAACdksgFAPwloQsAgE5H5AIAdkToAgCgUxG5AICdEboAAOg0RC4AYFeELgAAOgWRCwB4O0IXAAAdnsgFAOwOoQsAgA5N5AIAdpfQBQBAhyVyAQAtIXQBANAhiVwAQEsJXQAAdDgiFwCwJ4QuAAA6FJELANhTQhcAAB2GyAUAtIbQBQBAhyByAQCtJXQBAFB2IhcAUApCFwAAZSVyAQClInQBAFA2IhcAUEpCFwAAZSFyAQClJnQBANDuRC4AoC0IXQAAtCuRCwBoK0IXAADtRuQCANqS0AUAQLsQuQCAtiZ0AQDQ5kQuAKA9CF0AALQpkQsAaC9CFwAAbUbkAgDak9AFAECbELkAgPYmdAEAUHIiFwBQDkIXAAAlJXIBAOUidAEAUDIiFwBQTkIXAAAlIXIBAOUmdAEA0GoiFwDQEQhdAAC0isgFAHQUQhcAAHtM5AIAOhKhCwCAPSJyAQAdjdAFAECLiVwAQEckdAEA0CIiFwDQUQldAADsNpELAOjIhC4AAHaLyAUAdHRCFwAAb0vkAgA6A6ELAIBdErkAgM5C6AIAYKdELgCgMxG6AADYIZELAOhshC4AALYjcgEAnZHQBQDANkQuAKCzEroAAGgmcgEAnZnQBQBAEpELAOj8hC4AAEQuAKAQhC4AgAoncgEARSF0AQBUMJELACgSoQsAoEKJXABA0QhdAAAVSOQCAIpI6AIAqDAiFwBQVEIXAEAFEbkAgCLrEKHre9/7XsaMGZO+ffumtrY2Rx11VL70pS+lsbFxj9Z7+umnc+aZZ2a//fbL3nvvnXe84x35+7//+7zyyislnhwAoPMQuQCAoit76JoyZUrOOuusPPnkkzn22GNzyimnZOXKlbnssssyduzYbNmypUXrff/7389xxx2X73//+znooIPykY98JF26dMnNN9+c97znPXnuuefa6JUAAHRcIhcAUAnKGrruvffezJo1Kz179szChQvzf/7P/8k999yT3/zmNxk+fHieeOKJXHXVVbu93ksvvZRPfvKTef311/P1r389P/3pT/Od73wny5cvz9lnn52XX345EydOTFNTUxu+KgCAjkXkAgAqRVlD13XXXZckmTZtWurq6pqPDxgwILNnz06S3HzzzVm/fv1urffVr341mzdvzoknnpgLLrig+fhee+2VW265Jb17986iRYvy4IMPlvBVAAB0XPUiFwBQQcoWul588cUsWrQoSTJx4sTt7h89enQGDx6choaGzJ8/f7fWnDt37k7X69mzZ8aPH58k+Zd/+Zc9HRsAoNPY/Hoy6Y6nRS4AoGKULXQtXbo0SdKvX7+84x3v2OE5I0eO3ObcXdmwYUPz9be2Pq416wEAdGb1Wxoz+5m98ssX60UuAKBidC3XEz///PNJkiFDhuz0nMGDB29z7q787ne/a/7zztbc3fUaGhrS0NDQfLu+vj5JMumbi9OtR8+3nQU6q6ampvzx1b1yx+qFqaqqKvc40CbscyrFS+u35N83VaVP9+p869yROWRA9z3+RmvoyLbua/ubIrPPqRSl2ONlC10bNmxIktTW1u70nJ4934pKW0PT7qy3qzV3d72ZM2fm6quv3u74z1+sT5ea1992FujcqvL8ht27Lh50XvY5laG2a1MuOHRLfrvk8fy23MNAG1uwYEG5R4A2Z59TdJs3b271GmULXR3Z9OnTM3Xq1Obb9fX1GTx4cL444Yjs07tP+QaDNvbGG2/k5z//eY466qjstdde5R4H2oR9TqV48803suG3P8tHTzsp1dXV5R4H2kxjY2MWLFiQk06y1yku+5xKsXbt2lavUbbQtc8++yRJNm3atNNzNm7cmCTp1evtryexdb2ta/bu3XuP16upqUlNTc12xz945AHp37//284CnVVjY2Oy+mc57T0D/QOUwrLPqRSNjY2Zv+pnqa6uttepCPY6lcA+p+hKsb/LdjH6oUOHJklWrVq103O23rf13F056KCDmv+8cuXKVq8HAAAAQOdSttA1YsSIJG+9LW1nF4dfvHhxkqSuru5t1+vVq1cOOeSQbR7XmvUAAAAA6FzKFroGDRqUY445JkkyZ86c7e5/4oknsmrVqtTU1OS0007brTU/+tGP7nS9jRs35r777kuSnHHGGXs6NgAAAAAdVNlCV5JcfvnlSZLrr78+S5YsaT6+du3aTJ48OUly4YUXbnO9rblz52bYsGEZN27cdutNmTIlPXr0yEMPPZT//b//d/PxN954I5MnT86rr76aY445Jh/84Afb6iUBAAAAUCZlDV0TJkzIRRddlI0bN+a4447Lqaeemv/yX/5LDjnkkPzyl7/MqFGjcs0112zzmPXr12fZsmVZsWLFdusNHDgwt99+e/baa69ccMEFOe644/I3f/M3Oeyww3LnnXdmv/32y5w5c1JVVdVeLxEAAACAdlLW0JUks2bNyne+8528733vy1NPPZX58+dn0KBBuf766/PII4+ke/fuLVrvzDPPzMKFC3PGGWfkt7/9bebOnZs33ngjn/3sZ/Pzn/+8+TpeAAAAABRL13IPkCRnnXVWzjrrrN06d9KkSZk0adIuzzn66KNzzz33lGAyAAAAADqLsr+jCwAAAABKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBCELgAAAAAKQegCAAAAoBDKGro2bNiQyy+/PIcffni6d++eAQMG5EMf+lAeeeSRPVpvzJgxqaqq2unP/vvvX+JXAAAAAEBH0bVcT/zKK6/k+OOPz/Lly3PAAQfk9NNPz8svv5wf/ehH+dGPfpRZs2bl7//+7/do7ZNPPnmHUat3796tHRsAAACADqpsoeuCCy7I8uXLM27cuMybNy89evRIksyfPz/jx4/PlClT8oEPfCDvec97Wrz2tGnTMmbMmBJPDAAAAEBHVpaPLj7zzDP5wQ9+kL322iu33XZbc+RKktNOOy2TJk3Km2++mZkzZ5ZjPAAAAAA6obKErrlz5yZJRo0alYMOOmi7+ydOnJgkue+++9LY2NiuswEAAADQOZXlo4tLly5NkowcOXKH9289vmnTpvzmN7/Ju971rhatP3fu3Nx7773ZsmVL9ttvv/zVX/1VPvjBD6ZLF18yCQAAAFBUZQldzz//fJJkyJAhO7y/V69e6dWrV+rr6/P888+3OHTdeOON2x077LDDctddd+WYY45p+cAAAAAAdHhlCV0bNmxIktTW1u70nJ49e6a+vj719fW7ve7xxx+fs88+O+9///szaNCg/PGPf8yiRYty5ZVX5te//nVOPPHE/Ou//muOOOKIXa7T0NCQhoaG5ttbZ2hsbPRRSgpt6/62zyky+5xKYa9TKex1KoF9TqUoxR5vcei69NJLM2/evBY/0a233prRo0e3+HEtcc0112xzu0ePHjnwwANz6qmn5vjjj8+iRYsyffr03HvvvbtcZ+bMmbn66qu3O/7oo49uc+F8KKoFCxaUewRoc/Y5lcJep1LY61QC+5yi27x5c6vXaHHoeumll7Js2bIWP9HGjRub/7zPPvskeesaXG93fq9evVr8XH+ppqYmV1xxRSZMmJAHHnggjY2Nqa6u3un506dPz9SpU5tv19fXZ/DgwTnhhBPSv3//Vs8DHVVjY2MWLFiQk046aZf/H4HOzD6nUtjrVAp7nUpgn1Mp1q5d2+o1Why67rrrrtx1112tetKhQ4dmyZIlWbly5Q7v//OPLA4dOrRVz7XV1o8rNjQ0ZM2aNTnggAN2em5NTU1qamq2O15dXe2XChXBXqcS2OdUCnudSmGvUwnsc4quFPu7LF9DWFdXlyRZvHjxDu/fery2tjaHHXZYSZ7zz6vg1neUAQAAAFAcZQldEyZMSJI8+eSTO3xX15w5c5Ikp59+eslq9be//e0kb72zq2fPniVZEwAAAICOoyyh693vfnc+8pGP5I033sh5552XLVu2NN/3ox/9KLfffnu6dOmS6dOnb/fYc845J8OGDcvNN9+8zfFHH300P/7xj9PU1LTN8ddeey3XX399brrppiTJJZdc0gavCAAAAIBya/E1ukrlf/2v/5VnnnkmDz30UA4++OAcf/zxeeWVV/LYY4+lqakps2bNynve857tHrdy5cosW7Ysa9as2eb4z3/+83zuc5/Lfvvtl/e+973p379//vCHP+QXv/hFXn755STJ5z//+Zx33nnt8voAAAAAaF9lC1377rtvFi9enJkzZ+aee+7JD37wg9TW1ubkk0/O5z//+YwbN65F633gAx/IZz7zmTz99NP5xS9+kXXr1qVLly4ZOHBgTj755Pzd3/1d/uqv/qqNXg0AAAAA5Va20JUkvXr1ysyZMzNz5szdfsyPf/zjHR4fMWJEZs+eXaLJAAAAAOhsynKNLgAAAAAoNaELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAAAAAoBKELAAAAgEIQugAA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AABQCEIXAAAAAIVQttA1f/78zJgxI6effnoGDhyYqqqqVFVVZfXq1Xu85tChQ5vX2dHPcccdV8JXAAAAAEBH0rVcTzxx4sSsX7++Tdb+2Mc+lp49e253/OCDD26T5wMAAACg/MoWus4444wceuihqaurS11dXfbdd9+SrX3DDTdk6NChJVsPAAAAgI6vbKHrG9/4RrmeGgAAAIACcjF6AAAAAAqhbO/oakvf/OY3s27durz++usZOHBgPvCBD+T9739/uccCAAAAoA0VMnR94Qtf2O7YMccckzlz5uSQQw5528c3NDSkoaGh+fbWi+avW7eudENCB9TY2JjNmzdn7dq1qa6uLvc40CbscyqFvU6lsNepBPY5lWJrd2lqatrjNQoVuj70oQ9l9OjROfbYY3PggQfm97//fR5//PFceeWVWbRoUcaMGZMlS5a87YXvZ86cmauvvnq744cddlhbjQ4AAABAkrVr16Z379579NiqphZmsksvvTTz5s1r8RPdeuutGT169M4HqapKkqxatSqDBg1q8fq7sm7duhx99NH53e9+l4svvjhf/epXd3n+X76j69VXX81BBx2UlStX7vH/0NAZ1NfXZ/DgwVm1alV69epV7nGgTdjnVAp7nUphr1MJ7HMqxfr16zNkyJD88Y9/TJ8+ffZojRa/o+ull17KsmXLWvxEGzdubPFjSqVfv36ZMmVKpkyZkvvuu+9tQ1dNTU1qamq2O967d2+/VKgIvXr1stcpPPucSmGvUynsdSqBfU6l6NJlz787scWPvOuuu9LU1NTin1NOOWWPhyyFI444IkmyevXqss4BAAAAQNvY80TWyaxduzZJss8++5R5EgAAAADaQsWErm9/+9tJkmOPPbbFj62pqcl//+//fYcfZ4QisdepBPY5lcJep1LY61QC+5xKUYq93uKL0beV3b0Y/bhx4/Liiy9m5syZ+ehHP9p8/Ac/+EEGDRqUo48+epvzN2zYkKuuuiqzZs1KkixYsCAnnnhiG7wCAAAAAMqpxRejL5Vrrrkm999//3bHx48fn27duiVJ6urqMnv27G3uX7FiRV544YWsX79+m+OPPvpoZs2alSFDhmT48OHp06dPXnrppfzsZz/LH//4x3Tt2jU33HCDyAUAAABQUGULXStWrMjChQu3O7506dLmP++99967vd6ECROycePGLFmyJIsXL866devSrVu3DBkyJH/913+dyZMnZ/jw4SWZHQAAAICOp8N8dBEAAAAAWqNiLkYPAAAAQLEJXXugvr4+V111VT70oQ/l4IMPTu/evdOtW7cMHDgwH/nIR3Z47THobF555ZV861vfysSJE3PooYdm7733To8ePTJs2LBcdNFF+d3vflfuEaFk5s+fnxkzZuT000/PwIEDU1VVlaqqqqxevbrco0GLfe9738uYMWPSt2/f1NbW5qijjsqXvvSlNDY2lns0KIlly5blpptuyqRJkzJ8+PB07do1VVVVufbaa8s9GpRMY2NjHn744fzDP/xDjjnmmPTp0yfV1dXZf//9M378eP/OSaHcfffdOeecc3LUUUdl3333TXV1dXr37p1jjz02M2fOzMaNG1u0no8u7oHnnnsuhx56aHr27JkjjzwyBxxwQLp06ZLnnnsuP//5z5MkkydPzte+9rUyTwp77uyzz87dd9+dLl265Mgjj8zhhx+eTZs2ZdGiRfnDH/6Q2trazJ07NyeddFK5R4VW69Onz3ZfcpK8/TcBQ0czZcqUzJo1K127ds3YsWPTs2fPPPLII3n11VczevToPPjgg+nevXu5x4RW2brP/9I111yTK6+8sgwTQek99NBDzX/P3n///XP00UentrY2zzzzTH71q18lSS644IL80z/9U6qqqso5KrTa6NGj89RTT+WII47I4MGD069fv7z88sv5yU9+ki1btuSQQw7JY489loEDB+7WekLXHti4cWN+9atfZeTIkenaddvr+T/66KP58Ic/nM2bN+eBBx7IySefXKYpoXUuuuiiDBgwIOedd14OPPDA5uMbN27Mpz71qXz7299Ov3798txzz6Vv375lnBRa72//9m9z6KGHpq6uLnV1ddl3332TCF10Lvfee28++tGPpmfPnnnsscdSV1eXJFmzZk3Gjh2bX/7yl7nkkktyww03lHlSaJ1bb701y5Yty4gRI1JXV5frrrsud955p9BFoTzyyCOZPXt2Lr744hx//PHb3Ped73wnH//4x/PGG2/kjjvuyDnnnFOmKaE0Fi5cmEMPPTT9+vXb5vjatWszYcKEPPHEE/mbv/mb/PM///NurSd0tYHzzjsv3/jGNzJ16tR8+ctfLvc4UHKbN2/O/vvvnw0bNuTOO+/M2WefXe6RoKS2/pdRoYvO5Nhjj82iRYty7bXX5oorrtjmvieeeCLHH398ampq8vLLL6d3795lmhJKb9KkSbnjjjuELirK+eefn9tuuy3jxo3LQw89VO5xoM08/vjjef/7359+/fpl7dq1u/UY1+hqA1vf5VVTU1PmSaBt9OjRI4cffniSt0IAAOX14osvZtGiRUmSiRMnbnf/6NGjM3jw4DQ0NGT+/PntPR4AJTZixIgk/i5O8e1JXxG6SmzRokX5zne+k6qqqpx++unlHgfaRGNjY/PF6A844IDyDgNAli5dmiTp169f3vGOd+zwnJEjR25zLgCd129+85sk/i5OsW3YsCEzZsxIkowfP363H9f17U9hV/7bf/tvWblyZbZs2ZLnn38+ixYtSrdu3XLjjTfmfe97X7nHgzZx2223Zc2aNenevXtOPfXUco8DUPGef/75JMmQIUN2es7gwYO3OReAzun3v/99br/99iTJxz72sfIOAyX04IMPZs6cOXnzzTebL0a/YcOGnHLKKfniF7+42+sIXa00b9685m9aTJKePXvmK1/5Sv72b/+2jFNB2/nlL3+Zf/iHf0iSXHXVVdlvv/3KPBEAGzZsSJLU1tbu9JyePXsmSerr69tlJgBK7/XXX8/ZZ5+d9evXZ/jw4fm7v/u7co8EJfPMM8/kjjvu2ObYxIkT85WvfKVF1xetuNB16aWXZt68eS1+3K233prRo0dvd/xnP/tZkrf+0rhs2bJ89atfzQUXXJBvf/vbuffee7PPPvu0dmRosVLv861Wr16d008/PRs3bsz48eMzbdq01owJrdZWex0AoCP69Kc/nYcffjj9+/fP97///XTr1q3cI0HJTJkyJVOmTEljY2NWrlyZH/zgB7n22mvzwAMPZO7cuXn/+9+/W+tUXOh66aWXsmzZshY/buPGjbu8v1evXjnmmGNy9913p0+fPpk9e3auvvpqX+FNWbTFPv/973+fcePG5YUXXsjJJ5+c7373u83fTAfl0la/06Gz2fof1jZt2rTTc7bu+169erXLTACU1sUXX5zbbrstffv2zYIFC3LYYYeVeyRoE9XV1Tn44IMzderUjBo1Ku973/ty9tlnZ9myZenevfvbPr7iLkZ/1113pampqcU/p5xyym4/x7nnnpskmTt3blu9DNilUu/zV155JWPHjs3y5ctz4okn5t577/WtonQI7fE7HTqDoUOHJtn1t29tvW/ruQB0HpdcckluvPHG9OnTJw8++GDzty5C0f3n//yf8653vSurVq3K4sWLd+sxFRe62sPW62O88sorZZ4EWu8Pf/hDxo4dm3/7t3/LuHHjMm/evOy9997lHguAP7P1X3jWrl2704vNb/3LYV1dXbvNBUDrXXrppc3XKHrwwQebv0UXKkVLG4vQ1QYefvjhJPFWUjq9NWvWZOzYsfn1r3+dcePG5b777tutt4oC0L4GDRqUY445JkkyZ86c7e5/4oknsmrVqtTU1OS0005r7/EA2EPTpk3L//gf/yO9e/fOggULmn/XQ6VYs2ZN8xcA7m5jEbr2wJw5c/L0009vd7ypqSn/8i//kiuvvDJJcsEFF7T3aFAy69aty7hx4/KrX/0qJ554osgF0MFdfvnlSZLrr78+S5YsaT6+du3aTJ48OUly4YUXtuhbiwAonyuvvDJf/OIX06dPH5GLwnrmmWdy9913509/+tN29y1fvjxnnnlmGhoactxxx2X48OG7tWZVU1NTU6kHLbpJkybljjvuyKBBg/Ke97wnffr0ydq1a/Pss8/mhRdeSJJ89rOfzU033eRi3XRaZ5xxRubOnZuqqqqceeaZO41cEyZMyIQJE9p3OCixa665Jvfff3/z7YULFyZ56+NgW7/NqK6uLrNnzy7LfLC7Lr744tx4442prq7OuHHjUltbm4cffjivvvpqRo0alQULFviPFnR6S5YsaY63SbJixYqsWbMmgwYNyoEHHth8fO7cuTnggAPKMSK02rx58/KRj3wkSTJy5Mi8+93v3uF5AwYM8AVodGo//vGPc8IJJ6S2tjYjRozIoEGD8tprr2XlypVZsmRJ3nzzzRxxxBF54IEHMmTIkN1as+K+dbEUPvWpT6V379556qmnsmTJkqxduzbV1dUZNGhQPvnJT+b888/3tfV0euvWrUvy1jsVv/vd7+70vKFDhwpddHorVqxojlt/bunSpc1/dm06OoNZs2Zl1KhR+drXvpannnoqjY2NOfjggzNt2rR87nOf8zX0FEJ9ff0Of2evXr06q1evbr7d0NDQnmNBSW39u3jy1jUWd3YR7oMOOkjoolN797vfnX/8x3/M448/nmeffTZLly5NY2Nj+vXrl3HjxuWMM87Iueee26IvQ/OOLgAAAAAKwTW6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQhC6AAAAACgEoQsAAACAQvh/lG2S5bSKNfQAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(lambda x: max(0, x))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### ReLU – zalety\n",
"* Mniej podatna na problem zanikającego gradientu (*vanishing gradient*) niż funkcje sigmoidalne, dzięki czemu SGD jest szybciej zbieżna.\n",
"* Prostsze obliczanie gradientu.\n",
"* Dzięki zerowaniu ujemnych wartości, wygasza neurony, „rozrzedzając” sieć (*sparsity*), co przyspiesza obliczenia."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### ReLU – wady\n",
"* Dla dużych wartości gradient może „eksplodować”.\n",
"* Za dużo „wygaszonych” neuronów może mieć negatywny wpływ na przepływ gradientu do poprzedzających warstw."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Inne funkcje aktywacji\n",
"\n",
"W literaturze zaproponowano też inne funkcje aktywacji, które są lepsze od ReLU pod niektórymi względami:\n",
"* softplus\n",
"* ELU\n",
"* leaky ReLU\n",
"* SiLU / swish\n",
"\n",
"W praktyce jednak ReLU pozostaje najpopularniejszą funkcją aktywacji ze względu na jej prostotę, skuteczność i szybkość obliczania."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## 10.3. Wielowarstwowe sieci neuronowe\n",
"\n",
"czyli _Artificial Neural Networks_ (ANN) lub _Multi-Layer Perceptrons_ (MLP)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"![Rys. 9.5. Wielowarstwowa sieć neuronowa](nn1.png \"Rys. 9.5. Wielowarstwowa sieć neuronowa\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Architektura sieci\n",
"\n",
"* Sieć neuronowa jako graf neuronów. \n",
"* Organizacja sieci przez warstwy.\n",
"* Najczęściej stosowane są sieci jednokierunkowe i gęste.\n",
"* $n$-warstwowa sieć neuronowa ma $n+1$ warstw (nie liczymy wejścia).\n",
"* Rozmiary sieci określane poprzez liczbę neuronów lub parametrów."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Sieć neuronowa jednokierunkowa (*feedforward*)\n",
"\n",
"* Mając daną $n$-warstwową sieć neuronową oraz jej parametry $\\Theta^{(1)}, \\ldots, \\Theta^{(L)} $ oraz $\\beta^{(1)}, \\ldots, \\beta^{(L)} $, liczymy:
\n",
"$$a^{(l)} = g^{(l)}\\left( a^{(l-1)} \\Theta^{(l)} + \\beta^{(l)} \\right). $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"![Rys. 11.6. Wielowarstwowa sieć neuronowa - feedforward](nn2.png \"Rys. 11.6. Wielowarstwowa sieć neuronowa - feedforward\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Funkcje $g^{(l)}$ to tzw. **funkcje aktywacji**.
\n",
"Dla $i = 0$ przyjmujemy $a^{(0)} = \\mathrm{x}$ (wektor wierszowy cech) oraz $g^{(0)}(x) = x$ (identyczność)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Parametry $\\Theta$ to wagi na połączeniach miedzy neuronami dwóch warstw.
\n",
"Rozmiar macierzy $\\Theta^{(l)}$, czyli macierzy wag na połączeniach warstw $a^{(l-1)}$ i $a^{(l)}$, to $\\dim(a^{(l-1)}) \\times \\dim(a^{(l)})$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Parametry $\\beta$ zastępują tutaj dodawanie kolumny z jedynkami do macierzy cech.
Macierz $\\beta^{(l)}$ ma rozmiar równy liczbie neuronów w odpowiedniej warstwie, czyli $1 \\times \\dim(a^{(l)})$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* **Klasyfikacja**: dla ostatniej warstwy $L$ (o rozmiarze równym liczbie klas) przyjmuje się $g^{(L)}(x) = \\mathop{\\mathrm{softmax}}(x)$.\n",
"* **Regresja**: pojedynczy neuron wyjściowy jak na obrazku. Funkcją aktywacji może wtedy być np. funkcja identycznościowa."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Pozostałe funkcje aktywacji najcześciej mają postać sigmoidy, np. sigmoidalna, tangens hiperboliczny.\n",
"* Mogą mieć też inny kształt, np. ReLU, leaky ReLU, maxout."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Uczenie wielowarstwowych sieci neuronowych"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Mając algorytm SGD oraz gradienty wszystkich wag, moglibyśmy trenować każdą sieć."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Niech:\n",
"$$\\Theta = (\\Theta^{(1)},\\Theta^{(2)},\\Theta^{(3)},\\beta^{(1)},\\beta^{(2)},\\beta^{(3)})$$\n",
"\n",
"* Funkcja sieci neuronowej z grafiki:\n",
"\n",
"$$\\small h_\\Theta(x) = \\tanh(\\tanh(\\tanh(x\\Theta^{(1)}+\\beta^{(1)})\\Theta^{(2)} + \\beta^{(2)})\\Theta^{(3)} + \\beta^{(3)})$$\n",
"* Funkcja kosztu dla regresji:\n",
"$$J(\\Theta) = \\dfrac{1}{2m} \\sum_{i=1}^{m} (h_\\Theta(x^{(i)})- y^{(i)})^2 $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Jak obliczymy gradienty?\n",
"\n",
"$$\\nabla_{\\Theta^{(l)}} J(\\Theta) = ? \\quad \\nabla_{\\beta^{(l)}} J(\\Theta) = ?$$\n",
"\n",
"* Postać funkcji kosztu zależna od wybranej architektury sieci oraz funkcji aktywacji."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"$$\\small J(\\Theta) = \\frac{1}{2}(a^{(L)} - y)^2 $$\n",
"$$\\small \\dfrac{\\partial}{\\partial a^{(L)}} J(\\Theta) = a^{(L)} - y$$\n",
"\n",
"$$\\small \\tanh^{\\prime}(x) = 1 - \\tanh^2(x)$$"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
},
"livereveal": {
"start_slideshow_at": "selected",
"theme": "white"
}
},
"nbformat": 4,
"nbformat_minor": 4
}