{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Inżynieria uczenia maszynowego\n",
    "### 13 marca 2024\n",
    "# 1. Wprowadzenie"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.1 Specyfika rozwoju systemów wykorzystujących uczenie maszynowe\n",
    "Od czego zależy wynik działania systemu?\n",
    "\n",
    "System \"klasyczny\":\n",
    " - Kod (algorytm)\n",
    " - Środowisko\n",
    " - Dane wejściowe\n",
    " \n",
    "System wykorzystujący uczenie maszynowe:\n",
    " - Kod (algorytm) inferencji\n",
    " - Środowisko\n",
    " - Dane wejściowe\n",
    " - Model:\n",
    "     - Dane trenujące\n",
    "     - Kod trenujący\n",
    "     - Architektura\n",
    "     - Hiperparametry\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "<img style=\"margin: auto\" width=\"50%\" src=\"img/ml-vs-classic.png\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.1 Specyfika rozwoju systemów wykorzystujących uczenie maszynowe\n",
    "* Trenowanie modeli uczenie maszynowego to \"nauka eksperymentalna\".\n",
    "* Nie da się wydedukować optymalnej architektury parametrów i hiperparametrów.\n",
    "* Możemy stawiać hipotezy oparte na intuicji, doświadczeniu (własnym lub cudzym) i analogiach i weryfikować je empirycznie - metodą prób i błędów.\n",
    "* .. albo wykorzystując [AutoML](https://en.wikipedia.org/wiki/Automated_machine_learning)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.1 Specyfika rozwoju systemów wykorzystujących uczenie maszynowe\n",
    "- Więcej zmiennych wpływających na wynik -> trudniejsza kontrola na działaniem\n",
    "- Powolna pętla sprzężenia zwrotnego (slow feedback) - trenowanie może zajmować godziny, dni, miesiące...\n",
    "- ... i kosztować $.\n",
    "- Nie stać nas na błędy wykrywane po dniach obliczeń!\n",
    "- Potrzeba stosowania praktyk i narzędzi, które ułatwią kontrolę nad tymi zmiennymi."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.2 Narzędzia\n",
    "* Kontrola wersji\n",
    "* Systemy ciągłej integracji\n",
    "* Konteneryzacja i virtualne środowiska\n",
    "* Kontrola eksperymentów\n",
    "\n",
    " \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.2.1 Systemy ciągłej integracji\n",
    " - Jenkins <br/><img style=\"height: 50px;\" src=\"img/ci/jenkins.png\"/>\n",
    " - Github Actions <br/><img style=\"height: 50px;\" src=\"img/ci/github-actions.png\"/>\n",
    " - Bamboo  <br/><img style=\"height: 50px;\" src=\"img/ci/bamboo.png\"/>\n",
    " - Circle CI  <br/><img style=\"height: 50px;\" src=\"img/ci/circleci.png\"/>\n",
    " - Team City  <br/><img style=\"height: 50px;\" src=\"img/ci/teamcity.png\"/>\n",
    " - Gitlab CI  <br/><img style=\"height: 50px;\" src=\"img/ci/gitlabci.png\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.2.1 Systemy ciągłej integracji\n",
    "Systemy takie umożliwiają automatyczne:\n",
    " - budowanie\n",
    " - testowanie\n",
    " - wydawanie \n",
    " \n",
    "oprogramowania w stabilnym środowisku.\n",
    "\n",
    "Działają jako aplikacja webowa z graficznym interfejsem, umożliwiająca łatwe zarządzanie i monitorowanie wykonywanych w niej zadań."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.2.2 Konteneryzacja i wirtualne środowiska\n",
    " - Docker </br><img style=\"height: 50px;\" src=\"img/environments/docker.png\"/>\n",
    " - Conda  </br><img style=\"height: 50px;\" src=\"img/environments/conda.png\"/>\n",
    " - Virtual Env </br><img style=\"height: 50px;\" src=\"img/environments/python.png\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.2.2 Konteneryzacja i virtualne środowiska\n",
    "Konteneryzacja (np. za pomocą Dockera) i wirtualne środowiska (takie jak Conda i ViertualEnv) zapewniają:\n",
    "- stabilne\n",
    "- odizolowane\n",
    "- łatwo konfigurowalne\n",
    "środowisko do rozwoju aplikacji."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.2.3 Narzędzia do kontroli eksperymentów\n",
    " - [Sacred](https://sacred.readthedocs.io) </br><img style=\"height: 50px;\" src=\"img/environments/python.png\"/>\n",
    " - DVC </br><img style=\"height: 50px;\" src=\"img/expcontrol/dvc-logo.png\"/>\n",
    " - MLFlow </br><img style=\"height: 50px;\" src=\"img/expcontrol/mlflow-logo.png\"/>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 1.2.3 Narzędzia do kontroli eksperymentów\n",
    "Ułatwiają prowadzenie eksperymentów uczenia maszynowego w sposób:\n",
    " - powtarzalny\n",
    " - kontrolowany\n",
    " - zorganizowany"
   ]
  }
 ],
 "metadata": {
  "author": "Tomasz Ziętkiewicz",
  "celltoolbar": "Slideshow",
  "email": "tomasz.zietkiewicz@amu.edu.pl",
  "kernelspec": {
   "display_name": "Python 3",
   "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.9.12"
  },
  "slideshow": {
   "slide_type": "slide"
  },
  "subtitle": "1.Wprowadzenie[laboratoria]",
  "title": "Inżynieria uczenia maszynowego",
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": false,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": false,
   "toc_window_display": false
  },
  "year": "2021"
 },
 "nbformat": 4,
 "nbformat_minor": 4
}