Digitální technologie představují širokou škálu elektronických zařízení a systémů, pomocí kterých můžeme komunikovat a zpracovávat informace. Tato sekce nabízí přehled hlavních principů digitálních technologií rozdělený do několika oblastí:

Aby technologie byly v našem životě přínosné, musíme nejen rozumět jejich principům, ale také se správně používat. Tomu se věnuje sekce použití technologií.

Hardware zahrnuje všechny fyzické součásti počítačů, jako jsou procesor, paměť, monitor nebo klávesnice. Hardware tedy představuje prvky počítače, na které si můžeme „sáhnout“. Oproti tomu software je nehmotný, označuje instrukce, které řídí hardware a umožňují uživatelům provádět různé úkoly. Hardwarové a softwarové součásti spolu spolupracují. Abychom mohli počítače používat, potřebujeme oboje.

Dílčí podtémata týkající se hardwaru jsou:

  • Typy počítačů: Existuje řada různých typů počítačů a každý se hodí k jinému účelu.
  • Historie počítačů: Povědomí o tom, jak počítače vyvíjely, nám může pomoct lépe pochopit současné počítače a představit si, jaké by mohly být v budoucnosti.
  • Vstupní a výstupní zařízení: Pomocí těchto zařízení s počítači komunikujeme, patří mezi ně klávesnice, myš, monitor, tiskárna nebo reproduktory.
  • Procesor a architektura: Procesor je nejdůležitější součást počítače řídící ostatní hardwarové součásti.
  • Paměť: Stejně jako lidé i počítače ukládají informace do paměti, počítačových pamětí však existuje více druhů a každá se hodí k něčemu jinému.

Další hardwarové součástky se používají v počítačových sítích.

Počítače se ve světě vyskytují v mnoha formách.

V domácnostech a počítačích se často setkáme s PC (personal computer, osobní počítač). Nepřenosnému PC se říká stolní počítač, někdy také desktop. Stolní počítač se obvykle skládá z počítačové skříně, ke které připojujeme příslušenství jako monitor, klávesnici, reproduktory apod. Počítačová skříň, která se staví na výšku a často pod stůl, se nazývá tower. Existují i kompaktnější verze stolních počítačů — například all-in-one PC, kde je všechen hardware vestavěný přímo v monitoru.

Přenosnému osobnímu počítači se říká notebook. Ten má všechen hardware i příslušenství vestavěné přímo do svého těla. Přenosné počítače mívají navíc akumulátor (baterii), abychom je mohli používat, i když nejsou připojené do elektrické sítě. Smartphony (chytré telefony) a tablety jsou také přenosné počítače. Mívají dotykovou obrazovku a jsou poměrně malé. Ještě menší než smartphony jsou chytré hodinky (smartwatch), které si můžeme připnout na zápěstí a například propojit s chytrým telefonem pro pohodlnější ovládání.

Mainframe je velký a velmi výkonný počítač, který často používají firmy pro výpočetně náročné operace. Superpočítače jsou mnohonásobně výkonnější než osobní počítače i mainframy, mohou zabírat celé haly a většinou provádějí náročné vědecké výpočty. Server je počítač, který je připojený k počítačové síti (obvykle k internetu) a poskytuje služby jiným počítačům, které si je vyžádají. Například může zobrazovat webové stránky nebo poskytovat internetové úložiště.

Mnoho zařízení je dnes také ovládáno počítači. Těmto počítačům se říká vestavěné systémy a obvykle jsou zkonstruované přímo pro ovládání daného zařízení a vestavěné uvnitř. Nachází se například v moderních autech, letadlech, chytrých spotřebičích apod. Na výrobních linkách se používají CNC stroje (computer numerical control), které řídí počítač podle nějakého počítačového programu. Pomáhají zautomatizovat, a tedy zefektivnit výrobu.

V dávné historii si lidé ulehčovali počítání například s kuličkovými počítadly (abakus) nebo logaritmickými pravítky. První programovatelný stroj navrhl Charles Babbage v 19. století.

Za druhé světové války byl počítač použit k rozluštění německé šifry Enigma. Na tom se podílel i Alan Turing, který později vymyslel teoretický model počítače. Prakticky využívanou architekturu počítače (po svém autorovi nazývanou von Neumannova), která je používaná dodnes, navrhl John von Neumann.

Vývoj počítačů se často rozděluje do tzv. generací — vývojových fází, které se odlišují součástkami, ze kterých byly počítače složené, jejich rychlostí i použitím.

V 1. generaci velkou část funkčnosti počítače zajišťovaly elektronky. V té době byly počítače pomalé a poruchové, zabíraly velký prostor (typicky celé místnosti) a pro svůj běh vyžadovaly značné množství energie. Nejznámějším zástupcem této generace je počítač ENIAC, který byl postaven ve 40. letech 20. stol. v USA. Na světě bylo tehdy jen velmi málo počítačů, proto se používaly převážně pro náročné matematické výpočty pro armádu nebo pro výzkum. Informace jim byly předávány na děrných štítcíchděrných páskách.

Ve 2. generaci se objevily tranzistory, polovodičové součástky, které v počítačích nahradily elektronky a umožnily tak zvýšení spolehlivosti a rychlosti, zatímco snížily poruchovost. V 60. letech 20. stol. se začaly objevovat sálové počítače, které používaly například firmy pro vedení účetnictví nebo pro matematické výpočty.

Ve 3. generaci se díky integrovaným obvodům začaly počítače zmenšovat a zvyšovat svůj výkon. Integrovaný obvod sdružuje dohromady mnoho tranzistorů. Počítače se běžně nacházely ve výpočetních střediscích, kde bylo možné pronajmout si počítačový čas.

Ve 4. generaci vznikly mikroprocesory, procesory tvořené jediným integrovaným obvodem, které umožnily počítače ještě více zmenšit. Objevily se osobní počítačegrafickým rozhraním a počítače se tak mohly rozšířit i do domácností. Počátky internetu sice sahají až do 50. let 20. století, koncem 80. let 20. století se k němu však připojovalo více a více počítačů a vznikaly první webové stránky. (Nejen) díky internetu a pokračujícímu zmenšování cen i velikostí počítačů se počítače více a více objevovaly v běžném životě. Možnosti jejich využití se rozšířily z čistě matematických výpočtů až do širokého spektra, které známe dnes.

Vstupní a výstupní zařízení

Přejít ke cvičením na toto téma »

Vstupní zařízení je hardware, pomocí kterého počítač přijímá data. Výstupní zařízení je hardware, do kterého počítač zapisuje či zobrazuje data.

Příklady vstupních zařízení

  • klávesnice
  • myš
  • joystick
  • touchpad
  • scanner
  • kamera
  • mikrofon
  • dotykový displej
  • akcelerometr
  • GPS

Příklady výstupních zařízení

  • monitor
  • dataprojektor
  • reproduktor
  • sluchátka
  • tiskárna
  • plotter

Typy tiskáren

Jehličková tiskárna k tisku používá tiskovou hlavu s malými jehličkami, které přes barvicí pásku otiskuje na papír. Je levná na pořízení i na provoz, ale tiskne pomalu a nekvalitně. Využívá se například pro označování jízdenek v hromadné dopravě.

Inkoustová tiskárna tiskne pomocí vystřelování miniaturních inkoustových kapek na papír. Její pořizovací cena je nízká a tiskne kvalitně, i když ne příliš rychle. Inkoustové náplně, nazývané cartridge, jsou však poměrně drahé, takže provoz tiskárny může být nákladnější. Často se používá v domácnostech nebo v menších kancelářích.

Laserová tiskárna kreslí obraz laserem na světlocitlivý válec. Na něj se poté nanese barva, která zůstane pouze na laserem ozářených místech, a válec se následně otiskne na papír. Je drahá na koupi, ale provoz na rozdíl od inkoustové tiskárny nákladný není. Tiskne velmi rychle a kvalitně, proto je dobře využitelná na místech, kde se tisknou velké objemy stránek – například v kancelářích. Barva používaná v laserových tiskárnách se nazývá toner.

Komunikační rozhraní (porty)

Vstupní a výstupní zařízení lze k počítači připojit přes komunikační rozhraní, kterým se také říká porty. Často se setkáme s následujícími typy:

  • USB je nyní pravděpodobně nejčastěji používané komunikační rozhraní. Je velmi univerzální, je možné přes něj připojit například klávesnici, myš, tiskárnu, fotoaparát nebo paměťové zařízení.
  • PS/2 se v minulosti používal k připojení klávesnice a myši, ale nyní je již téměř nahrazen USB.
  • HDMI umí přenášet digitální obrazový a zvukový signál. Připojuje se přes něj monitor, televize, nebo jiné obrazové zařízení.
  • VGA také přenáší obraz, ale na rozdíl od HDMI analogově. V současnosti se už příliš nepoužívá.

Důležité součásti počítačové architektury jsou:

CPU (central processing unit) –⁠ centrální procesorová jednotka. Nazývá se také procesor. Umí zpracovávat základní strojové instrukce, ze kterých lze složit veškerou funkčnost, kterou potřebují počítačové programy k fungování. V podstatě se tak stará o celkový chod počítače. Součásti procesoru jsou aritmeticko-logická jednotka, řadič a registry. Rychlost procesoru určuje mimo jiné taktovací frekvence, která udává, kolik operací procesor udělá za sekundu. Frekvence se udává v jednotkách GHz (gigahertz). V současnosti je zrychlování CPU složité, takže se většího výkonu dosahuje použitím více procesorových jader v jednom pouzdře. Tyto procesory se nazývají vícejádrové a jsou efektivní, protože dokáží zpracovávat více procesů najednou - paralelně.

GPU (graphics processing unit) –⁠ grafický procesor. Grafický procesor je součást grafické karty. Ta přijímá data o tom, co je potřeba zobrazit na monitoru, a převádí je na obrazový výstup pro monitor. Grafický procesor provádí rychlé výpočty, které jsou pro převod dat na obraz potřeba. Grafická karta může být integrovaná nebo dedikovaná. Integrovaná karta je typicky vestavěná součást CPU, je to méně výkonná, ale levnější možnost. Dedikovaná karta se často dodává odděleně, je dražší, ale výkonnější – je potřeba například pro moderní počítačové hry se složitou grafikou.

ALU (arithmetic logic unit) –⁠ aritmeticko-logická jednotka. Je to součást procesoru, která provádí aritmetické a logické operace.

Registry jsou velmi malá a velmi rychlá paměťová úložiště v procesoru. Procesor si v nich udržuje data, která právě zpracovává.

Sběrnice zajišťuje přenos dat. Sběrnic je mnoho typů. Můžou přenášet data jak uvnitř počítače (např. do grafické karty), tak mezi zařízeními (např. USB je také typ sběrnice).

Cache je velmi rychlá, ale poměrně malá paměť, která pomáhá zrychlovat běh počítače. Protože procesor je velmi rychlý v porovnání s pamětí, pokaždé, když si potřebuje načíst nějaká data z paměti, musí dlouho čekat. Aby se chod počítače tolik nezpomaloval, procesor si do cache ukládá často používaná data, která odtud může načíst rychleji. Cache je rychlejší než operační paměť, ale přesto nestačí na procesor a registry, takže k nějakému zpomalení stále dochází.

Síťová karta zprostředkovává komunikaci počítače s počítačovou sítí – např. s internetem.

Zvuková karta zajišťuje vstup a výstup zvukových dat z a do počítače.

Procesor při své práci komunikuje s různými typy paměti.

Stejně jako lidská paměť i ta počítačová slouží k uchování informací. Pro různé účely se používají různé typy pamětí, které můžeme označovat podle účelu nebo technologie.

Dlouhodobá paměť slouží k dlouhodobému uložení dat – například fotografií, filmů, nebo zdrojových kódů počítačových programů. Je to to úložiště, ke kterému máme přístup v Průzkumníku souborů. Data se v ní udrží nezávisle na tom, jestli je připojená k elektřině.

V operační paměti si počítač ukládá data a stavy procesů, se kterými právě pracuje. Je mnohem rychlejší jež dlouhodobá paměť, takže pro urychlení běhu počítače se data z dlouhodobé paměti dočasně nahrávají do operační paměti, když je s nimi potřeba pracovat. Jako uživatelé k ní nemáme přímý přístup, pracuje s ní pouze procesor. Často se realizuje jako paměť typu RAM, takže po odpojení elektrického proudu se z ní všechna data vymažou.

Cache paměť je velmi rychlá, ale poměrně malá paměť, která pomáhá zrychlovat běh počítače. Protože procesor je velmi rychlý v porovnání s operační pamětí, pokaždé, když si potřebuje načíst nějaká data z paměti, musí dlouho čekat. Aby se chod počítače tolik nezpomaloval, procesor si do cache ukládá často používaná data, která odtud může načíst rychleji. Cache je rychlejší než operační paměť, ale na procesor a registry nestačí. Říká se jí také vyrovnávací paměť nebo mezipaměť.

RAM (random access memory) umožňuje rychlý zápis i čtení, a proto se používá jako krátkodobá (například operační) paměť. Její název znamená, že v ní lze přistoupit okamžitě na libovolnou adresu. Ke svému fungování potřebuje elektrický proud, po jeho odpojení všechna data z paměti zmizí.

ROM (read only memory) česky znamená paměť pouze pro čtení, tedy do ní není možné data zapisovat, ale pouze je číst. Používá se jako dlouhodobé úložiště, data v ní zůstanou i po odpojení elektrického proudu.

Flash paměť je podtyp ROM, který ale lze přepisovat – jde do ní tedy na rozdíl od klasické ROM ukládat nová data. Zápis i čtení probíhá pomocí elektrického proudu. V současnosti je to velmi rozšířený typ dlouhodobého úložiště, používá se například v SSD, flash discích nebo paměťových kartách.

HDD (hard disk drive) slouží jako dlouhodobá paměť v počítači, často se nazývá také pevný disk. Data se ukládají na magnetický otočný disk. Oproti SSD, jeho současné konkurenci mezi dlouhodobými úložišti, je levnější a mívá větší kapacitu.

SSD (solid state drive) je další typ dlouhodobého úložiště. Na rozdíl od HDD je tvořený flash pamětí. Díky tomu je odolnější, protože nemá žádné pohyblivé části, a také rychlejší. Přestože jeho poměr ceny a kapacity je horší než u HDD, v současnosti pevný disk díky výše zmíněným výhodám pomalu nahrazuje.

CD a DVD jsou přenosná dlouhodobá úložiště ve tvaru disku. Data se u nich zaznamenávají a čtou opticky, pomocí laseru.

Paměťová karta je malé přenosné dlouhodobé úložiště tvořené flash pamětí. Má několik různých typů, používá se například ve fotoaparátech nebo mobilních telefonech.

Velikost paměti se udává v bajtech (B).

