{ "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 }