Poprawki do wykładu 9 o sieciach neuronowych

This commit is contained in:
Paweł Skórzewski 2021-05-05 08:03:27 +02:00
parent deb97e8664
commit 2672df42db

View File

@ -87,7 +87,7 @@
} }
}, },
"source": [ "source": [
"<img style=\"margin: auto\" width=\"80%\" src=\"http://m.natemat.pl/b94a41cd7322e1b8793e4644e5f82683,641,0,0,0.png\" alt=\"Frank Rosenblatt\"/>" "<img style=\"margin: auto\" heighth=\"100%\" src=\"http://m.natemat.pl/b94a41cd7322e1b8793e4644e5f82683,641,0,0,0.png\" alt=\"Frank Rosenblatt\"/>"
] ]
}, },
{ {
@ -98,7 +98,7 @@
} }
}, },
"source": [ "source": [
"<img style=\"margin: auto\" src=\"http://m.natemat.pl/02943a7dc0f638d786b78cd5c9e75742,641,0,0,0.png\" width=\"70%\" alt=\"Frank Rosenblatt\"/>" "<img style=\"margin: auto\" src=\"http://m.natemat.pl/02943a7dc0f638d786b78cd5c9e75742,641,0,0,0.png\" heighth=\"100%\" alt=\"Frank Rosenblatt\"/>"
] ]
}, },
{ {
@ -109,7 +109,7 @@
} }
}, },
"source": [ "source": [
"<img style=\"margin: auto\" width=\"50%\" src=\"https://upload.wikimedia.org/wikipedia/en/5/52/Mark_I_perceptron.jpeg\" alt=\"perceptron\"/>" "<img style=\"margin: auto\" heighth=\"100%\" src=\"https://upload.wikimedia.org/wikipedia/en/5/52/Mark_I_perceptron.jpeg\" alt=\"perceptron\"/>"
] ]
}, },
{ {
@ -242,7 +242,7 @@
"source": [ "source": [
"### Perceptron schemat\n", "### Perceptron schemat\n",
"\n", "\n",
"<img src=\"perceptron.png\" />" "<img src=\"perceptron.png\" width=\"60%\"/>"
] ]
}, },
{ {
@ -253,13 +253,12 @@
} }
}, },
"source": [ "source": [
"### Perceptron zasada działania\n", "#### Perceptron zasada działania\n",
"\n", "\n",
"1. Ustal wartości początkowe $\\theta$ (wektor 0 lub liczby losowe blisko 0).\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", "1. Dla każdego przykładu $(x^{(i)}, y^{(i)})$, dla $i=1,\\ldots,m$\n",
" * Oblicz wartość wyjścia $o^{(i)}$:\n", " * Oblicz wartość wyjścia $o^{(i)} = g(\\theta^{T}x^{(i)}) = g(\\sum_{j=0}^{n} \\theta_jx_j^{(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",
" * Wykonaj aktualizację wag (tzw. _perceptron rule_):\n",
" $$ \\theta := \\theta + \\Delta \\theta $$\n", " $$ \\theta := \\theta + \\Delta \\theta $$\n",
" $$ \\Delta \\theta = \\alpha(y^{(i)}-o^{(i)})x^{(i)} $$" " $$ \\Delta \\theta = \\alpha(y^{(i)}-o^{(i)})x^{(i)} $$"
] ]
@ -326,9 +325,8 @@
} }
}, },
"source": [ "source": [
"### Perceptron zalety i wady\n", "### Perceptron zalety\n",
"\n", "\n",
"Zalety:\n",
"* intuicyjny i prosty\n", "* intuicyjny i prosty\n",
"* łatwy w implementacji\n", "* łatwy w implementacji\n",
"* jeżeli dane można liniowo oddzielić, algorytm jest zbieżny w skończonym czasie" "* jeżeli dane można liniowo oddzielić, algorytm jest zbieżny w skończonym czasie"
@ -338,11 +336,12 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "subslide"
} }
}, },
"source": [ "source": [
"Wady:\n", "### Perceptron wady\n",
"\n",
"* jeżeli danych nie można oddzielić liniowo, algorytm nie jest zbieżny" "* jeżeli danych nie można oddzielić liniowo, algorytm nie jest zbieżny"
] ]
}, },
@ -562,7 +561,7 @@
} }
}, },
"source": [ "source": [
"<img src=\"reglin.png\" />" "<img src=\"reglin.png\" width=\"70%\"/>"
] ]
}, },
{ {
@ -576,8 +575,7 @@
"### Uczenie regresji liniowej:\n", "### Uczenie regresji liniowej:\n",
"* Model: $$h_{\\theta}(x) = \\sum_{i=0}^n \\theta_ix_i$$\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", "* 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", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"<img src=\"reglog.png\" />" "<img src=\"reglog.png\" width=\"60%\"/>"
] ]
}, },
{ {
@ -607,10 +605,9 @@
}, },
"source": [ "source": [
"### Uczenie dwuklasowej regresji logistycznej:\n", "### Uczenie dwuklasowej regresji logistycznej:\n",
"* Model: $$h_{\\theta}(x) = \\sigma(\\sum_{i=0}^n \\theta_ix_i) = P(1|x,\\theta)$$\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", "* 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",
"\n", "* Po obliczeniu $\\nabla J(\\theta)$ - zwykły SGD."
"* Po obliczeniu $\\nabla J(\\theta)$, zwykły SGD."
] ]
}, },
{ {
@ -632,7 +629,7 @@
} }
}, },
"source": [ "source": [
"<img src=\"multireglog.png\" />" "<img src=\"multireglog.png\" width=\"40%\"/>"
] ]
}, },
{ {
@ -643,14 +640,23 @@
} }
}, },
"source": [ "source": [
"### Wieloklasowa regresji logistyczna\n", "### Wieloklasowa regresja logistyczna\n",
"* Model (dla $c$ klasyfikatorów binarnych): \n", "* Model (dla $c$ klasyfikatorów binarnych): \n",
"$$\\begin{eqnarray}\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", "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", "&=& \\left[ P(k|x,\\theta^{(1)},\\dots,\\theta^{(c)}) \\right]_{k=1,\\dots,c} \n",
"\\end{eqnarray}$$\n", "\\end{eqnarray}$$"
"* 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", },
{
"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." "* 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", "\n",
"$$h_{\\Theta}(x) = \\left[ P(k|x,\\Theta) \\right]_{k=1,\\dots,c}$$\n", "$$h_{\\Theta}(x) = \\left[ P(k|x,\\Theta) \\right]_{k=1,\\dots,c}$$\n",
"\n", "\n",
"$$\\delta(x,y) = \\left\\{\\begin{array}{cl} 1 & \\textrm{gdy } x=y \\\\ 0 & \\textrm{wpp.}\\end{array}\\right.$$\n", "$$\\delta(x,y) = \\left\\{\\begin{array}{cl} 1 & \\textrm{gdy } x=y \\\\ 0 & \\textrm{wpp.}\\end{array}\\right.$$"
"\n", ]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Wieloklasowa funkcja kosztu $J(\\Theta)$ (kategorialna entropia krzyżowa):\n", "* 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) $$" "$$ 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", "## Podsumowanie\n",
"\n", "\n",
"* W przypadku jednowarstowej sieci neuronowej wystarczy znać gradient funkcji kosztu.\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", "* Wtedy liczymy tak samo jak w przypadku regresji liniowej, logistycznej, wieloklasowej logistycznej itp. (wymienione modele to szczególne przypadki jednowarstwowych sieci neuronowych(.\n",
" * Wymienione modele to szczególne przypadki jednowarstwowych sieci neuronowych.\n",
"* Regresja liniowa i binarna regresja logistyczna to jeden neuron.\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": [ "source": [
"<img src=\"nn1.png\" />" "<img src=\"nn1.png\" width=\"70%\"/>"
] ]
}, },
{ {
@ -789,7 +803,7 @@
} }
}, },
"source": [ "source": [
"<img src=\"nn2.png\" />" "<img src=\"nn2.png\" width=70%/>"
] ]
}, },
{ {
@ -820,7 +834,7 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "subslide"
} }
}, },
"source": [ "source": [
@ -831,7 +845,7 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "subslide" "slide_type": "fragment"
} }
}, },
"source": [ "source": [
@ -843,7 +857,7 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "subslide"
} }
}, },
"source": [ "source": [