Paměť může být volatilní nebo nevolatilní. Z volatilní paměti všechna data zmizí, když se odpojí od elektrického proudu. Volatilní je cache, RAM a operační paměť (ta se totiž realizuje jako RAM). V nevolatilní paměti všechna data zůstávají nezávisle na připojení k elektrickému zdroji, ale většinou bývá pomalejší než volatilní. Používá se většinou jako dlouhodobé úložiště, její zástupci jsou tedy ROM, flash paměť, HDD a SSD.

Pojem software označuje programy, které počítač provádí. Existuje řada různých typů softwaru, např. kancelářské aplikace, prohlížeče internetu, počítačové hry, grafické nástroje. Pro orientaci v dostupných programech je dobré mít jasno ve vlastnostech softwaru, např. jde o desktopový či mobilní, otevřený či proprietární. Tyto znalosti nám pomohou lépe vybrat software, který se hodí pro naše potřeby.

Programy často pracují se soubory, přičemž existuje celá řada typů souborů. Jejich znalost nám opět pomáhá lépe volit prostředky, se kterými chceme pracovat.

Klíčovým typem softwaru je operační systém, který zajišťuje základní fungování počítače a umožňuje spouštění dalších programů.

Software: typy aplikací, příklady

Přejít ke cvičením na toto téma »

Existuje řada různých typů softwaru, pro každý typ pak máme k dispozici na výběr z více konkurenčních produktů. Mezi výrazné typy softwaru patří následující.

Prohlížeče webových stránek, které umožňují uživatelům prohlížet a interagovat s webovými stránkami. Příklady zahrnují Google Chrome, Mozilla Firefox, Microsoft Edge.

Textové procesory umožňují uživatelům psát a editovat textové soubory. Příklady zahrnují Microsoft Word, LibreOffice Writer, Dokumenty Google.

Tabulkové editory umožňují uživatelům vytvářet, editovat a analyzovat tabulky a data v nich uložená. Příklady zahrnují Microsoft Excel, LibreOffice Calc, Tabulky Google.

Grafické editory umožňují uživatelům vytvářet a editovat grafiku a obrázky. Příklady zahrnují Adobe Photoshop, GIMP, Inkscape.

Programovací jazyky umožňují vývojářům vytvářet softwarové aplikace. Příklady zahrnují Python, Java, C++. Pro přípravu programů používají programátoři vývojová prostředí, např. Visual Studio Code, PyCharm, Eclipse. Pro vývoj počítačových her se používají specializované herní enginy, např. Unity, Unreal Engine.

Systémový software umožňuje počítači fungovat správně. Příklady zahrnují operační systémy jako Windows, macOS, Linux. Dále do této kategorie můžeme zařadit například antivirové programy.

Programy provádějící určitou užitečnou činnost se označují jako aplikace. Desktopové aplikace jsou určené pro stolní počítače či notebooky. Mobilní aplikace jsou vyvíjené pro smartphony, jsou uzpůsobené např. dotykovému ovládání. Desktopové i mobilní aplikace je za účelem použití zpravidla nutné instalovat na úložiště zařízení. Naopak webové (či cloudové) aplikace zpravidla běží v internetovém prohlížeči.

Otevřený software je k dispozici i v podobě zdrojových kódů. Svobodný software mohou uživatelé používat k libovolnému účelu. Otevřený software mnohdy bývá zároveň svobodný, často bývá vyvíjený komunitou dobrovolníků. Příkladem takového softwaru je např. Linux, Gimp či LibreOffice. Podstatná část infrastruktury internetu je závislá na otevřeném/svobodném softwaru.

Proprietární software zdrojové kódy nemá k dispozici a jeho použití bývá omezeno licencí (tzv. End User License Agreement = EULA). Proprietární software obvykle zároveň bývá komerční, autor/vydavatel jej prodává za účelem zisku (nyní často formou předplatného). Příkladem komerčního proprietárního softwaru jsou Windows, Microsoft Office či aplikace v rámci Adobe Creative Cloud.

Používání komerčního softwaru bez zakoupení licence je nelegální. Trial verze softwaru lze používat zdarma po určitou dobu, obvykle za účelem vyzkoušení. Freeware je většinou proprietární software, který je možné používat zdarma.

Aplikace bývají dostupné v různých verzích. Novější verze má zpravidla vyšší číselné označení (např. aplikace verze 1.1 bude novější než verze 0.8). Povýšení na novou verzi je aktualizace či upgrade. V softwaru se mohou objevit nezamýšlené chyby, tzv. bugy. Testovací verze softwaru, která se blíží dokončení, se označuje jako betaverze. Software se v současnosti distribuuje zejména přes internet.

Soubory mohou obsahovat různé typy dat. Pro uložení určitých dat se hodí konkrétní formát souboru. Ten často bývá popisován příponou názvu souboru. Jako příklad mějme soubor poznamky.txt: poznamky je samotný název souboru, přípona txt vyjadřuje, že jde o soubor s prostým textem.

Dále uvádíme příklady různých formátů:

Zkratka Popis
jpg bitmapový obrázek se ztrátovou kompresí
bmp bitmapový obrázek bez komprese
png bitmapový obrázek s bezztrátovou kompresí
svg vektorový obrázek
docx, doc, odt textový dokument
xlsx, xls, ods dokument tabulkového procesoru
pptx, ppt, odp prezentace
txt prostý text (bez formátování)
pdf dokument, na různých zařízeních se zobrazuje jednotně
xml dokument se strukturovanými informacemi opatřenými značkami (tagy)
wav zvuk bez komprese
mp3, ogg, flac zvuk s kompresí
zip, rar, 7z archiv (obsahuje komprimované soubory)
csv obsahuje jednoduchá tabulková data
exe spustitelný program pro Windows
html soubor se zdrojovým kódem webové stránky

Operační systém je program, který se obvykle spouští krátkou dobu po zapnutí počítače. Zprostředkovává spouštění dalších programů/aplikací (ty mohou být určené pro konkrétní operační systém). Programy v rámci operačního systému běží jako jednotlivé procesy, soudobé operační systémy obvykle podporují běh více procesů zároveň (multitasking).

Prostřednictvím operačního systému mohou aplikace komunikovat s hardwarem (vizte schéma níže). Operační systém dále zajišťuje organizaci dat na úložišti a přístup k nim, obvykle umožňuje pracovat s uživatelskými účty či právy uživatelů. To, že mnoho činností zajišťuje operační systém, zjednodušuje do určité míry vývoj programů (aplikací).

Operační systémy se původně ovládaly zadáváním příkazů do příkazového řádku. V současnosti obvykle mají grafické uživatelské rozhraní (GUI), které umožňuje např. ovládání klávesnicí a myší či dotykem.

Některé aplikace bývají zahrnuty v samotné instalaci operačního systému, např. internetový prohlížeč, prohlížeč souborů či základní ovladače hardwaru.

Mezi běžné desktopové operační systémy (určené zejména pro stolní počítače, notebooky) patří:

Název operačního systému Vyvíjí jej Další informace
Windows Microsoft Nejrozšířenější systém na osobních počítačích. Je proprietární.
Linux komunita vývojářů + různé společnosti Jedná se o svobodný a otevřený software.
macOS Apple Oficiálně lze spustit pouze na počítačích Mac.

Mezi běžné mobilní operační systémy náleží:

Název operačního systému Vyvíjí jej Další informace
Android Google V současnosti nejrozšířenější, výrobci jej uzpůsobují svým zařízením.
iOS Apple Pouze pro zařízení značky Apple.

Operační systém jako každý další software může obsahovat bezpečnostní chyby. Ty jsou zpravidla průběžně opravovány, bezpečnostní záplaty (a případně různá vylepšení či změny) se dostávají na zařízení uživatele prostřednictvím aktualizací.

Počítačové sítě jsou skupiny počítačů a dalších zařízení, které jsou vzájemně propojené , aby si mohly vzájemně posílat informace a sdílet zdroje (například tiskárny). Tyto sítě mohou být propojeny různými způsoby, například kabely, Wi-Fi nebo satelitním připojením. Počítačové sítě umožňují rychlé sdílení informací i na velké vzdálenosti.

Téma počítačových sítí můžeme rozdělit na několik oblastí:

  • Obecné principy – základní síťové architektury, topologie, rozdělení sítí podle velikosti, důležité pojmy (pakety, VPN, fireware)
  • Protokoly – pravidla, která určují provoz na sítích (TCP, UDP, IP, WiFi, Bluetooth a další)
  • Hardware – síťová zařízení a přenosová média, která provoz na sítích fyzicky zajišťují

Počítačové sítě: obecné principy

Přejít ke cvičením na toto téma »

Počítačové sítě propojují dohromady počítače a umožňují jim vyměňovat si mezi sebou informace.

Síťové architektury

Síťová architektura je návrh sítě, který určuje, jak probíhá komunikace mezi prvky sítě. Nejčastější jsou dvě architektury:

V klient-server síti mohou zařízení mít dvě různé úlohy. Server poskytuje služby, veškerá komunikace v síti jde přes něj. Typicky jde o velký počítač, který například patří nějaké firmě. Klienti jsou běžné uživatelské počítače, které si žádají služby od serveru. Když si například chceme zobrazit webovou stránku, náš počítač (klient) pošle serveru, který danou stránku provozuje, žádost o zaslání obsahu stránky.

V peer-to-peer síti jsou si všechny prvky rovny. Všichni peerové si mohou vyžádat služby od ostatních a na oplátku některé služby poskytují.

Topologie

Skutečná fyzická podoba zapojení prvků do sítě se nazývá topologie. Obvyklé typy topologií jsou:

  • kruhová
  • hvězdicová
  • stromová
  • sběrnicová

Ve skutečných sítích se tyto topologie často kombinují.

Rozdělení sítí podle velikosti

Sítě lze také rozlišovat podle velikosti a rozsahu. Zde jsou některé vybrané typy:

  • LAN (local area network) – síť pokrývající malé území, například jednu budovu
  • WLAN (wireless local area network) – LAN s bezdrátovým přenosem dat
  • WAN (wide area network) – síť, která obsluhuje velké území

Další pojmy

Data se po síti nejčastěji posílají v oddělených balíčcích, nazývaných pakety. Pakety se skládají z hlavičky, která obsahuje řídící informace, a z vlastních dat.

Největší světovou sítí je internet. Je tvořený propojením mnoha menších sítí, které patří soukromým provozovatelům. Nemá tak žádnou centrální organizaci ani pevně danou strukturu. Většina komunikace po internetu probíhá pomocí protokolů TCP a IP.

VPN (virtual private network) je virtuální soukromá síť. VPN zajišťuje soukromou a zabezpečenou komunikaci mezi několika počítači v rámci internetu, který obecně zabezpečený není.

Firewall zajišťuje bezpečnější komunikaci mezi sítěmi. Kontroluje data procházející skrz a pokud mají podezřelý obsah, nepustí je dál.

Počítačové sítě: protokoly

Přejít ke cvičením na toto téma »

Provoz v počítačových sítích probíhá podle pravidel protokolů. Protokolů existuje mnoho, každý má určitou vlastní funkci.

TCP a UDP řídí přenos dat od uživatele k příjemci. UDP posílá data bez zajištění spolehlivosti, ale zato velmi rychle. Hodí se například pro přenos videohovorů, kde potřebujeme okamžitě reagovat. Kvůli nespolehlivosti UDP se však musíme smířit s občasnou horší kvalitou dat. TCP umí zajistit, že data dorazí všechna a bez chyb, avšak za cenu menší rychlosti. V současnosti přenáší většinu dat na internetu - například se využívá pro načítání webových stránek, posílání e-mailů nebo stahování souborů.

IP zajišťuje směrování, tedy hledá cestu, kudy data skrz síť půjdou. Kam doručit data zjišťuje podle IP adresy, která jednoznačně určuje každý počítač v síti. V současnosti existují dvě funkční verze protokolu: IPv4 a IPv6.

Protože IP adresy se lidem těžko pamatují, nahrazují se doménovými jmény, která bývají například součástí URL. Doménová jména jsou organizována do hierarchicky rozloženého systému, ve kterém je lze snadněji najít. Protokol DNS dokáže na dotaz z doménového jména zjistit IP adresu.

WiFi a Bluetooth jsou síťové protokoly, které přenáší data vzduchem. WiFi často slouží k vybudování malých sítí a připojování přenosných zařizení k internetu. Bluetooth se obvykle používá k propojení zařízení a přenosu dat mezi nimi na krátkou vzdálenost.

Některé další protokoly, se kterými se můžeme setkat:

  • DHCP umožňuje automatickou konfiguraci počítače do sítě, mimo jiné umí přidělit IP adresu.
  • HTTP komunikuje s WWW servery a umožňuje tak zobrazení WWW stránek.
  • FTP dokáže přenášet soubory mezi počítači.
  • SMTP posílá e-mailové zprávy.
  • IMAP a POP3 umí zprostředkovat přístup k emailové schránce - například pro čtení e-mailů.
  • IRC umožňuje posílání krátkých zpráv (chatování).
  • SSH zajišťuje soukromé spojení mezi dvěma počítači.

Počítačové sítě: hardware

Přejít ke cvičením na toto téma »

Hardwarová část počítačových sítí je tvořena síťovými zařízeními, která jsou propojena přenosovými médii.

Síťová karta je součást hardwaru počítače a zajišťuje komunikaci s počítačovou sítí. Od počítače si bere data pro poslání do sítě, balí je do paketů a odesílá. Také přijímá ze sítě pakety a rozbalená data předává počítači. Síťová karta je v síti jednoznačně identifikovaná MAC adresou.

Síťová zařízení

Protože signál se může při cestě přenosovým médiem zeslabit nebo poškodit, používá se opakovač. Ten opraví a zesílí přijímaný signál a následně ho pošle dál.

Hub umožňuje spojení více kabelů a dokáže tak rozvětvovat síť do více směrů. Data, která přes něj procházejí, nijak nefiltruje, pouze je rozesílá dál.

Switch a bridge spojují menší segmenty sítě. Udržují si tabulku MAC adres zařízení ve svém okolí a posílají přicházející data jen do směrů, kde se nachází jejich příjemci. Zatímco bridge propojuje pouze 2 části sítě, switch jich umí spojit více najednou.

Router propojuje větší části sítí (nebo celé sítě) dohromady. Může například připojovat lokální síť k internetu. Zajišťuje směrování dat - pro příchozí pakety se snaží najít co nejkratší cestu k cílové IP adrese.

Přenosová média

Přenosové médium může být například vzduch nebo kabel. V počítačových sítích se používají například tyto druhy kabelů:

Optický kabel se skládá z mnoha optických vláken. Signál se jím posílá v podobě světla. Přenos skrz optické kabely je velmi rychlý a málo ztrátový, jsou vhodné pro přenosy na velké vzdálenosti.

Kroucená dvojlinka a koaxiální kabel jsou tvořené kovovým vodičem. Často se používají k budování lokálních sítí.

Zapojení síťového kabelu umožňuje konektor RJ-45.

Umělá inteligence se často označuje zkratkou AI (z anglického artificial intelligence). Jde o odvětví počítačových věd, které se zabývá vytvářením inteligentních strojů schopných provádět úkoly, které by obvykle vyžadovaly lidskou inteligenci. Umělá inteligence zahrnuje například porozumění jazyku, rozpoznávání obrazů a řešení složitých problémů jako je řízení auta.

Oblast umělé inteligence je komplikovaná a zahrnuje mnoho pokročilých technik. V rámci Umíme informatiku nabízíme základní přehled dělený do následujících oblastí:

Samostatné větší téma je pak věnováno strojovému učení, což je oblast umělé inteligence, která se výrazně rozvinula v posledních letech a nyní hraje důležitou roli v mnoha aplikacích.

Základy umělé inteligence

Přejít ke cvičením na toto téma »

Umělá inteligence (AI, angl. artificial intelligence) označuje programy řešící složité problémy (např. hraní šachů nebo řízení auta) a také obor informatiky zabývající se vytvářením těchto programů. Umělá inteligence nejsou jen roboti, častěji jde o počítačový program bez fyzické podoby. Umělá inteligence má využití všude, kde existují složité problémy, například ve zpracování přirozeného jazyka, robotice a počítačovém vidění.

Vymezení umělé inteligence

Neexistuje jednotná definice umělé inteligence. Někdy se za umělou inteligenci považují programy, které se chovají jako lidé, to je ale omezující v tom, že lidé se často nechovají inteligentně, dělají chyby a některé složité problémy řešit neumí. Vhodnější je proto považovat za umělou inteligenci programy, které se chovají inteligentně (racionálně). Inteligentní chování znamená, že se program snaží maximalizovat očekávaný užitek (např. pravděpodobnost výhry v šachu).

Turingův test

V polovině 20. století navrhl Alan Turing známý test na rozpoznání umělé inteligence: Pokud nejsme při písemné komunikaci schopni rozlišit, zda si povídáme s člověkem nebo programem, pak můžeme daný program považovat za umělou inteligenci. Turingův test odpovídá definici umělé inteligence jako programu, který se chová jako člověk, což je omezující – aby program prošel tímto testem, nesmí odpovídat příliš rychle a musí záměrně dělat chyby, jaké by udělal člověk (např. při násobení velkých čísel).

Umělá inteligence řeší složité problémy – problémy, jejichž řešení ještě donedávna vyžadovalo lidskou inteligenci. Jakmile si zvykneme na to, že daný problém umí počítače řešit, přestaneme ho považovat za složitý a program, který ho řeší, přestaneme považovat za umělou inteligenci. Tento neustálý posun toho, co považujeme za umělou inteligenci, se označuje jako AI efekt.

Úzká umělá inteligence umí řešit pouze určitý specializovaný typ problému (např. hrát šachy, rozpoznávat obličeje na fotografiích), zatímco obecná umělá inteligence (AGI z angl. artificial general inteligence) umí řešit libovolný problém alespoň tak dobře jako člověk. Obecná umělá inteligence zatím neexistuje. (Někdy se pro toto rozlišení používají také pojmy „slabá a silná AI“, ty však při přesném použití mají trochu odlišný význam – rozlišují, zda AI má vlastní vědomí.)

Umělá inteligence, strojové učení a neuronové sítě

Umělá inteligence, strojové učení a neuronová síť nejsou synonyma. Umělá inteligence často využívá strojové učení (učení z dat či zkušenosti), existuje však i mnoho metod, které strojové učení nevyužívají. Neuronová síť je pak pouze jeden z mnoha modelů využívaných ve strojovém učení.

Úlohy umělé inteligence

Mezi typy úloh řešených v umělé inteligenci patří:

  • plánování – nalezení (nejkratší) posloupnosti akcí, která nás dostane do cíle (nalezení cesty z bludiště, poskládání Rubikovy kostky, naplánování cesty auta do zadané lokace, řešení Sokobana, Autíček a podobných logických úloh)
  • řízení – nalezení strategie předepisující vhodnou akci pro různé situace (hraní šachu, jízda auta mezi dvěma křižovatkami)
  • splňování podmínek – nalezení hodnot proměnných, které splňují různá provázaná omezení (tvorba školního rozvrhu, řešení sudoku a podobných logických úloh)
  • predikce – určení kategorie nebo hodnoty nějakého atributu určitého vzorku (detekce spamu, rozpoznání rostliny na fotce, odhad zítřejších srážek)
  • generování – vytvoření textu nebo obrázku na základě jiného textu nebo obrázku (odpovídání na otázky, strojový překlad, vygenerování popsaného obrázku)

Charakteristiky prostředí

Úlohy můžeme dále rozlišovat podle vlastností prostředí, se kterým AI interaguje:

  • diskrétní vs. spojité (Je možných stavů a akcí pouze spočetně mnoho, nebo existuje plynulé spektrum?)
  • plně vs. částečně pozorovatelné (Máme k dispozici všechny informace o aktuálním stavu?)
  • statické vs. dynamické (Vyvíjí se prostředí i během toho, co AI přemýšlí?)
  • deterministické vs. stochastické (Je vývoj jednoznačně určen provedenou akcí, nebo hraje roli náhoda?)
  • přátelské vs. nepřátelské (Hraje prostředí proti nám?)

Příklady prostředí

Většina čistě logických deskových her pro dva hráče (šachy, go, dáma) jsou diskrétní, plně pozorovatelné, statické, deterministické a nepřátelské. Mnohé karetní hry (Prší, Poker, Bang!) jsou pouze částečně pozorovatelné, kostkové hry jsou stochastické. Řízení autonomního auta je spojité, částečně pozorovatelné, dynamické a stochastické, ale není nepřátelské.

Metody umělé inteligence

Inteligentního chování je dosaženo kombinací různých přístupů:

  • rozklad složitého problému na podproblémy
  • systematické zkoušení možností (např. prohledávání stavového prostoru)
  • logické a pravděpodobnostní odvozování (pravděpodobnost je důležitá pro práci s nejistotou)
  • využití vhledu expertů a heuristik (pravidla, která neplatí vždy, ale často pomůžou)
  • učení se z dat nebo zkušenosti (strojové učení)

Využití a schopnosti umělé inteligence

Přejít ke cvičením na toto téma »

Mezi typické aplikace umělé inteligence patří například:

  • robotika (např. robotický vysavač, průmyslový roboti, samořídící auta),
  • doporučovací systémy (např. doporučování filmů, knih),
  • zpracování přirozeného jazyka (např. překládání mezi jazyky, vyhledávání informací, detekce spamu),
  • rozvrhování a plánování (např. plánování výroby v továrně),
  • zpracování obrazu (např. rozpoznání osob či SPZ na fotce),
  • počítačové hry (např. ovládání chování nehratelných postav).

Umělá inteligence má využití především v oblastech, kde se vyskytují opakované, repetitivní činnosti, např. obsluha výrobních pásů, řízení strojů, základní administrativní úkony.

Umělá inteligence zatím nemá schopnosti, které vyžadují složitější manuální operace (např. stříhání vlasů), koordinaci rozmanitých činností (např. rekonstrukce bytu), sociální dovednosti a empatii (např. zdravotnictví) či kreativitu a samostatné formulování cílů (např. výzkum).

Historie umělé inteligence

Přejít ke cvičením na toto téma »

Před rokem 1950

  • Karel Čapek napsal divadelní hru R.U.R, ve které bylo poprvé použito slovo robot (1920).
  • První počítače, používané především pro výpočty v průběhu druhé světové války (např. pro dešifrování).
  • První model neuronu, který se stal základem neuronových sítí.

1950–1960

  • Základy umělé inteligence jako vědy, první principy algoritmů umělé inteligence.
  • Alan Turing navrhuje test strojové inteligence (Turingův test), kdy člověk musí rozpoznat, zda komunikuje s počítačem či člověkem.
  • Začátek vývoje průmyslových robotů.

1960–1970

  • Využívání pravidlových systémů a logického odvozování, rozvoj technik prohledávání stavového prostoru.
  • První chatovací programy (např. Eliza).
  • První programy hrající deskové hry (např. dámu, piškvorky) na úrovni amatéra.
  • První samostatně se pohybující roboti (např. Shakey).
  • Základy zpracování přirozeného jazyka, první demonstrace strojového překladu.
  • Základy rozpoznávání obrazu.

1970–1990

  • Na konci 70. let (a znova na konci 80.let ) došlo kvůli nenaplněným očekáváním k útlumu počátečního optimismu ohledně umělé inteligence, pokles financování (období nazývané „zima umělé inteligence“).
  • Rozvoj tzv. „expertních systémů“ využívajících znalosti a pravidla získaná od odborníků na daný problém. (Strojové učení se zatím příliš nepoužívá.)

1990–2000

  • Rozvoj pravděpodobnostních a statistických metod umožňujících práci s nejistotou.
  • Rozvoj internetu a webu, využití umělé inteligence pro vyhledávání.
  • Program Deep Blue porazil velmistra ve hře šachy. (Program byl založený na prohledávání stavového prostoru; strojové učení se začalo výrazně používat až později.)
  • Samořiditelná auta použitelná v omezených podmínkách a za kontroly.

2000–2010

  • Se zvyšováním množství dostupných dat a výpočetního výkonu se stává populárnější strojové učení. (Neuronové sítě se však zatím stále používají spíše okrajově, jiné modely dosahují lepších výsledků.)
  • Rozvoj doporučovacích systémů (Netflix, YouTube, Amazon).
  • Začínají se prodávat robotické vysavače.
  • Samořiditelná auta zvládající i dlouhé terénní trasy nebo realistický provoz (zatím bez většího samostatného použití v běžném provozu).
  • IBM Watson vyhrál nad lidmi ve hře Jeopardy! (odpovídání vědomostních otázek).

2010–2020

  • Díky dalšímu zvyšování množství dostupných dat a výpočetního výkonu nastává prudký rozvoj oblasti „hluboké učení“ – využití hlubokých neuronových sítí trénovaných na velmi rozsáhlých datech.
  • Rozpoznávání řeči na úrovni srovnatelné s lidmi, rozšíření hlasových virtuálních pomocníků (Siri, Alexa).
  • Výrazné zlepšení rozpoznání obrazu (např. obličejů na fotografiích).
  • Vítězství umělé inteligence nad lidmi v dalších hrách: go, poker. Schopnost hrát jednoduché počítačové hry čistě na základě obrazového vstupu.
  • Autonomní auta použitelná v běžném provozu.

2020–2030

  • Využití neuronových sítí pro určování 3D struktury proteinů (AlphaFold).
  • Rozvoj generativní umělé inteligence: vytváření obrázků, generování textů, chatovací programy.
  • Vznikají první zákony (např. pakt EU) regulující použití umělé inteligence.

Umělá inteligence: realita a fikce

Přejít ke cvičením na toto téma »

Umělá inteligence se často vyskytuje i v uměleckých dílech (knihy, filmy, divadelní hry). Její zobrazení ve fikci však často neodpovídá skutečnosti a je tedy užitečné umět rozlišovat, co je realita a co fikce. Fikce neumožňuje získat lepší představu o aktuální podobě a schopnostech umělé inteligence, ale přináší zajímavé etické a filozofické otázky.

Příklady známých fiktivních robotů a programů:

  • Golem, Frankenstein: Umělé myslící stroje z pověstí či knih, předchází použití slova robot.
  • Roboti v divadelní hře R.U.R. od Karla Čapka (první použití slova robot).
  • HAL 9000: Program řídící vesmírnou loď z filmu 2001: Vesmírná odysea. Známý tím, že se snaží zabít kosmonauty, aby dosáhl splnění zadaného úkolu.
  • Umělá inteligence ve filmu Matrix, která zotročila lidstvo jako zdroj energie.
  • Marvin: Paranoidní robot z knižní série Stopařův průvodce po galaxii.
  • KITT: Inteligentní auto ze seriálu Knight Rider.
  • Číslo 5: Robot, který se stal vědomým po zásahu bleskem.
  • R2D2, C-3PO, BB8: Roboti z filmové série Hvězdné války.
  • SkyNet: Superinteligence usilující o vyhlazení lidstva ve filmech Terminátor.
  • Bender: Humanoidní robot ze seriálu Futurama.
  • WALL-E: Robot (sběrač odpadků) ze stejnojmenného filmu.

Fiktivní jsou také Tři zákony robotiky od Isaaca Asimova, které pochází původně ze série povídek. Tyto fiktivní zákony se staly ovšem základem pro mnoho diskuzí morálních problémech při vývoji robotů.

Příklady známých reálných robotů a programů:

  • Deep Blue: Šachový program, porazil lidského velmistra Garry Kasparova.
  • IBM Watson: Program schopný odpovídat otázky.
  • AlphaGo: První program, který porazil velmistra v Go.
  • Eliza: První známější chatovací program (1966).
  • ChatGPT: Chatovací program z nedávné doby (2022).
  • Alexa, Siri: Virtuální pomocníci.
  • ASIMO, Pepper: Humanoidní roboti.

Umělá inteligence: pojmy

Přejít ke cvičením na toto téma »

Pro pochopení textů o umělé inteligenci je užitečné znát řadu pojmů. Jejich přesný význam nje často komplikovaný a ne úplně jednoznačný (mají třeba více významových odstínů a použití). Naše stručné popisy se snaží zachytit pouze jejich základní podstatu.

