This commit is contained in:
Filip Gralinski 2022-07-06 07:58:45 +02:00
parent 1cc2a77fa9
commit 6909b422a4
5 changed files with 24 additions and 9 deletions

View File

@ -1,5 +1,20 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Modelowanie języka</h1>\n",
"<h2> 12. <i>Model języka oparty na rekurencyjnej sieci neuronowej</i> [wykład]</h2> \n",
"<h3> Filip Graliński (2022)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
@ -94,7 +109,7 @@
"Zauważmy, że stosowane tutaj podejście jest tożsame z zastosowaniem funkcji typu `fold`\n",
"w językach funkcyjnych:\n",
"\n",
"![img](./09_Rekurencyjny_model_jezyka/fold.png \"Opis funkcji foldl w języku Haskell\")\n",
"![img](./12_Rekurencyjny_model_jezyka/fold.png \"Opis funkcji foldl w języku Haskell\")\n",
"\n",
"W Pythonie odpowiednik `fold` jest funkcja `reduce` z pakietu `functools`:\n",
"\n"
@ -171,7 +186,7 @@
"rekurencyjną, a czasami szerszą klasę sieci rekurencyjnych\n",
"obejmujących również sieci GRU czy LSTM (zob. poniżej).\n",
"\n",
"![img](./09_Rekurencyjny_model_jezyka/rnn.drawio.png \"Schemat prostego modelu języka opartego na zwykłej sieci rekurencyjnych\")\n",
"![img](./12_Rekurencyjny_model_jezyka/rnn.drawio.png \"Schemat prostego modelu języka opartego na zwykłej sieci rekurencyjnych\")\n",
"\n",
"**Uwaga**: powyższy schemat nie obejmuje już „całego” działania sieci,\n",
" tylko pojedynczy krok czasowy.\n",
@ -258,7 +273,7 @@
"\n",
"$$\\vec{s_t} = \\Gamma_u \\bullet \\vec{\\xi_t} + (1 - \\Gamma_u) \\bullet \\vec{s_{t-1}}.$$\n",
"\n",
"Skąd się biorą bramki $\\Gamma_\\gamma$ i $\\Gamma_u$? Również z poprzedniego stanu i z biężacego wyrazu.\n",
"Skąd się biorą bramki $\\Gamma_\\gamma$ i $\\Gamma_u$? Również z poprzedniego stanu i z bieżącego wyrazu.\n",
"\n",
"$$\\Gamma_\\gamma = \\sigma(W_\\gamma[\\vec{s_{t-1}},E(w_t)] + \\vec{b_\\gamma}),$$\n",
"\n",
@ -302,7 +317,7 @@
"metadata": {},
"source": [
"Komórka pamięci modulowana jest za pomocą bramki zapominania ($\\Gamma_f$) i bramki\n",
"wejścia ($\\Gamma_i$), bramki te określają na ile uwzględniamy, odpowiednio,\n",
"wejścia ($\\Gamma_i$), bramki te określają, na ile uwzględniamy, odpowiednio,\n",
"poprzednią wartość komórki pamięci $\\vec{c_{t-1}}$ i wejście, a\n",
"właściwie wejście w połączeniu z poprzednim stanem:\n",
"\n",
@ -405,7 +420,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.2"
"version": "3.10.5"
},
"org": null
},

View File

@ -53,7 +53,7 @@ Zauważmy, że stosowane tutaj podejście jest tożsame z zastosowaniem funkcji
w językach funkcyjnych:
#+CAPTION: Opis funkcji foldl w języku Haskell
[[./09_Rekurencyjny_model_jezyka/fold.png]]
[[./12_Rekurencyjny_model_jezyka/fold.png]]
W Pythonie odpowiednik ~fold~ jest funkcja ~reduce~ z pakietu ~functools~:
@ -99,7 +99,7 @@ rekurencyjną, a czasami szerszą klasę sieci rekurencyjnych
obejmujących również sieci GRU czy LSTM (zob. poniżej).
#+CAPTION: Schemat prostego modelu języka opartego na zwykłej sieci rekurencyjnych
[[./09_Rekurencyjny_model_jezyka/rnn.drawio.png]]
[[./12_Rekurencyjny_model_jezyka/rnn.drawio.png]]
*Uwaga*: powyższy schemat nie obejmuje już „całego” działania sieci,
tylko pojedynczy krok czasowy.
@ -150,7 +150,7 @@ Ostateczna wartość stanu jest średnią ważoną poprzedniego stanu i bieżąc
$$\vec{s_t} = \Gamma_u \bullet \vec{\xi_t} + (1 - \Gamma_u) \bullet \vec{s_{t-1}}.$$
Skąd się biorą bramki $\Gamma_\gamma$ i $\Gamma_u$? Również z poprzedniego stanu i z biężacego wyrazu.
Skąd się biorą bramki $\Gamma_\gamma$ i $\Gamma_u$? Również z poprzedniego stanu i z bieżącego wyrazu.
$$\Gamma_\gamma = \sigma(W_\gamma[\vec{s_{t-1}},E(w_t)] + \vec{b_\gamma}),$$
@ -170,7 +170,7 @@ niż GRU, jest od niej nieco bardziej skomplikowana.
*** Wzory
Komórka pamięci modulowana jest za pomocą bramki zapominania ($\Gamma_f$) i bramki
wejścia ($\Gamma_i$), bramki te określają na ile uwzględniamy, odpowiednio,
wejścia ($\Gamma_i$), bramki te określają, na ile uwzględniamy, odpowiednio,
poprzednią wartość komórki pamięci $\vec{c_{t-1}}$ i wejście, a
właściwie wejście w połączeniu z poprzednim stanem:

View File

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB