From 2672df42db744e45d43ad084e0bb3d37cdcfdb9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Sk=C3=B3rzewski?= Date: Wed, 5 May 2021 08:03:27 +0200 Subject: [PATCH] =?UTF-8?q?Poprawki=20do=20wyk=C5=82adu=209=20o=20sieciach?= =?UTF-8?q?=20neuronowych?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wyk/09_Sieci_neuronowe.ipynb | 84 +++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/wyk/09_Sieci_neuronowe.ipynb b/wyk/09_Sieci_neuronowe.ipynb index c541f36..13b7df9 100644 --- a/wyk/09_Sieci_neuronowe.ipynb +++ b/wyk/09_Sieci_neuronowe.ipynb @@ -87,7 +87,7 @@ } }, "source": [ - "\"Frank" + "\"Frank" ] }, { @@ -98,7 +98,7 @@ } }, "source": [ - "\"Frank" + "\"Frank" ] }, { @@ -109,7 +109,7 @@ } }, "source": [ - "\"perceptron\"/" + "\"perceptron\"/" ] }, { @@ -242,7 +242,7 @@ "source": [ "### Perceptron – schemat\n", "\n", - "" + "" ] }, { @@ -253,13 +253,12 @@ } }, "source": [ - "### Perceptron – zasada działania\n", + "#### Perceptron – zasada działania\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)}$:\n", - " $$o^{(i)} = g(\\theta^{T}x^{(i)}) = g(\\sum_{j=0}^{n} \\theta_jx_j^{(i)})$$\n", - " * Wykonaj aktualizację wag (tzw. _perceptron rule_):\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)} $$" ] @@ -326,9 +325,8 @@ } }, "source": [ - "### Perceptron – zalety i wady\n", + "### Perceptron – zalety\n", "\n", - "Zalety:\n", "* intuicyjny i prosty\n", "* łatwy w implementacji\n", "* jeżeli dane można liniowo oddzielić, algorytm jest zbieżny w skończonym czasie" @@ -338,11 +336,12 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "subslide" } }, "source": [ - "Wady:\n", + "### Perceptron – wady\n", + "\n", "* jeżeli danych nie można oddzielić liniowo, algorytm nie jest zbieżny" ] }, @@ -562,7 +561,7 @@ } }, "source": [ - "" + "" ] }, { @@ -576,8 +575,7 @@ "### 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", - "\n", - "* Po obliczeniu $\\nabla J(\\theta)$, zwykły SGD." + "* Po obliczeniu $\\nabla J(\\theta)$ - zwykły SGD." ] }, { @@ -595,7 +593,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { @@ -607,10 +605,9 @@ }, "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} [y^{(i)}\\log P(1|x^{(i)},\\theta) \\\\ && + (1-y^{(i)})\\log(1-P(1|x^{(i)},\\theta))]\\end{eqnarray}$$\n", - "\n", - "* Po obliczeniu $\\nabla J(\\theta)$, zwykły SGD." + "* 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." ] }, { @@ -632,7 +629,7 @@ } }, "source": [ - "" + "" ] }, { @@ -643,14 +640,23 @@ } }, "source": [ - "### Wieloklasowa regresji logistyczna\n", + "### 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}$$\n", - "* Funkcja kosztu (**przymując model regresji binarnej**): $$\\begin{eqnarray} J(\\theta^{(k)}) &=& -\\frac{1}{m} \\sum_{i=1}^{m} [y^{(i)}\\log P(k|x^{(i)},\\theta^{(k)}) \\\\ && + (1-y^{(i)})\\log P(\\neg k|x^{(i)},\\theta^{(k)})]\\end{eqnarray}$$\n", - "\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." ] }, @@ -667,8 +673,17 @@ "\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.$$\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) $$" ] @@ -699,10 +714,9 @@ "## 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.\n", - " * Wymienione modele to szczególne przypadki jednowarstwowych sieci neuronowych.\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." + "* Wieloklasowa regresja logistyczna to tyle neuronów, ile klas." ] }, { @@ -737,7 +751,7 @@ } }, "source": [ - "" + "" ] }, { @@ -789,7 +803,7 @@ } }, "source": [ - "" + "" ] }, { @@ -820,7 +834,7 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "subslide" } }, "source": [ @@ -831,7 +845,7 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "subslide" + "slide_type": "fragment" } }, "source": [ @@ -843,7 +857,7 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "fragment" + "slide_type": "subslide" } }, "source": [