pojem popis
umělá inteligence programy schopné provádět úkoly vyžadující inteligenci
inteligentní agent program interagující s prostředím a využívající umělou inteligenci
úzká umělá inteligence umí řešit pouze určitý specializovaný typ problému (např. hrát šachy, rozpoznávat obličeje na fotografiích)
obecná umělá inteligence umělá inteligence, která umí řešit libovolný problém (hrát libovolnou deskovou hru, provádět nové operace s fotografiemi na základě slovního popisu a podobně)
superinteligence umělá inteligence, která vysoce převyšuje schopnosti lidí ve všech oblastech
generativní umělá inteligence umělá inteligence schopná vytvářet nový obsah (obraz, text, zvuk)
vysvětlitelná umělá inteligence metoda, pro niž lze poskytnout vysvětlení, proč se chová tak, jak se chová
hrubá síla zkoušení všech možností
prohledávání stavového prostoru techniky umělé inteligence pro hledání optimálních plánů
expertní systém umělá inteligence využívající znalosti a pravidla získaná od odborníků na daný problém
strojové učení techniky založené na automatizovaném učení z dat; ne všechny přístupy k umělé inteligenci využívají strojové učení (např. umělá inteligence pro řešení sudoku nepoužívá strojové učení z dat)
rozhodovací strom model strojového učení predikující výstup na základě podmínek
neuronová síť model strojového učení volně inspirovaný mozkem
perceptron nejjednodušší neuronová síť s jediným neuronem
hluboké učení podoblast neuronových sítí využívající hierarchickou reprezentaci vlastností
genetický algoritmus přístup inspirovaný biologickými procesy dědičnosti / evolučními mechanismy
posilované učení podoblast strojového učení, zkušenostní učení na základě odměn a trestů
Bayesovská síť pravděpodobnostní model zachycující vztahy mezi událostmi
fuzzy logika typ logiky umožňující pracovat s nepřesností a nejistotou
robotika vývoj strojů, které se pohybují v prostoru
humanoidní robot svou konstrukcí a vzhledem připomíná člověka (též označovaný android, zvlášť pokud má povrchový materiál připomínající kůži)
autonomní robot robot, který pracuje samostatně
zpracování přirozeného jazyka strojové zpracování běžných lidských jazyků (např. čeština, angličtina, němčina)
chatovací program program, který je schopen konverzovat s člověkem (většinou psanou formou)
počítačové vidění získávání informací z obrazových dat
rozpoznávání řeči automatický převod mluvené řeči do textu
syntéza řeči umělá tvorba lidské řeči
doporučovací systém systém, který poskytuje personalizované doporučení pro uživatele (např. film, který by se uživateli mohl líbit)
úloha s omezujícími podmínkami úloha nalézt hodnoty proměnných, které splňují různá provázaná omezení (např. sudoku)
zkreslení, předpojatost systematická chyba, která vede k neférovým důsledkům
halucinace smyšlená nesprávná odpověď generativní umělé inteligence prezentovaná jako fakt
deepfake využití umělé inteligence k vytvoření realistických podvrhů (typicky videa)
emergentní chování komplexní chování vznikají interakcí mnoha jednoduchých prvků systému
dataset data (sada příkladů)pro strojové učení
korpus rozsáhlá kolekce textových dokumentů
model řešení úlohy (mapuje vstupy na výstupy)
jazykový model model odhadující pravděpodobnost dalšího slova v rozepsaném textu
velký jazykový model rozsáhlá neuronová síť predikující pravděpodobnost dalšího slova
GPT generativní předtrénovaný transformátor, typ velkého jazykového modelu použitý v chatovací aplikaci ChatGPT
AI efekt jev, že to, co považujeme za umělou inteligenci se časem posouvá podle toho, zda jsme si už na to zvykli
stavový prostor všechny možné stavy úlohy a přechody mezi nimi
deterministický jednoznačně určený provedenou akcí, bez náhody
stochastický zahrnující náhodu (např. hod kostkou)
diskrétní úloha s konečným počtem stavů (např. šachy)
predikce odhadnutí kategorie nebo hodnoty nějakého atributu daného příkladu
prompt uživatelský vstup (otázka, úkol) pro generativní umělou inteligenci
token základní jednotka při práci s textem (slovo nebo část neznámého slova)
vnoření slov (word embedding) reprezentace slov pomocí vektoru reálných čísel
Lisp, Prolog programovací jazyky, které se dříve hodně využívaly v umělé inteligenci
Python moderní programovací jazyk, který je mj. hodně využíván pro strojové učení a umělou inteligenci

Prohledávání stavového prostoru

Přejít ke cvičením na toto téma »

Prohledávání stavového prostoru je základem mnoha technik umělé inteligence, využívá se například pro řešení logických úloh, výběr optimálního tahu, hledání nejkratší cesty nebo plánování akcí robota.

Stavový prostor úlohy se skládá ze stavů (možné konfigurace úlohy) a akcí (přechody mezi stavy). Jeden ze stavů je počáteční a alespoň jeden stav je cílový. Přechody můžou mít přidruženou cenu.

Stavový prostor jako graf

Stavový prostor lze reprezentovat ohodnoceným orientovaným grafem, jehož vrcholy odpovídají stavům a hrany akcím. Graf stavového prostoru je pro většinu praktických úloh příliš velký na to, abychom ho celý zkonstruovali v paměti, ale některé prohledávací algoritmy si postupně budují část tohoto grafu.

Plán je libovolná posloupnost akcí. Řešení úlohy je takový plán, který nás dostane z počátečního stavu do cílového. Optimální řešení je řešení, které má nejnižší cenu. (Cena plánu je nejčastěji součet cen jednotlivých přechodů.)

Příklad stavového prostoru (skřítek na mřížce)

Úlohou je dostat skřítka do domečku. Stavový prostor úlohy má 8 stavů (A–H) a 4 akce (doleva, doprava, dolů, nahoru). Počáteční stav je A, cílový stav F. Optimálním řešením úlohy je např. plán dolů–dolů. Příkladem řešení, které není optimální, je doprava–dolů–dolů–doleva.

Zkoušení všech možností

Nejjednodušším algoritmem, který najde řešení vždy (pokud existuje) je generuj a testuj. Tento algoritmus generuje všechny možné plány a testuje, zda jde o řešení úlohy. Jde tedy o využití hrubé síly, techniky návrhu algoritmů založené na zkoušení všech možností. Zásadní nevýhodou hrubé síly je její časová náročnost. Počet plánů roste exponenciálně vzhledem k délce plánu.

Kolik je různých plánů?

Pokud máme 4 různé akce (P – doprava, D – dolů, L – doleva, H – nahoru), tak existují 4 plány délky 1, ale již 4^2 plánů délky 2 (PP, PD, PL, PH, DP, DD, DL, DH, LP, LD, LL, LH, HP, HD, HL, HH), 4^3 plánů délky 3, 4^4 plánů délky 4, atd.

Obecně, plánů délky n s k akcemi je k^n. Například pro 3 možné akce existuje plánů o 5 krocích 3^5 = 243, plánů o 6 krocích třikrát více, 3^6 = 729, a plánů o 20 krocích je 3^{20}, což už je několik miliard.

Stromové prohledávání

Mnohé plány však nemusí být vůbec proveditelné, nebo se opakovaně vracejí do stejného stavu. Je proto výhodnější testovat plány průběžně po každé akci – jakmile se dostaneme do slepé uličky nebo dříve prozkoumaného stavu, nemusíme žádné další plány začínající touto posloupností akcí prozkoumávat.

Stromové prohledávání je obecný název pro takový způsob prohledávání, kdy postupně konstruujeme a vyhodnocujeme plány po každé akci. Postup prohledávání plánů lze popsat prohledávacím stromem, ve kterém vrcholy reprezentují plány (a současně stav, do kterého se vykonáním plánu dostaneme) a orientované hrany reprezentují akce, které rozšiřují předchozí plán o jeden krok. Prohledávací strom zachycuje stavový prostor tak, jak ho postupně objevuje prohledávací algoritmus. Existuje několik variant stromového prohledávání, které se liší v tom, který plán rozšiřují (tj. který z objevených stavů prozkoumávají jako další):

Prohledávání do hloubky (DFS, angl. Depth First Search) vybírá poslední objevený stav. DFS má dobrou paměťovou složitost, protože si pamatuje pouze plány na aktuální větvi prohledávacího stromu.

V této ukázce předpokládáme, že DFS zkouší akce po směru hodinových ručiček (doprava–dolů–doleva–nahoru). Čísla u stavů popisují pořadí objevení. Cíl byl nalezen v 7. kroce a nalezený plán má 4 kroky (doprava–dolů–dolů–doleva).

Prohledávání do šířky (BFS, angl. Breadth First Search) prohledává stavy po vrstvách podle počtu akcí od počátečního stavu. To sice zvyšuje paměťovou složitost (je potřeba si pamatovat více stavů), ale vede k nalezení nejkratšího řešení.

Čísla u stavů v ukázce BFS zachycují vzdálenosti od počátečního stavu, což odpovídá pořadí procházení „po vrstvách“. BFS našlo optimální řešení řešení (dolů–dolů) po prozkoumání 6 stavů.

Prohledávání podle ceny (UCS, angl. Uniform Cost Search) je variací BFS, které umožňuje nalézt nejlevnější řešení, i když mají akce různou cenu. K rozšíření vybíráme plán s nejnižší cenou.

Pro ukázku UCS jsme přidali do plánku dvě hnědé bažiny s třikrát vyšší cenou přechodů. Čísla ve čtverečcích zde zachycují cenu plánu. V tomto případě je nejlevnější řešení (s cenou 4) doprava–dolů–dolů–doleva a UCS ho nalezne. (BFS by vrátilo řešení dolů–dolů s cenou 6.)

Algoritmus stromového prohledávání

Při stromovém prohledávání si udržujeme množinu stavů, které chceme v budoucnu prozkoumat, tzv. okraj. V každém kroku jeden stav z okraje odebereme a do okraje zařadíme jeho následníky (tj. stavy, do kterých se lze dostat z odebíraného stavu jednou akcí). Obecné schéma stromového prohledávání je následovné:

  1. Zařaď do okraje počáteční stav.
  2. Opakuj následující kroky, dokud nenajdeš cíl.
  3. Odeber jeden stav z okraje. Pokud je cílový, skonči.
  4. Jinak ho expanduj, tj. zařaď do okraje jeho následníky.
  5. Pokud se vyprázdnil okraj, tak cesta do cíle neexistuje.

Zmíněné varianty stromového prohledávání se liší tím, jakou strategii využívají k výběru stavu z okraje (krok 3), tj. jak implementují okraj. Prohledávání do hloubky (DFS) používá zásobník (odebíráme naposledy vložený stav), prohledávání do šířky (BFS) frontu (odebíráme nejdříve vložený stav) a prohledávání podle ceny (UCS) prioritní frontu (odebíráme stav s nejnižší cenou zatím nejlevnějšího plánu vedoucího do daného stavu).

Abychom se vyhnuli opakovanému prozkoumávání stejných stavů, můžeme si navíc udržovat množinu již prozkoumaných stavů a ty znova neexpandovat. Toto rozšíření se někdy označuje jako obecné grafové prohledávání, aby se odlišilo od stromového prohledávání bez kontroly dříve prozkoumaných stavů. Nevýhodou je zvýšení paměťové náročnosti.

Informované prohledávání

Prohledávání lze urychlit pomocí heuristik poskytujících odhad vzdálenosti do cíle. Taková informace je závislá na konkrétní úloze. Prohledávání využívající heuristiky označujeme jako informované prohledávání. (Algoritmy v předchozích sekcích označujeme naopak jako „neinformované“.)

Hladové prohledávání se řídí pouze hodnotou heuristiky a vybírá vždy akci, která nás dostane nejblíže cíli. Pokud hrozí slepé uličky, je potřeba hladový přístup zkombinovat se stromovým prohledáváním (jde tedy o tzv. hladové stromové prohledávání) – jako další stav vybíráme ten s nejnižším odhadem ceny podle heuristiky. Hladové prohledávání je velmi rychlé, negarantuje však nalezení optimálního řešení.

V této ukázce stromového hladového prohledávání odpovídají čísla u stavů heuristickému odhadu ceny do cíle. Heuristikou je vzdálenost od cíle spočítaná jako součet odchylek sloupce a řádku. Algoritmus našel cestu do cíle během dvou kroků, nikoliv však cestu nejlevnější.

A* prohledávání („A star“) kombinuje prohledávání podle ceny (UCS) s heuristikou. Jde o stromové prohledávání, kdy jako další stav vybíráme takový, který má nejnižší součet dosavadní ceny a heuristického odhadu zbývající ceny do cíle. Pokud je heuristika optimistická (poskytuje dolní odhad skutečné ceny), pak A* nelezne optimální řešení a nalezne ho tím rychleji, čím těsnější odhady skutečné ceny heuristika poskytuje.

Součet u stavů popisuje prioritu pro A*: [dosavadní cena] + [odhad zbývající ceny]. A* našlo optimální řešení a prozkoumalo přitom méně stavů než UCS (6 místo 8).

Mnoho úloh umělé inteligence lze formulovat jako splňování podmínek. Úloha splňování podmínek je zadaná sadou proměnných, jejich doménami (možné hodnoty) a sadou podmínek na kombinace hodnot proměnných. Ohodnocení (přiřazení hodnot některým proměnným) je řešením úlohy, pokud je úplné (přiřazuje hodnotu všem proměnným) a konzistentní (neporušuje žádnou podmínku). Někdy je navíc zadána účelová funkce určující hodnotu řešení, kterou chceme optimalizovat.

Oblast informatiky zabývající se touto úlohou se označuje jako programování s omezujícími podmínkami. Splňování podmínek je podstatou mnohých logických úloh (např. problém 8 dam, Einsteinova hádanka, algebrogram). Na Umíme si můžete vyzkoušet sudoku, ploty a binární křížovku. Praktickou aplikací je třeba sestavování konfigurací produktu splňující zadaná omezení nebo tvorba rozvrhů (školní rozvrhy, jízdní řády, logistika výroby, rozpis zápasů na turnaji).

Problém 8 dam

Úkol rozestavit na šachovnici 8 dam tak, aby se žádné dvě vzájemně neohrožovaly. (Dáma se může pohybovat o libovolný počet polí vodorovně, svisle i diagonálně.) Úlohu lze zobecnit na „problém N dam“, které máme umístit na šachovnici velikosti N×N.

Einsteinova hádanka

Úkol odvodit vlastnosti několika objektů na základě omezených informací. Nejznámější zadání popisuje pět domů, které stojí vedle sebe, liší se barvou, národností majitelů, jejich oblíbeným nápojem, značkou cigaret a domácím mazlíčkem. K dispozici máme 15 informací typu „Angličan žije v červeném domě.“

Algebrogram

Úkol nahradit písmena za různé číslice tak, aby byl splněný zadaný vzorec. Příklad: SEND + MORE = MONEY.

Řešení úloh splňování podmínek

Jakmile nějaký problém namodelujeme jako úlohu splňování podmínek, lze využít obecné postupy pro jejich řešení. Naivní zkoušení všech možných ohodnocení (generuj a testuj) většinou bude příliš pomalé, protože počet možných ohodnocení roste exponenciálně k počtu proměnných. K řešení se proto typicky používá postupné budování řešení s propagací omezení, nebo postupné zlepšování úplného ohodnocení.

Které problémy jsou těžké?

Obtížnost úloh s omezujícími podmínkami závisí na poměru počtu omezení ku počtu proměnných. Pokud je tento poměr hodně vysoký, nebo naopak hodně nízký, pak bude snadné nějaké řešení nalézt (nebo zjistit, že žádné neexistuje). Představte si sudoku, které má téměř všechna pole vyplněná (je snadné určit zbývající čísla), nebo naopak má vyplněných polí jen pár (existuje mnoho různých řešení).

Postupné budování řešení

Tento přístup spočívá v systematickém zkoušení možných ohodnocení. Na rozdíl od „generuj a testuj“ však ohodnocujeme jednotlivé proměnné postupně a průběžně kontrolujeme, zda nedošlo k porušení některé podmínky. Pokud ano, vyzkoušíme jinou hodnotu. Pokud jsme už vyzkoušeli všechny možné hodnoty dané proměnné, vracíme se k předchozí proměnné a zkusíme změnit její hodnotu (těchto návratů může být libovolné množství). Tomuto algoritmu se říká prohledávání s návratem (backtracking).

