{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Uczenie maszynowe\n",
    "# 15. Uczenie przez wzmacnianie i systemy dialogowe"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 15.1. Uczenie przez wzmacnianie"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Paradygmat uczenia przez wzmacnianie"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "![Rys. 15.1. Paradygmaty uczenia maszynowego](paradygmaty_um.png \"Rys. 15.1. Paradygmaty uczenia maszynowego\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "* Paradygmat uczenia przez wzmacnianie naśladuje sposób, w jaki uczą się dzieci.\n",
    "* Interakcja ze środowiskiem."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "* W chwili $t$ agent w stanie $S_t$ podejmuje akcję $A_t$, następnie obserwuje zmianę w środowisku w stanie $S_{t+1}$ i otrzymuje nagrodę $R_{t+1}$ (rys. 13.2)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "![Rys. 15.2. Agent i środowisko](agent_i_srodowisko.png \"Rys. 15.2. Agent i środowisko\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "* Celem jest znalezienie takiej taktyki wyboru kolejnej akcji, aby zmaksymalizować wartość końcowej nagrody. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Zastosowanie uczenia przez wzmacnianie:\n",
    "* strategie gier\n",
    "* systemy dialogowe\n",
    "* sterowanie"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Uczenie przez wzmacnianie jako proces decyzyjny Markowa"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Paradygmat uczenia przez wzmacnianie można formalnie opisać jako proces decyzyjny Markowa:\n",
    "$$ (S, A, T, R) $$\n",
    "gdzie:\n",
    "* $S$ – skończony zbiór stanów\n",
    "* $A$ – skończony zbiór akcji\n",
    "* $T \\colon A \\times S \\to S$ – funkcja przejścia która opisuje, jak zmienia się środowisko pod wpływem wybranych akcji\n",
    "* $R \\colon A \\times S \\to \\mathbb{R}$ – funkcja nagrody"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Albo, jeśli przyjmiemy, że środowisko zmienia się w sposób niedeterministyczny:\n",
    "$$ (S, A, P, R) $$\n",
    "gdzie:\n",
    "* $S$ – skończony zbiór stanów\n",
    "* $A$ – skończony zbiór akcji\n",
    "* $P \\colon A \\times S \\times S \\to [0, 1]$ – prawdopodobieństwo przejścia\n",
    "* $R \\colon A \\times S \\times S \\to \\mathbb{R}$ – funkcja nagrody"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Na przykład, prawdopodobieństwo, że akcja $a$ spowoduje przejście ze stanu $s$ do $s'$:\n",
    "$$ P_a(s, s') \\; = \\; \\mathbf{P}( \\, s_{t+1} = s' \\, | \\, s_t = s, a_t = a \\,) $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Strategia\n",
    "\n",
    "* Strategią (*policy*) nazywamy odwzorowanie $\\pi \\colon S \\to A$, które bieżącemu stanowi przyporządkuje kolejną akcję do wykonania.\n",
    "* Algorytm uczenia przez wzmacnianie będzie starał się zoptymalizować strategię tak, żeby na koniec otrzymać jak najwyższą nagrodę.\n",
    "* W chwili $t$, ostateczna końcowa nagroda jest zdefiniowana jako:\n",
    "$$ R_t := r_{t+1} + \\gamma \\, r_{t+2} + \\gamma^2 \\, r_{t+3} + \\ldots = \\sum_{k=0}^T \\gamma^k \\, r_{t+k+1} \\; , $$\n",
    "gdzie $0 < \\gamma < 1$ jest czynnikiem, który określa, jak bardzo bierzemy pod uwagę nagrody, które otrzymamy w odległej przyszłości."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Algorytm szuka optymalnej strategii metodą prób i błędów – podejmując akcje i obserwując ich wpływ na środowisko. W podejmowaniu decyzji pomoże mu oszacowanie wartości następujących funkcji:\n",
    "* Funkcja wartości ($V$) odzwierciedla, jak atrakcyjne w dalekiej perspektywie jest przejście do danego stanu:\n",
    "$$ V_{\\pi}(s) = \\mathbf{E}_{\\pi}(R \\, | \\, s_t = s) $$\n",
    "* Funkcja $Q$ odzwierciedla, jak atrakcyjne w dalekiej perspektywie jest przejście do danego stanu przez podjęcie danej akcji:\n",
    "$$ Q_{\\pi}(s, a) = \\mathbf{E}_{\\pi}(R \\, | \\, s_t = s, a_t = a) $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Algorytmy uczenia przez wzmacnianie\n",
    "* Programowanie dynamiczne (DP):\n",
    "  * *bootstrapping* – aktualizacja oczacowań dla danego stanu na podstawie oszacowań dla możliwych stanów następnych\n",
    "* Metody Monte Carlo (MC)\n",
    "* Uczenie oparte na różnicach czasowych (*temporal difference learning*, TD):\n",
    "  * *on-policy* – aktualizacja bieżącej strategii:\n",
    "    * SARSA (*state–action–reward–state–action*)\n",
    "  * *off-policy* – eksploracja strategii innych niż bieżąca:\n",
    "    * *Q-Learning*\n",
    "    * *Actor–Critic*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Przykłady\n",
    "\n",
    "* Odwrócone wahadło (*cart and pole*): https://www.youtube.com/watch?v=46wjA6dqxOM\n",
    "* Symulacja autonomicznego samochodu: https://www.youtube.com/watch?v=G-GpY7bevuw"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 15.2. Systemy dialogowe"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Rodzaje systemów dialogowych\n",
    "* Chatboty\n",
    "* Systemy zorientowane na zadania (*task-oriented systems*, *goal-oriented systems*):\n",
    "  * szukanie informacji\n",
    "  * wypełnianie formularzy\n",
    "  * rozwiązywanie problemów\n",
    "  * systemy edukacyjne i tutorialowe\n",
    "  * inteligentni asystenci"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Architektura systemu dialogowego\n",
    "\n",
    "(rys. 15.3)\n",
    "\n",
    "![Rys. 15.3. Architektura systemu dialogowego](system_dialogowy.png \"Rys. 15.3. Architektura systemu dialogowego\")"
   ]
  }
 ],
 "metadata": {
  "author": "Paweł Skórzewski",
  "celltoolbar": "Slideshow",
  "email": "pawel.skorzewski@amu.edu.pl",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "lang": "pl",
  "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"
  },
  "subtitle": "15.Uczenie przez wzmacnianie i systemy dialogowe[wykład]",
  "title": "Uczenie maszynowe",
  "vscode": {
   "interpreter": {
    "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
   }
  },
  "year": "2021"
 },
 "nbformat": 4,
 "nbformat_minor": 4
}