Splňování podmínek vs. plánování

Úlohu splňování podmínek lze formulovat jako úlohu plánování, v němž stavy představují různá ohodnocení proměnných, počáteční stav je prázdné ohodnocení, akce odpovídají přiřazení hodnoty do jedné proměnné a cílovým stavem je úplné konzistentní ohodnocení. (Všechna řešení jsou tedy ve stejné hloubce dané počtem proměnných.)

Rozdíl od obecné plánovací úlohy spočívá v tom, že stavy a cíl mají vnitřní strukturu – stav se skládá z hodnot více proměnných, cíl se skládá z více podmínek. Díky této vnitřní struktuře lze úlohy splňování podmínek řešit výrazně efektivněji než obecnými technikami prohledávání stavového prostoru. Můžeme například poznat, že jsme ve slepé větvi, když není některá podmínka splněná. Druhý rozdíl spočívá v tom, že nás nezajímá plán (posloupnost akcí vedoucí do cíle, např. pořadí vyplňování políček sudoku), ale cílový stav (ohodnocení proměnných, např. vyplněné sudoku).

Prohledávání s návratem (backtracking) je v podstatě prohledávání do hloubky (DFS) s včasnou kontrolou porušení podmínek. (Druhým rozdílem je, že nezáleží na pořadí akcí – výsledné řešení je stejné, ať jsme nejdříve přiřadili hodnotu proměnné A nebo B. Při prohledávání s návratem proto stačí prohledávat pouze jedno pořadí proměnných.)

Velký vliv na rychlost prohledávání s návratem mají heuristiky pro výběr proměnné a její hodnoty. Pro výběr proměnné se využívá princip brzkého neúspěchu: vybíráme proměnnou, pro kterou je těžké najít hodnotu (např. tu s nejmenší doménou). Naopak, pro výběr hodnot je vhodnější princip brzkého úspěchu, tedy výběr hodnoty, která by nejspíše mohla být součástí řešení (např. tu, která způsobí nejmenší filtraci domén). Důvod k opačným principům pro výběr proměnné a hodnoty spočívá v tom, že proměnné musíme nakonec projít všechny, ale hodnoty nikoliv.

Prohledávání s návratem lze dále výrazně urychlit propagací omezení. Po každé volbě hodnoty provedeme filtrování domén, čímž se zmenší počet hodnot budoucích proměnných, které bude potřeba zkoušet.

Propagace omezení

Z domén proměnných můžeme bezpečně odstranit hodnoty, pro které nelze splnit některou podmínku (neexistují hodnoty ostatních proměnných v podmínce, pro které by podmínka platila). (Sudoku: Když už je někde umístěná číslice, můžeme ji vyškrtnout z domén všech políček na stejném řádku, sloupci a čtverci.) Pokud zbývá v doméně proměnné jediná možná hodnota, známe část řešení.

Podmínky můžeme kontrolovat opakovaně, dokud se nám daří nějaké hodnoty vyškrtávat. V ojedinělých případech (lehká sudoku) lze opakovaným filtrováním získat celé řešení, častěji však pouze úlohu zjednodušíme a pak je potřeba zkoušet různé možné hodnoty (proto se propagace omezení využívá typicky v kombinaci s prohledáváním s návratem).

Výraznějšího filtrování dosáhneme, když budeme kontrolovat současně splnění více podmínek naráz, nikoliv vždy jen jedné (to ale zvyšuje výpočetní náročnost).

Postupné zlepšování

Alternativou k postupnému budování řešení je začít s kompletním ohodnocením (klidně náhodným) a to postupně vylepšovat drobnými úpravami. Ohodnocení je tedy celou dobu úplné, ale nikoliv konzistentní. Vylepšení je taková změna ohodnocení, která zmenší počet porušených podmínek. Algoritmy postupného zlepšování lze rozdělit do dvou kategorií podle toho, jestli pracují v jeden moment s jediným ohodnocením (lokální prohledávání) nebo s více naráz (prohledávání s populací).

Lokální prohledávání pracuje s jedním ohodnocením, které postupně vylepšuje. Množina všech ohodnocení, které se od toho současného lidí jednou změnou, nazýváme okolí. Metoda největšího stoupání (horolezecký algoritmus) vybírá z okolí to ohodnocení, které vede k nejvýraznějšímu zlepšení. Tímto postupem se rychle dostaneme do lokálního optima, kdy všechny okolní stavy jsou horší. Lokální optimum však nemusí být optimemem globálním, zejména tedy nemusí jít o přípustné řešení.

Proto je potřeba využít meta-heuristiky, které vnáší do prohledávání prvek náhodnosti a tedy šanci uniknout lokálnímu optimu. Příkladem meta-heuristiky je simulované žíhání, při kterém z okolí vybíráme náhodně; pokud je nové ohodnocení zlepšující, tak ho přijmeme, pokud není zlepšující, tak ho přijmeme s určitou pravděpodobností, která se postupně snižuje. Jednoduchou meta-heuristikou je také opakované spouštění lokálního prohledávání z různých náhodných počátečních ohodnocení.

Při prohledávání s populací vylepšujeme mnoho ohodnocení naráz. To umožňuje vybírat nejlepší ohodnocení z aktuální populace a případně různá ohodnocení kombinovat. Příkladem jsou genetické algoritmy inspirované fungováním evoluce. Ohodnocení pokračující do další generace jsou vybírána podle jejich kvality, kombinována („křížení“) a případně drobně náhodně měněna („mutace“). Do této kategorie patří také další algoritmy inspirované přírodou, které využívají velké množství interagujících agentů reprezentujících úplná ohodnocení. (Například při „optimalizaci mravenčí kolonií“ má každý mravenec přidružené ohodnocení a podle jeho kvality vydává různě silnou feromonovou stopu – čím je ohodnocení lepší, tím spíš budou další mravenci zkoušet podobná ohodnocení.)

Optimalizace znamená hledání nejlepšího řešení. Hledáme hodnoty optimalizovaných proměnných, při kterých je zadaná účelová funkce nejvyšší (maximum), nebo nejnižší (minimum). Optimalizace se využívá například při plánování výroby, rozvrhování dopravy, návrhu telekomunikačních sítí a trénování modelů ve strojovém učení.

Optimalizační úlohy

Maximalizační a minimalizační úlohy lze řešit stejnými technikami, každý maximalizační problém lze totiž převést na minimalizační úlohu (a naopak) převrácením účelové funkce. Různé techniky se však liší v tom, zda je lze použít v diskrétním či spojitém prostoru (ve spojitém prostoru můžou proměnné nabývat libovolných reálných čísel) a zda může problém obsahovat omezující podmínky.

Příklady optimalizačních úloh

  • Problem batohu. Vybrat kombinaci předmětů, která se vejde do batohu omezené kapacity, aby celková hodnota byla co nejvyšší.

  • Problém obchodního cestujícího. Najít nejkratší cestu, která projde všemi zadanými městy a vrátí se do výchozího bodu.

  • Rozvrhování. Najít optimální (nejkratší, nejlevnější) rozvržení aktivit v čase s ohledem na dané zdroje a omezení.

  • Strojové učení. Zvolit parametry modelu (např. váhy neuronové sítě) minimalizující chybu predikcí na trénovacích datech.

  • Problém čokoládových sušenek. Najít recept na co nejlepší čokoládové sušenky.

Systematické prohledávání

Nejjednodušším přístupem je zkoušení všech možností (hrubá síla). Ve spojitém prostoru je možností nekonečně mnoho, lze však systematicky vyzkoušet všechny kombinace hodnot s určitým rozlišením (mřížkové prohledávání). Tento přístup je použitelný jen pro velmi malé problémy, protože počet možností roste exponenciálně s počtem proměnných. Při řešení problému batohu můžeme každý předmět buď vzít, nebo nevzít, existuje tedy 2^n možných kombinací předmětů.

Efektivnější je přiřazovat hodnoty proměnným postupně a průběžně odhadovat nejlepší možnou hodnotu řešení s daným částečným přiřazením. Když je tato mez horší než zatím nejlepší nalezené řešení, můžeme celou větev přeskočit a být si jistí, že jsme přitom nepřeskočili optimální řešení. Tato varianta stromového prohledávání se nazývá metoda větví a mezí (angl. branch and bound). Pro výběr dalšího stavu k průzkumu lze využít hladové kritérium – stav s nejlepší hodnotou meze (nebo jinou strategii stromového prohledávání stavového prostoru).

Hladové a náhodné prohledávání

Systematické prohledávání garantuje nalezení globálního optima, velmi často je však příliš pomalé pro praktické problémy. Pro urychlení je potřeba vzdát se požadavku na optimální řešení, pro většinu praktických problémů naštěstí stačí řešení, které je „dostatečně dobré“. K urychlení lze pak využít hladovost a náhodnost.

Hladové prohledávání vybírá pro každou proměnnou hodnotu, která se zdá zatím nejlepší a zpětně se k těmto rozhodnutím nevrací. Při řešení problému batohu bychom mohli brát postupně předměty s nejvyšším poměrem cena/váha, dokud se do batohu vejdou. Hladové prohledávání je sice velmi rychlé, ale nalezené řešení může být hodně špatné. Mezi extrémy hladového prohledávání (zkoušíme jedinou cestu) a systematického stromového prohledávání (zkoušíme všechny cesty) existuje paprskové prohledávání (zkouší fixní počet cest). Paprskové prohledávání ponechává na každé úrovni stromu pouze fixní počet nejlepších stavů a ostatní zahazuje.

Náhodné prohledávání zkoumá náhodně vybraná řešení (místo všech možných). Existují složitější techniky, které postupně zvyšují pravděpodobnost výběru řešení v nadějných oblastech – snaží se vyvažovat průzkum zatím neprobádaných oblastí (náhodnost) a zužitkování informací o více prozkoumaných oblastech (hladovost). Tento kompromis mezi průzkumem a zužitkováním (angl. exploration-exploitation tradeoff) je obecným principem využívaným v mnoha optimalizačních algoritmech.

Hladovost i náhodnost se používají také v rámci metod postupného vylepšování zmíněných v následujících sekcích.

Lokální prohledávání

Alternativou k postupnému budování řešení je začít s libovolným řešením, a to postupně vylepšovat drobnými změnami. Tento přístup se nazývá lokální prohledávání. Množinu blízkých řešení, které se od toho aktuální liší jedinou změnou, nazýváme okolí. (Při řešení problému batohu by okolí mohlo zahrnovat například ty kombinace, které se liší nejvýše jedním přidaným a jedním odebraným předmětem.) Existují různé heuristiky pro výběr dalšího řešení z okolí. Horolezecký algoritmus vybírá některé zlepšující řešení, případně nejlepší řešení z okolí (tato varianta horolezeckého algoritmu se označuje jako metoda největšího stoupání).

S využitím těchto hladových heuristik dorazíme rychle do lokálního optima, tedy řešení, které je nejlepší ve svém okolí, nemusí však jít o globální optimum. Šanci na nalezení globálního optima lze zvýšit využití náhodnosti. Simulované žíhání vybírá z okolí náhodně; pokud je nové řešení zlepšující, tak ho přijmeme, pokud není zlepšující, tak ho přijmeme s určitou pravděpodobností, která se postupně snižuje.

Obdoba lokálního prohledávání ve spojitém prostoru je gradientní sestup. Ve spojitém prostoru lze často vypočítat směr, ve kterém účelová funkce nejrychleji klesá nebo stoupá (tzv. gradient), není pak potřeba testovat různá řešení v okolí. Gradientní sestup se běžně využívá ve strojovém učení, např. pro optimalizaci vah neuronové sítě.

Prohledávání s populací

Při prohledávání s populací vylepšujeme mnoho řešení naráz. To umožňuje vybírat nejlepší řešení z aktuální populace a případně různá řešení kombinovat. Příkladem jsou genetické algoritmy inspirované fungováním evoluce. Řešení pokračující do další generace jsou vybírána podle jejich kvality (hodnoty účelové funkce), kombinována („křížení“) a případně drobně náhodně měněna („mutace“).

Do této kategorie patří také algoritmy inteligence hejna inspirované skupinovým chováním nějakého druhu (typicky při hledání potravy). Tyto algoritmy využívají velké množství jednoduchých agentů reprezentujících různá řešení, kteří spolu nepřímo interagují skrze společnou paměť. Například při optimalizaci mravenčí kolonií má každý mravenec přidružené řešení a na své trase vydává feromonovou stopu, která je tím silnější, čím lepší řešení. Všechny feromonové stopy dohromady tvoří společnou pamětí, podle které se pak řídí další mravenci (preferují cesty s výraznější feromonovou stopou, které se v minulosti osvědčily).

Zpracování přirozeného jazyka

Přejít ke cvičením na toto téma »

Zpracování přirozeného jazyka (angl. natural language processing) je obor na pomezí informatiky (specificky umělé inteligence) a lingvistiky, který zkoumá analýzu a generování psaného či mluveného slova. Mezi úlohy zpracování přirozeného jazyka patří:

  • klasifikace textu (detekce spamu, určení žánru, určení autorství)
  • shlukování textů (vytvoření skupin podobných zpráv nebo souvisejících soudních případů)
  • korektura textu (kontrola pravopisu – spell-check, kontrola gramatiky – grammar check)
  • generování textu (odpovídání na otázky, shrnování textu, strojový překlad)
  • rozpoznávání řeči (řeč → text) a syntéza řeči (text → řeč)
  • popisování obrázků (obrázek → text) a generování obrázků (text → obrázek)

Pravidlový přístup

Dříve se na tyto úlohy využívaly pravidlové přístupy snažící se zachytit pravidla daného jazyka (např. časování sloves). Analýza textu byla rozdělena do několika navazujících úrovní (jazykových rovin): 1. morfologie (konstrukce slov), 2. syntaxe (skládání vět), 3. sémantika (význam vět) a 4. pragmatika (použití vět v kontextu). Postihnout přirozený jazyk pomocí pravidel se však ukázalo jako obtížné.

Komplikace zpracování přirozeného jazyka

Každé pravidlo má řadu výjimek a texty v přirozeném jazyce obsahují překlepy a jiné chyby, které je také potřeba modelovat, chceme-li textu porozumět. Další komplikací je nejednoznačnost na mnoha úrovních: homonyma, tj. slova s více možnými významy (los, stát, koruna), věty s více možnými významy („Sněz rychle chladnoucí polévku.“), zájmena odkazující se na dříve uvedené objekty (anafory) a další odkazy do jiných částí textu nebo i mimo něj (já, teď). Význam vět nelze vždy určit z významu dílčích slov, například při použití idiomů, metafor a metonymií.

Strojové učení

V dnešní době se zpracování přirozeného jazyka řeší téměř výhradně využitím strojového učení, které dosahuje výrazně lepších výsledků než pravidlové přístupy. K učení se využívají rozsáhlé kolekce textových dokumentů označované jako korpusy. Korpusy obsahují například digitalizované knížky, online encyklopedie (Wikipedia), někdy dokonce texty z většiny dostupných webových stránek a můžou tak mít i miliardy slov.

Výstupem strojového učení je jazykový model, který odhaduje pravděpodobnost dalšího slova v rozepsaném textu. Takový model lze pak využít ke generování textu v chatbotech (opakovaným výběrem některého z pravděpodobných dalších slov) nebo výběru nejpravděpodobnější věty z několika kandidátů (to se hodí třeba při rozpoznávání řeči nebo strojovém překladu). Jazykové modely realizované pomocí rozsáhlých neuronových sítí s miliardami parametrů (které se nastavují během učení) se označují jako velké jazykové modely (angl. large language models, LLM).

ChatGPT

Příkladem velkého jazykového modelu je GPT, generativní předtrénovaný transformátor. Jde o generativní model, protože umožňuje generovat text. Je předtrénovaný na rozsáhlém datasetu textů z většiny dostupných webových stránek. Transformátor (angl. transformer) je populární typ neuronové sítě umožňující efektivní učení na takto rozsáhlých datech. ChatGPT je pak název konkrétní aplikace (chatbota) využívající na pozadí tento velký jazykový model.

Reprezentace textu

Základní jednotkou při práci s textem jsou tokeny, což jsou typicky buď známá slova nebo části neznámých slov. Možných tokenů v jednom jazyce je pak třeba několik desítek tisíc. Rozdělení textu na tokeny se označuje jako tokenizace. Pro některé aplikace je výhodné slova převést do jejich základního tvaru, tzv. lemma (jablek → jablko, jsme → být).

Jednotlivá slova se často reprezentují pomocí tzv. vnoření slov (angl. word embeddings) jako vektory reálných čísel v mnohodimenzionálním prostoru. Slova podobného významu jsou v tomto prostoru blízko sebe.

Skupiny slov lze pak reprezentovat buď jako množinu, tedy bez ohledu na pořadí (angl. bag of words), nebo se zachováním pořadí jako tzv. n-gramy (např. bigramy jsou dvojice po sobě jdoucích slov).

Robotika se zabývá vývojem robotů, tedy strojů, které se pohybují v prostoru, vnímají své okolí a na základě jeho stavu se rozhodují. Roboti mají uplatnění v průmyslu (robotická ramena), dopravě (autonomní auta) i domácnosti (robotický vysavač).

Je „kuchyňský robot“ robot?

Navzdory pojmenování kuchyňský robot technicky robotem spíše není, protože nevnímá své okolí a nedělá žádná autonomní rozhodnutí.

Slovo „robot“ je odvozené ze slova „robota“ (práce poddaných) a bylo poprvé použito v divadelní hře hře R.U.R. (Rossumovi univerzální roboti) Karla Čapka v roce 1920. Android je označení pro humanoidní roboty, tedy roboty, kteří mají lidskou podobu. Robot však obecně lidskou podobu mít nemusí, pro mnohé aplikace to není ani potřeba, ani žádoucí (např. robotický vysavač). Měl by ale mít nějakou mechanickou část. (Pro čistě virtuální roboty, tedy programy automatizující činnosti, se někdy používá pojem bot.)

Části robota

Senzory umožňují robotovi vnímat prostředí. Několik příkladů:

  • GPS = určování polohy pomocí družic obíhajících Zemi
  • radar = měření vzdáleností od okolních objektů pomocí radiových vln
  • lidar = měření vzdáleností od okolních objektů pomocí světelných paprsků (měří čas, za jak dlouho se vrátí)
  • sonar = měření vzdálenosti pomocí zvukových (typicky ultazvukových) vln
  • kamera = zachycení obrazu, užitečné pro kategorizaci objektů
  • jednotka inerciálního měření (angl. Inertial Measurement Unit, IMU) kombinuje gyroskop, akcelerometr (a někdy také magnetometer) k určení orientace, rychlosti a zrychlení stroje

Řídící jednotka, typicky realizována skrze jednočipový počítač (mikrokontrolér), umožňuje robotovi zpracovat informace ze senzorů a rozhodnout se, jak reagovat.

Efektory umožňují robotovi ovlivňovat prostředí (např. robotická ramena a chapadla) a pohybovat se v něm (např. kola, pásy, robotické nohy).

Umělá inteligence

Umělá inteligence se v robotice využívá například k plánování trasy, lokalizaci robota a rozpoznávání okolních objektů. Tyto úlohy jsou komplikované kvůli tomu, že neznáme přesný stav světa (např. kvůli nepřesným měřením senzorů) a jak se bude svět vyvíjet (např. pohyb ostatních aut). Zdrojem nejistoty je i robot samotný, neboť provedení akcí není dokonale přesné (otočení o 89° místo zadaných 90°). Proto se k řešení využívají pravděpodobnostní modely, které dokáží modelovat i nejistotu. S každým novým měřením senzorů se tato nejistota snižuje, s ubíhajícím časem a pohybem naopak zvyšuje.

Při plánování je potřeba vzít v úvahu konstrukční omezení, kvůli kterým robot nemusí být schopen vykonat libovolný plán (např. auto se nemůže pohybovat po libovolné křivce, proto je parkování náročné). Plánování se proto někdy neprovádí v geometrickém prostoru světa, ale v konfiguračním prostoru daného robota, v němž jednotlivé stavy popisují kompletní stav robota (např. jeho pozici, otočení, rychlost).

Počítačové vidění je oblast umělé inteligence zabývající se získáváním informací z obrazových dat. Obrazová data nejsou jen fotky a obrázky, ale také videa, snímky medicínských měření (rentgen, ultrazvuk) a snímky z různých senzorů (radar, sonar). Typické úlohy počítačového vidění jsou:

  • rozpoznání obrazu – určení kategorie objektu (druh květiny na fotce, ručně napsaný znak)
  • detekce objektů – identifikace různých objektů včetně jejich lokalizace na snímku (chodci, tváře, dopravní značky)
  • segmentace obrazu – rozdělení obrazu na jednotlivé části nebo objekty (oddělení popředí a pozadí fotky, obarvení různých druhů tkání)

Příklady aplikací počítačového vidění

  • rozpoznávání naskenovaného textu (OCR z angl. optical character recognition)
  • rozpoznávání tváří (identifikace osob na fotkách)
  • určení druhu rostliny či zvířete na fotce
  • analýza medicínských měření (např. rentgenových snímků)
  • kontrola kvality výrobků (automatické odhalení defektů)
  • detekce událostí na videu (např. krádež zachycená bezpečnostním kamerovým systémem)
  • vyhledávání obrázku podle textového popisu (nebo obrázků podobných zadnému obrázku)
  • autonomní auta (např. detekce hranic vozovky, ostatních aut, chodců, rozpoznání dopravních značek)
  • roboti vnímající a reagující své okolí (např. chycení předmětu)

Počítačové vidění nelze řešit pomocí ručně zapsaných pravidel. (I tentýž předmět vypadá pokaždé jinak podle toho, jak je daleko, natočený, osvětlený nebo částečně zakrytý.) Proto se využívá strojové učení, kdy se program učí obecné rysy různých objektů na základě velkého množství příkladů. (Pokud se má program naučit klasifikovat různé druhy zvířat, potřebuje k učení fotky všech různých druhů, které má rozlišovat, ideálně v mnoha různých situacích.)

Základní rysy obrázků můžou být například hrany a rohy. Takové rysy lze z původního obrázku získat pomocí konvoluce, což je transformace obrázku, při které je každý pixel nahrazen váženým součtem hodnot pixelů v jeho okolí. Hodnoty vah můžou být různé a označují se jako tzv. konvoluční jádro (angl. kernel). Dříve bylo běžné určit tyto rysy manuálně a použít je jako vstup do jednoduchého modelu.

Dnes se využívají složitější modely, které se automaticky učí vhodné rysy samy extrahovat. (Potřebují však ještě větší množství příkladů než jednodušší modely, které používaly manuálně zadané rysy.) Nejčastěji se využívají hluboké neuronové sítě. Neuronové sítě jsou volně inspirované strukturou mozku, ale jde v podstatě jen o složitou matematickou funkci s mnoha parametry, jejichž hodnoty se učí z dat. Slovo „hluboké“ se zde odkazuje na fakt, že sítě obsahují mnoho vrstev, které postupně zachycují složitější rysy a vzory (hrany → základní geometrické tvary → komplexní tvary → „kočkovitost“ atp.). Na úlohy počítačového vidění se dobře hodí konvoluční neuronové sítě, které obsahují vrstvy provádějící konvoluci. Váhy konvoluce nejsou dané dopředu, učí se z dat.

Strojové učení je podoblast umělé inteligence zabývající se tvorbou programů, které se učí z dat. Strojové učení souvisí s tématem práce s daty, zejména s jejich sběrem a evidencí.

V rámci Umíme informatiku dělíme toto téma následovně:

  • základy strojového učení (hlavní princip strojového učení, rozdíl oproti klasickému programování, využití strojového učení)
  • typy úloh, které lze pomocí strojového učení řešit (např. klasifikace, regrese, shlukování)
  • metody řešení těchto úloh (učení s učitelem a bez učitele, posilované učení, neuronové sítě a jiné modely, učící algoritmy)
  • vyhodnocení naučených modelů (rozlišení mezi generalizací a pouhou memorizací, rozpoznání podučení a přeučení, volba a interpretace vhodné metriky pro porovnání modelů)
  • zkreslení (předpojatost) ve strojovém učení (co to je, jak rozpoznat a co se s tím dá dělat)

Základy strojového učení

Přejít ke cvičením na toto téma »

Umělá inteligence často využívá učení z dat, tzv. strojové učení. Vstupem strojového učení je velké množství dat (dataset), výstupem je naučený model pro řešení požadovaného úkolu. Máme-li dostatek dat popisujících vzhled a chování příšerek, můžeme naučit model, který bude pro nové příšerky odhadovat, zda jsou hodné, na základě jejich vzhledu.

Klíčovou ingrediencí pro strojové učení je velké množství dat. Jednotlivé příklady jsou typicky poměrně jednoduché (např. jedna fotka), ale je jich hodně (někdy i miliony). Aby byl model užitečný, nestačí, aby si zapamatoval trénovací data (memorizace), musí být schopen určovat správný výstup i pro příklady nové (zobecňování, generalizace).

Příkladem modelu je rozhodovací strom (na obrázku výše) nebo neuronová síť (model volně inspirovaný sítí neuronů v mozku). Strojové učení může v závislosti na množství dat trvat vteřiny i celé dny, pro urychlení se proto někdy využívají grafické procesory (GPU, graphics processing unit) a tenzorové procesory (TPU, tensor processing unit).

Strojové učení lze vnímat jako alternativu ke klasickému programování, při kterém programátor zapisuje posloupnost přesných instrukcí (např. if-then pravidla nebo heuristika na základě zkušenosti). Strojové učení bude vhodným přístupem zejména tehdy, když není jasné, jak by takový klasický program měl vypadat a přitom lze sehnat rozsáhlé množství příkladů (např. detekce spamu). Strojové učení spíše nebude vhodným přístupem pro kritická rozhodnutí, kde není tolerovatelná žádná chyba a potřebujeme vysokou předvídatelnost a transparentnost chování (např. bankovní převod).

Aplikace strojového učení (příklady)

  • detekce spamu
  • diagnóza nemoci
  • rozpoznání hlasu
  • překlad textů
  • doporučování filmů
  • řízení auta
  • generování obrázků podle popisu

Úlohy strojového učení

Přejít ke cvičením na toto téma »

Pomocí strojového učení lze řešit rozličné typy úloh, mezi ty nejčastější patří:

  • regrese = odhad číselné hodnoty (Jak bude daný uživatel hodnotit daný film? Jaká bude teplota zítra odpoledne?)

  • klasifikace = určování příslušnosti k jedné z několika předem daných kategorií (Je daný e-mail spam? Která kytka je na fotce?)

  • shlukování = rozdělení příkladů do skupin s podobnými vlastnostmi (Které zprávy řeší podobné téma? Které chemické látky se chovají podobně?)

  • hledání anomálií = upozornění na podezřelé příklady, které se výrazně liší od zbytku dat (detekce případů, kdy bankovní účet nevyužívá jeho skutečný majitel)

  • řazení (ranking) = uspořádání příkladů (seřazení výsledků vyhledávání, seřazení doporučených videí)

  • generování = vytvoření textu nebo obrázku na základě jiného textu nebo obrázku (odpovídání na otázky, strojový překlad, vygenerování popsaného obrázku)

  • řízení = hledání strategie pro optimální rozhodování (hraní šachů a podobných her, řízení autonomního auta)

Metody strojového učení

Přejít ke cvičením na toto téma »

Využití strojového učení zahrnuje následující fáze:

  1. příprava datasetu – může zahrnovat sběr a anotování dat (doplnění požadovaného výstupu)

  2. trénování modelu – určení vhodných hodnot parametrů modelu

  3. testování modelu – na nových datech, které model neviděl během trénování

  4. nasazení modelu – tedy jeho použití pro zadaný úkol

Typy přístupů

Přístupy ke strojovému učení lze rozlišit podle povahy signálu o požadovaném výstupu modelu:

  • učení s učitelem (angl. supervised learning) – požadovaný výstup je součástí trénovacích dat (např. zda je příšerka hodná, zda je e-mail spam). Doplňování požadovaných výstupů se říká anotování dat. Datům s požadovaným výstupem se pak někdy říká označkovaná data.

  • učení bez učitele (angl. unsupervised learning) – trénovací data neobsahují požadovaný výstup, úkolem je najít vzory v datech (např. podobné příšerky, podobné zprávy)

  • posilované učení (někdy též zpětnovazební učení, angl. reinforcement learning) = učení skrze interakci s prostředím zahrnující zpětnou vazbu na provedené akce (např. výhra v šachu, řízení auta bez nehod)

Různé přístupy jsou vhodné na různé typy úloh. Učením s učitelem se typicky řeší regrese, klasifikace, řazení a generování, učením bez učitele shlukování a hledání anomálií, posilovaným učením řízení. Často se však přístupy kombinují.

Modely

Pro řešení úloh strojového učení existuje celá řada modelů. Příkladem jsou lineární modely, rozhodovací stromy a neuronové sítě:

  • Lineární modely určují výstup na základě váženého součtu atributů. Pokud je 2 × počet rukou + 3 × počet nohou menší než 18, pak je příšerka hodná.

  • Rozhodovací stromy určují výstup na základě podmínek. Pokud má příšerka (více jak dvě ruce a nejvýše tři nohy) nebo (nejvýše dvě ruce a právě dvě nohy), pak je hodná.

  • Neuronové sítě se skládají z mnoha propojených neuronů, kde každý neuron počítá relativně jednoduchou funkci (podobně jako lineární model). Protože je ale neuronů hodně, je výsledná funkce určená neuronovou sítí složitá. Neurony jsou typicky uspořádané do několika vrstev. Učení neuronové sítě s mnoha vrstvami se označuje jako hluboké učení (angl. deep learning).

Volba vhodného modelu závisí například na množství dat a požadované interpretovatelnosti výstupů modelu. Neuronové sítě a jiné modely s mnoha parametry se umí naučit velmi složité funkce, ale vyžadují hodně dat a jsou hůře interpretovatelné než lineární modely a rozhodovací stromy.

Učící algoritmy

Učící algoritmus hledá strukturu nebo parametry modelu tak, aby minimalizoval zadanou chybu. Příkladem učícího algoritmu, který se využívá např. pro lineární modely a neuronové sítě, je gradientní sestup (angl. gradient descent). Při gradientním sestupu začneme s náhodnými hodnotami parametrů a ty pak opakovaně upravujeme tak, abychom zmenšili chybu modelu. Jiný učící algoritmus se používá pro budování rozhodovacích stromů: strom postupně zvětšujeme přidáváním rozhodovacích uzlů s podmínkami, které co nejlépe rozdělují příklady.

Příklad učení lineárního klasifikátoru příšerek

Parametry lineárního modelu jsou (a) váha pro počet rukou, (b) váha pro počet nohou a (c) hranice, při které je ještě příšerka klasifikovaná jako hodná: a \cdot \text{[počet rukou]} + b \cdot \text{[počet nohou]} < c

Například pro hodnoty parametrů a = 2, b = 4, c = 20 bude model klasifikovat příšerku jako hodnou tehdy, když 2 \cdot \text{[počet rukou]} + 4 \cdot \text{[počet nohou]} < 20.

Různá nastavení těchto parametrů vedou na různý počet chybně klasifikovaných příšerek. Řekněme, že při hodnotách parametrů a = 2, b = 4, c = 20 model klasifikuje chybně 20 % příšerek. Gradientní sestup by mohl parametry upravit na a = 2, b = 3, c = 18 a snížit tak chybu třeba na 15 %. Gradientní sestup by opakovaně prováděl takovéto drobné úpravy parametrů (spíše ještě drobnější).

Směr změny parametrů, který co nejvíce sníží chybu, závisí na konkrétní chybové funkci a pro mnohé chybové funkce lze tento směr (tzv. gradient) spočítat.

Vyhodnocení strojového učení

Přejít ke cvičením na toto téma »

Aby byl model užitečný, nestačí aby si zapamatoval trénovací data, musí být schopen určovat správný výstup i pro příklady nové, tedy generalizovat. Kvalitu modelu je proto potřeba vyhodnotit na datech, která model neviděl během učení, jinak bude vyhodnocení neoprávněně optimistické. Situaci, kdy si model zapamatuje přesné odpovědi pro trénovací data, ale není schopen generalizovat, nazýváme přeučení (někdy též přetrénování, angl. overfitting). Situaci, kdy je zvolený model příliš jednoduchý na danou úlohu, takže má vysokou chybu i na trénovacích datech, nazýváme podučení (někdy též podtrénování, angl. underfitting).

Složitější modely jsou typicky náchylnější k přeučení, protože se umí naučit libovolný šum v datech. Pokud jsou dva modely podobně správné na datech, která máme k dispozici, tak pro nová data bude proto pravděpodobněji lépe generalizovat ten jednodušší z nich. Jde o případ obecného principu zvaného Occamova břitva, který říká, že existuje-li více různých vysvětlení, je lépe upřednostňovat to jednodušší z nich.

Kvalitu modelů lze kvantifikovat pomocí různých metrik. Pro vyhodnocení regresních modelů se často používá střední kvadratická chyba (angl. mean squared error), což je průměrná druhá mocnina odchylky mezi predikovanou a skutečnou hodnotou. Pro vyhodnocení klasifikačních modelů se používá například správnost (angl. accuracy, podíl správných odpovědí), přesnost (angl. precision, kolik ze všech označených příkladů je pozitivních) a pokrytí (angl. recall, kolik ze všech pozitivních příkladů model detekoval).

Užitečnou vizualizací je matice záměn (angl. confusion matrix), která zobrazuje, kolik kterých kategorií bylo jak klasifikováno. Následující matice kompaktně zachycuje chování modelu pro predikci nemoci (P – pozitivní, N – negativní), kdy model v 9 případech správně predikoval pozitivní výsledek, v 87 správně predikoval negativní výsledek, v 1 případě chybně predikoval pozitivní výsledek a ve 3 případech chybně predikoval negativní výsledek.

Vždy je vhodné problém nejprve zkusit řešit pomocí jednoduchého základního modelu (angl. baseline), což může být například průměrná hodnota (pro regresi) nebo nejčastější kategorie (pro klasifikaci). Srovnání metrik složitějšího modelu se základním modelem umožňuje hodnoty metrik lépe interpretovat.

Zkreslení strojového učení

Přejít ke cvičením na toto téma »

Zkreslení (někdy též předpojatost, podjatost, zaujatost, angl. bias) znamená systematickou chybu, která vede k neférovým důsledkům pro různé skupiny. Nemusí jít o skupiny lidí, pojem zkreslení se používá i pro situaci, kdy model např. výrazně častěji predikuje jednu kategorii (např. hrušky), přestože se jiné kategorie (např. jablka) vyskytují podobně často.

Zkreslení modelu může podporovat předsudky (model predikující studijní výsledky v určitém oboru využívající informaci o pohlaví) a vést k diskriminaci (pokud by byl tento model použit pro rozhodování o přijetí na univerzitu).

Zkreslení modelu je většinou způsobeno zkreslenými daty, model se totiž naučí pouze to, co vidí v datech. K výběrovému zkreslení dochází, pokud data nereprezentují adekvátně všechny typy případů. Pokud bychom trénovali rozpoznávání bot pouze na pánských botech, model nebude rozpoznávat dámské boty. Ke zkreslení odpovědí může dojít např. kvůli předsudkům anotujících osob, nebo kvůli neochotě respondentů sdělit pravdu. V dotazníkových šetřeních lidé často upravují svoje odpovědi o sobě podle společenských očekávání.

Zkreslení může být náročné odhalit, protože na rozdíl od přeučení se většinou neprojeví nižší úspěšností na testovacích datech. Při běžném postupu totiž data pro testování a učení pocházejí z jednoho zdroje, takže obsahují tatáž zkreslení.

Abychom snížili riziko zkreslení, je vhodné důsledně kontrolovat kvalitu dat. Měli bychom například ověřit, že posbíraná data obsahují všechny typy případů a že jsou jednotlivé kategorie zastoupeny podobným množstvím příkladů, podobné kvality a v podobných kontextech. Při anotování dat je vhodné, aby ho prováděli lidé z různých skupin (např. muži i ženy). Je také užitečné vyhodnocovat chování modelu pro různé podskupiny dat (např. pro muže a ženy, různé věkové skupiny, menšiny) a průběžně monitorovat chování modelu i po nasazení.

Regrese (v kontextu strojového učení) je úloha odhadnout číselnou hodnotu nějaké veličiny v závislosti na jednom či více atributech (např. odhadování ceny bytu na základě jeho rozlohy). Lineární regrese je řešení regresní úlohy pomocí lineárního modelu, tedy modelu, který je lineární funkcí (tj. váženým součtem) optimalizovaných parametrů.

Nejjednodušším příkladem lineární regrese je hledání přímky \hat{y} = ax + b, která co nejlépe popisuje vztah mezi souřadnicemi x a y zadaných bodů D = \{(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\}. V případě výše je x rozloha, y skutečná cena bytu a \hat{y} odhad ceny podle modelu. Model má dva parametry (a, b), které je potřeba určit (učení modelu, optimalizace).

Kvadratická chyba

Abychom mohli vybrat „nejlepší“ přímku, musíme stanovit chybovou funkci popisující, jak dobře daná přímka odpovídá zadaným bodům. Nejčastěji se používá kvadratická chyba, definovaná jako součet druhých mocnin odchylek jednotlivých odhadů oproti skutečnosti. Tento přístup se označuje jako metoda nejmenších čtverců, protože minimalizujeme součet druhých mocnin, tedy čtverců. Chyba závisí na parametrech a, b a množině bodů D:

E(a, b, D) = \sum_{(x,y) \in D} (\hat{y} - y)^2 = \sum_{(x,y) \in D} (ax + b - y)^2

Přímka vlevo (\hat{y} = × + 1) má kvadratickou chybu 1^2 + 2^2 = 5, zatímco přímka vpravo (\hat{y} = 0{,}5x + 1) pouze 0{,}5^2 + 1^2 + 0{,}5^2 = 1{,}5.

Kvadratická chyba je vzhledem k mocnění odchylek citlivá na odlehlé body (outliery), tedy body, které leží daleko od ostatních. Někdy se proto odlehlé body odstraňují, v každém případě je o nich dobré vědět.

Optimalizace parametrů

Úlohou je tedy najít takové hodnoty parametrů a, b, které minimalizují kvadratickou chybu. K optimalizaci existuje řada obecných přístupů, např. systematické zkoušení různých kombinací hodnot parametrů (hrubá síla), nebo postupné vylepšování jedné kombinace parametrů drobnými úpravami (gradientní sestup). V případě lineární regrese lze však optimální parametry určit analyticky, tj. přímým výpočtem pomocí následujících vzorců:

a = \frac{\sum (x - \bar{x})(y - \bar{y})}{\sum (x - \bar{x})^2}

b = \bar{y} - a\bar{x}

Sumy \sum značí součet přes všechny body (x, y) \in D. \bar{x}, \bar{y} jsou průměrné hodnoty x a y. Směrnice a je tedy tím vyšší, čím je mezi x a y silnější vztah a čím jsou odchylky y větší relativně vůči odchylkám x. Rovnici pro b dostáváme z intuitivního vztahu mezi průměrnými hodnotami: \bar{y} = a\bar{x} + b. (Vzorce lze odvodit skrze derivaci kvadratické chybové funkce, která musí být v minimu rovna 0.)

Příklad výpočtu optimální přímky

Hledáme parametry a, b pro body na obrázku výše, tedy D = \{(1, 1), (2, 3), (3, 2)\}.

  • \bar{x} = 2, \bar{y} = 2
  • (x - \bar{x}) = [-1, 0, 1]
  • (y - \bar{y}) = [-1, 1, 0]
  • \sum (x - \bar{x})(y - \bar{y}) = (-1) \cdot (-1) + 0 \cdot 1 + 1 \cdot 0 = 1
  • \sum (x - \bar{x})^2 = (-1)^2 + 0^2 + 1^2 = 2
  • a = 1 / 2 = 0{,}5
  • b = \bar{y} - a\bar{x} = 2 - 0{,}5 \cdot 2 = 1

Optimální přímka je tedy \hat{y} = 0{,}5x + 1 (což odpovídá obrázku vpravo).

Obecná lineární regrese

Atributů, na základě kterých děláme odhady, je typicky více. Lineární model má pak parametr pro každý atribut. Například chceme odhadovat rychlost zvířete na základě jeho váhy a délky končetin:

\hat{y} = w_0 + w_1 x_1 + w_2 x_2

\hat{y} je odhad rychlosti, x_1 je váha, x_2 je délka končetin a w_i jsou parametry modelu, které se učíme (jako a, b v případě modelu s jedním atributem). Pro výpočet optimálních parametrů existuje vzorec, který je zobecněním výše uvedených vzorců pro přímku.

Lineární model může mít členy i pro nelineární transformace atributů. Například bychom pro odhad rychlosti zvířete mohli využít druhou mocninu jeho váhy: \hat{y} = w_0 + w_1 x_1 + w_2 x_2 + w_3 x_1^2. Důležité je, že funkce je lineární vzhledem k parametrům w_i, protože ostatní hodnoty jsou konkrétní čísla odvozená z atributů příkladu.

Lineární modely jsou dobře interpretovatelné. Čím vyšší je absolutní hodnota parametru, tím vyšší má přidružený atribut vliv na odhadovanou hodnotu. Pokud je parametr kladný, pak s rostoucí hodnotou atributu roste odhadovaná hodnota, zatímco pokud je parametr záporný, pak s rostoucí hodnotou atributu odhadovaná hodnota klesá.

Rozhodovací strom (angl. decision tree) zachycuje proces rozhodování na základě postupně kladených otázek (podmínek). Rozhodování podle rozhodovacích stromů si můžete procvičit ve cvičení Deaktivace bomby: rozhodovací stromy. Rozhodovací stromy se využívají ve strojovém učení jako jeden z modelů, podobně jako třeba lineární modely nebo neuronové sítě.

Určení predikce podle rozhodovacího stromu

Proces rozhodování lze zachytit diagramem ve tvaru stromu (typ grafu), jehož vnitřní uzly obsahují podmínky a listy (koncové uzly, které se již nevětví) obsahují predikce. První podmínka je v kořenovém uzlu a dále postupujeme po hranách (šipkách) do levého nebo pravého podstromu podle toho, zda podmínka pro daný příklad platí, nebo neplatí. Cestu z kořene do listu lze interpretovat jako složenou podmínku spojenou s jedním klasifikačním pravidlem. Nejpravější větev následujícího stromu zachycuje pravidlo: „Pokud má příšerka alespoň 4 ruce a alespoň 5 očí, tak je zlá.“.

Rozhodovací stromy lze využít na řešení klasifikačních i regresních úloh. Klasifikační rozhodovací strom má v listech predikované kategorie, regresní klasifikační strom predikované číselné hodnoty.

Učení rozhodovacích stromů

V případě klasifikačních úloh hledáme takový rozhodovací strom, který maximalizuje správnost (počet správně klasifikovaných případů, angl. accuracy) na zadané trénovací množině příkladů. Možných stromů je příliš mnoho na to, abychom mohli vyzkoušet všechny, proto strom tvoříme postupným přidáváním uzlů s podmínkami. (Tento přístup, kdy děláme lokálně optimální rozhodnutí, která však negarantují celkově optimální výsledek, se označuje jako hladový algoritmus.)

Začínáme s celým datasetem příkladů a hledáme podmínku, která rozdělí příklady na dvě co nejhomogenější skupiny. (Ideální podmínka by platila pro všechny příklady jedné kategorie a neplatila pro všechny příklady druhé kategorie – pak bychom totiž dosáhli nejvyšší možné správnosti predikcí.) Míru nehomogenity lze kvantifikovat například pomocí entropie nebo Gini indexu, což jsou podobné funkce, které jsou nulové pro zcela homogenní rozdělení a nejvyšší hodnotu mají pro rovnoměrné rozdělení (půlka příkladů z první kategorie, půlka příkladů z druhé kategorie).

Vybraná nejlepší podmínka se stává kořenem stromu. Stejný proces pak opakujeme pro každý podstrom, dokud dochází k zvyšování homogenity, dokud máme v uzlu dostatek příkladů a/nebo dokud strom není příliš hluboký. Predikce potom odpovídá nejčastější kategorii příkladů, které prošly do tohoto listu. (V případě regresních rozhodovacích stromů by to byla průměrná hodnota příkladů.)

Výhody a nevýhody rozhodovacích stromů

Rozhodovací stromy jsou jednoduché a velmi dobře interpretovatelné. Stromy lze přirozeně vizualizovat a pro jednotlivé predikce lze generovat jasná vysvětlení – složené podmínky dané cestou z kořene do listu. Tyto podmínky jsou navíc nad původními atributy, neboť rozhodovací stromy nevyžadují normalizaci atributů (oproti např. lineárním modelům). Rozhodovací stromy umožňují zachytit nelineární interakce mezi atributy, naopak však nedokáží efektivně zachytit lineární vztahy (jen přibližně pomocí velkého množství podmínek).

Rozhodovací stromy jsou náchylné k přeučení, čemuž lze předejít omezením hloubky a prořezáváním větví, které příliš nepřispívají k celkové správnosti predikcí. I při těchto opatřeních jsou však stromy nestabilní – malá změna dat může výrazně ovlivnit výsledný strom. Nestabilní jsou i jednotlivé predikce – malá změna jednoho atributu může způsobit skokovou změnu predikované hodnoty.

Rozšíření rozhodovacích stromů

Složitější modely kombinují více rozhodovacích stromů do jednoho modelu, aby zvýšili kvalitu predikcí. Náhodný les (angl. random forest) je agregace velkého množství rozhodovacích stromů naučených na náhodných podmnožinách trénovacích dat, jejichž predikce se průměrují. To zvyšuje stabilitu predikcí a snižuje náchylnost k přeučení. Nevýhodou je výrazně horší interpretovatelnost.

Pravděpodobnost ve strojovém učení

Přejít ke cvičením na toto téma »

Pravděpodobnost umožňuje pracovat s nejistotou, která je ve strojovém učení nevyhnutelná, neboť model musí odhadovat odpovědi i pro nové příklady, které nikdy předtím neviděl.

Základy pravděpodobnosti

Pravděpodobnost P(A) je číslo mezi 0 a 1 vyjadřující míru jistoty či očekávání, že se jev A stal nebo stane. Pokud ze 200 e-mailů 10 obsahuje slovo „zázračný“, pak je pravděpodobnost výskytu slova „zázračný“ P(„zázračný“) = 0,05 = 5 %. Pravděpodobnost opačného jevu \neg A je doplněk do jedničky, tj. P(\neg A) = 1-P(A). Pravdědodobnost, že e-mail neobsahuje slovo „zázračný“, je 0,95.

Podmíněná pravděpodobnost P(A \mid B) je pravděpodobnost jevu A za předpokladu, že nastal jev B. Podmíněnou pravděpodobnost spočítáme jako P(A \mid B) = P(A \cap B) / P(B), kde P(A \cap B) je pravděpodobnost současného výskytu obou jevů. Pokud mezi 200 e-maily bylo 20 spamů a z nich 8 obsahovalo slovo „výhra“, tak podmíněná pravděpodobnost, že e-mail obsahuje slovo „zázračný“, pokud je spam, je P(„zázračný“ | spam) = P(„zázračný“ ∩ spam) / P(spam) = 8 / 20 = 0,04 = 40 %.

Pokud jev B nijak neovlivňuje pravděpodobnost jevu A, tj. P(A \mid B) = P(A), pak označujeme jevy A, B jako nezávislé. Například hody mincí jsou nezávislé. Naopak výskyt slova „zázvračný“ není nezávislý na tom, zda jde o spam. Pravděpodobnost současného výskytu nezávislých jevů je rovna součinu jednotlivých pravděpodobností, tedy P(A \cap B) = P(A) \cdot P(B). (Obecně pro libovolné jevy platí P(A \cap B) = P(A) \cdot P(B \mid A) = P(B) \cdot P(A \mid B).)

Výpočty s pravděpodobností si můžete procvičit na Umíme matiku.

Bayesova věta

Často umíme snadno určit P(B \mid A), kde A způsobuje nebo ovlivňuje B, ale zajímá nás opačná podmíněná pravděpodobnost P(A \mid B). Z posbíraných dat umíme snadno vypočítat pravděpodobnost, že e-mail obsahuje slovo „zázračný“, pokud jde o spam, ale pro klasifikaci e-mailů potřebujeme znát opačnou podmíněnou pravděpodobnost – pravděpodobnost, že jde o spam, když text obsahuje slovo „zázračný“. V takových případech lze podmíněnou pravděpodobnost „otočit“ podle Bayesovy věty:

P(A \mid B) = \frac{P(B \mid A) \cdot P(A)}{P(B)}

Odvození Bayesovy věty

Pravděpodobnost, že nastane A i B, můžeme vyjádřit pomocí dvou různých podmíněných pravděpodobností (z definice podmíněné pravděpodobnosti):

P(A \cap B) = P(A \mid B) \cdot P(B)

P(A \cap B) = P(B \mid A) \cdot P(A)

Porovnáním pravých stran dostaneme:

P(A \mid B) \cdot P(B) = P(B \mid A) \cdot P(A)

Podělením obou stran P(B) již získáme Bayesovu větu:

P(A \mid B) = P(B \mid A) \cdot P(A) \mathbin{/} P(B)

Vzorec lze také vnímat jako update původní (nepodmíněné) pravděpodobnosti P(A) (prior) s přihlédnutím k nové informaci, že nastal jev B. Zpřesněná (podmíněná) pravděpodobnost P(A \mid B) se pak označuje jako posterior.

Příklad použití Bayesovy věty

Chceme určit pravděpodobnost, že má pacient rakovinu, pokud má pozitivní test. Prevalence rakoviny v testované populaci je 1 %. Pokud má pacient rakovinu, pak je test pozitivní v 90 %, pokud pacient rakovinu nemá, pak je test pozitivní ve 20 %.

Označme si T = pozitivní test, R = rakovina. Ze zadání víme: P(R) = 0{,}01, P(T \mid R) = 0{,}9, P(T \mid \neg R) = 0{,}2.

K použití Bayesovy věty potřebujeme spočítat celkovou pravděpodobnost pozitivního testu:

P(T) = P(R) \cdot P(T \mid R) + P(\neg R) \cdot P(T \mid \neg R)

Podle Bayesovy věty:

P(R \mid T) = P(R) \cdot P(T \mid R) / P(T) = 0{,}01 \cdot 0,9 / (0{,}01 \cdot 0{,}9 + 0{,}99 \cdot 0{,}2) = 0{,}009 / (0{,}009 + 0{,}198) = 0{,}009 / 0{,}207 = 0{,}043 = 4{,}3 \%

Pravděpodobnost rakoviny je tedy v této situaci i při pozitivním testu pouze 4,3 %. To se může zdát málo, ale je to dáno tím, že test je nezřídka pozitivní i pro pacienty bez rakoviny a těch je přitom v populaci výrazně více.

Pravděpodobnostní klasifikátor

Pravděpodobnostní modely lze nejsnáze využít pro řešení klasifikačních úloh (např. rozhodnout, zda je daný e-mail spam). Označme X příklad, který chceme klasifikovat, X_1, X_2, \ldots, X_n jeho jednotlivé atributy (např. přítomnost různých slov v textu e-mailu) a Y možné kategorie (spam / normální e-mail). Chceme predikovat kategorii s větší podmíněnou pravděpodobností P(Y \mid X). Tyto pravděpodobnosti můžeme spočítat s využitím Bayesovy věty:

P(Y \mid X) = P(X \mid Y) \cdot P(Y) \mathbin{/} P(X)

Zatímco určení P(Y) je snadné (spočítáme, jaký podíl e-mailů v trénovacích datech jsou spam), určení P(X \mid Y) vyžaduje exponenciálně mnoho příkladů vzhledem k počtu atributů (potřebovali bychom e-maily se všemi možnými kombinacemi uvažovaných slov). Možným řešením je pravděpodobnostní rozdělení odhadovat pouze přibližně pomocí nějakého modelu, který nemá exponenciální počet parametrů (např. neuronová síť).

Naivní Bayesův klasifikátor

Pro mnohé jednoduché problémy však stačí výrazně jednodušší řešení: předpokládat, že jednotlivé atributy jsou na sobě podmíněně nezávislé (při znalosti kategorie). Pak nám totiž stačí n jednoparametrických podmíněných pravědpodobností:

P(Y \mid X) = P(Y) \cdot P(X_1 \mid Y) \cdot P(X_2 \mid Y) \cdot \ldots \cdot P(X_n \mid Y) \mathbin{/} P(X)

Tento model se označuje jako Naivní Bayesův klasifikátor. Slovo „naivní“ se odkazuje právě na předpoklad podmíněné nezávislosti atributů, který typicky neplatí (např. přítomnost slova „zázračný“ zvyšuje pravděpodobnosti slova „lék“ i pokud víme, že jde o spam). Odhadnuté pravděpodobnosti tak můžou být hodně nepřesné. Pro úspěšnou klasifikaci však není podstatné, zda jsou pravděpodobnosti odhadnuté přesně, ale zda má skutečná kategorie nejvyšší odhadnutou pravděpodobnost, což často platí. Výhodou je nízký počet parametrů (lineární vzhledem k počtu atributů), nízký počet příkladů potřebných k učení a také rychlé učení (přímočarý výpočet hodnot parametrů).

Bayesovské sítě

Naivní Bayesův klasifikátor předpokládá, že jsou všechny atributy podmíněně nezávislé. V některých případech víme, že některé atributy nezávislé jsou a jiné nejsou. Takovou situaci můžeme modelovat pomocí Bayesovských sítí, což je orientovaný graf zachycující vztahy mezi pozorovanými a skrytými proměnnými (pozorované proměnné jsou na obrázcích níže podbarvené šedě):

Naivní Bayesův klasifikátor je speciální typ Bayesovské sítě s následující jednoduchou strukturou:

Existují další speciální typy Bayesovských sítí, např. skryté Markovovy modely, znázorňujı́cı́ časovou posloupnost skrytých stavů (poloha robota, vyslovovaný text), v nı́ž každý stav závisı́ pouze na jednom předchozı́m stavu a produkuje pozorovatelné měření (měření ultrazvukového senzoru, zaznamenaný zvuk).

Zde uvádíme přehled pojmů, se kterými se můžete často potkat v textech o strojovém učení. Mnoho z nich zatím nemá ustálené české překlady, proto se i v českých textech často používají anglické výrazy (níže uvedené kurzivou v závorce). Podrobnější vysvětlení jednotlivých pojmů najdete v dílčích tématech strojového učení.

pojem popis
strojové učení učení programů na základě dat
model mapování vstupů na výstupy (řešení úlohy strojového učení)
datová sada (dataset) data pro trénování modelu
příklad (example) jeden kompletní vstup pro model (řádek datasetu)
atribut (feature) informace o příkladech použitá modelem (sloupec datasetu)
štítek (label) správný výstup pro daný příklad
anotování dat přiřazování správných výstupů (štítků)
označkovaná data data s požadovaným výstupem (štítkem)
predikce předpověď, odhad (výstup modelu)
inference vytvoření odhadů natrénovaným modelem
učení s učitelem (supervised learning) přístup ke strojovému učení využívající označkovaná data
učení bez učitele (unsupervised learning) přístup ke strojovému učení využívající neoznačkovaná data
učení s částečným dohledem (semi-supervised learning) přístup ke strojovému učení využívající označkovaná i neoznačkovaná data
posilované učení, zpětnovazební učení (reinforcement learning) učení skrze interakci s prostředím zahrnující zpětnou vazbu na provedené akce
klasifikace úloha určit příslušnost příkladu k jedné z několika předem daných kategorií (např. žánr knížky)
regrese úloha určit číselnou hodnotu pro daný příklad (např. hodnocení knížky)
řazení (ranking) úkol uspořádat příklady (např. doporučení knížek)
detekce anomálií úkol odhalit příklady, které se výrazně liší od zbytku dat
shlukování (clustering) úloha rozdělit příklady do skupin (shluků, clusters) s podobnými vlastnostmi
generativní umělá inteligence (generative AI) modely generující komplexní výstupy, např. odpovědi nebo obrázky
lineární model model určující výstup na základě váženého součtu atributů
rozhodovací strom (decision tree) model určující výstup na základě posloupnosti podmínek
náhodný les (random forest) model složený z mnoha rozhodovacích stromů
neuronová síť model volně inspirovaný strukturou mozku, složený z mnoha propojených „neuronů“ počítajících jednoduchou funkci, typicky organizovaných do vrstev
hluboké učení (deep learning) učení neuronových sítí s mnoha vrstvami
velký jazykový model (Large Language Model, LLM) rozsáhlá neuronová síť predikující pravděpodobnost dalšího slova (např. GPT)
transformátor (transformer) typ neuronové sítě umožňující efektivní učení na rozsáhlých datech (T v GPT znamená právě transformátor)
parametry, váhy hodnoty modelu, které lze měnit během učení
gradientní sestup (gradient descent) učící algoritmus, který opakovaně mění parametry modelu ve směru největší změny (gradientu) chybové funkce
stochastický gradientní sestup (SGD) efektivní varianta gradientního sestupu využivají prvek náhodnosti
trénovací data data použitá k učení modelu
testovací data data použitá k vyhodnocení modelu
generalizace schopnost predikovat správné výstupy i pro nová data (tedy zobecňovat)
memorizace pouhé zapamatování správných výstupů trénovací data
podučení (underfitting) model má vysokou chybovost, protože je příliš jednoduchý na danou úlohu
přeučení (overfitting) přesné zapamatování trénovacích dat na úkor schopnosti generalizovat
regularizace metody zabraňující přeučení, např. penalizace komplexity modelu
zkreslení, předpojatost, (bias) systematická chyba, která vede k neférovým důsledkům
výběrové zkreslení (selection bias) typ zkreslení, kdy data nereprezentují adekvátně všechny typy případů
základní model (baseline) jednoduché řešení úlohy použité pro srovnání se složitějšími metodami
metrika hodnota vyjadřující kvalitu modelu
střední kvadratická chyba (mean squared error) metrika pro regresní úlohy, průměrná druhá mocnina odchylky mezi predikovanou a skutečnou hodnotou
správnost (accuracy) metrika pro klasifikační úlohy, podíl správných odpovědí
přesnost (precision) metrika pro klasifikační úlohy, kolik ze všech označených příkladů je pozitivních
pokrytí (recall) metrika pro klasifikační úlohy, kolik ze všech pozitivních příkladů model detekoval
matice záměn (confusion matrix) tabulka zobrazující, kolik kterých kategorií bylo jak klasifikováno
tenzorové procesy, TPU (Tensor Processing Unit) procesory specializované na strojové učení
NAPIŠTE NÁM

Děkujeme za vaši zprávu, byla úspěšně odeslána.

Napište nám

Nevíte si rady?

Nejprve se prosím podívejte na časté dotazy:

Čeho se zpráva týká?

Vzkaz Obsah Ovládání Přihlášení Licence