Programování a vývoj SWNěco málo o programování a světě vývojářů

Umělá inteligence pomocí regresní analýzy

Publikováno 19.09.2017 v 10:09 v kategorii Programování, přečteno: 51x

Umělou inteligenci lze programovat jistě mnoha způsoby. Za zvlášť zajímavé považuji porovnání umělé inteligence vytvořené pomocí neuronových sítí a pomocí regrese. Neuronové sítě jsou dnes velmi populární téma. Ale pojďme se podívat, zda jde skutečně o revoluci?





Nejsem zajisté první, koho napadlo porovnávat neuronové sítě s regresní analýzou. Na toto téma existuje řada i vědeckých článků, které se k odpovědi nestaví jednoznačně. Obvykle neuvádějí jediný smysluplný případ, kdy by se neuronová síť nedala nahradit několikanásobnou polynomickou regresí.
Např. zde:
odkaz
odkaz

Ale vezměme to raději od začátku.

Neuronové sítě
Jsou postaveny na architektuře, kde je vstupní vrstva (s libovolným počtem vstupů a vah těchto vstupů). Dále je tam neuron jako takový agregát vstupních hodnot, přes který se vstupy zváží podle jejich vah a na základě prahové hodnoty pošle do (neuronové) sítě výstup v podobě 1/0. Prahová hodnota se určí nějakou funkcí.

Zde je taková lekce no.1 o neuronových sítích (v CZ):
odkaz

K testování neuronových sítí existuje řada aplikací, které umožňují i neuronové sítě stavět. Problém je ale v tom, že pokud nevezmete do ruky žádnou z již existujících aplikací, avšak pokusíte se vlastními prostředky síť naprogramovat, dojdete k závěru, že je to vlastně velmi jednoduché. A co je na tom nejvíc zarážející, že se pracuje s fuzzy logikou (tj. vícehodnotovou), která se ve výsledku redukuje pomocí funkce/prahové hodnoty zase na dvouhodnotovou logiku. Takže celý ten aparát s neurony je vlastně jen imaginace, obrázek pro představu, jak pracuje algoritmus, který v rámci programu používáte. Jinými slovy, žádná neuronová síť tam není, je to pouze jeden algoritmus z mnoha, jedna metoda z mnoha.

Obecně je třeba pamatovat na toto: Na počítačích mohou probíhat nejrůznější druhy modelování, můžeme simulovat různé algoritmy fuzzy logiky i jakékoli jiné druhy alternativních logik, ale všechny tyto modely probíhají na stroji (hardwaru), který je postaven přísně na principu dvouhodnotové logiky a který v konečném důsledku pracuje se strojovým kódem, který jinou než binární logiku nezná. Jde tak vždy o redukci každého simulovaného algoritmu do dvouhodnotové algebry, což vlastně není v přísném slova smyslu aplikace vícehodnotové logiky. Tak jak je teorie logiky postavená, mělo by to být obráceně: dvouhodnotová logika je jen mezním případem fuzzy logiky. Měli bychom mít tedy stroj postavený na fuzzy logice a na něm být schopni simulovat logiku binární.

Jakmile si toto člověk uvědomí a odhodí tu obrázkovou slupku, začne nad tím přemýšlet matematicky. K dispozici je totiž více matematických metod, jak zpracovávat sady dat nebo řekněme matice čísel. A otázka se přímo nabízí - zda metoda neuronových sítí je natolik převratná a umožňuje zpracovávat data tak, že to podobným způsobem nedokáže žádná klasická matematická metoda?

Edit: Pokud má mít umělá inteligence nějaký smysl a nepracovat na binární logice, je třeba jít touto cestou: odkaz

Regresní analýza
Nejjednodušší způsob jak pracovat s nějakou sadou dat a vyvodit z ní potřebné výsledky, je statistická regresní analýza. Jde např. o rekonstrukci vzorce, který nám umožní pochopit řadu čísel (a pokračovat v ní):

2, 4, 6, 8 ...

Pokud by měl člověk doplnit další číslo řady, doplní 10, aniž by potřeboval nějaký vzorec. Je mu to jasné jen z intuice; na první pohled vidí, jak bude řada pokračovat třeba donekonečna. Počítač ale potřebuje řadu "pochopit". Jakmile ji pochopí, může také pokračovat donekonečna. A k tomu mu snadno poslouží právě regresní analýza. V tomto případě je to jednoduché, protože jde o tzv. lineární regresi, takže tam nejsou žádná úskalí a řada pravděpodobně pokračuje dále přičtením dvojky.

Tedy podle vzorce:
y = 2 * x

kde x je číslo pořadí členu, y výsledek. Čili pokud chci vědět 5. číslo v řadě, bude to y=2*5 = 10. K tomuto vzorci však existuje ne úplně triviální cesta a počítač musí provést právě regresní analýzu. Tu najdete např. tady na wikipedii, přičemž lineární regrese je nejjednodušší případ: odkaz

Jestliže je řada komplikovanější, člověk už ji odhaduje jen ztěžka (často podle své inteligence, což bývá jako známo i předmětem inteligenčních testů). Toto už je těžší řada. Jde o exponenciální řadu, takže počítač musí provést exponenciální regresní analýzu a teprve poté na to přijde.

2, 4, 8, 16, 32 ...

Podobně obtížná může být sinusoidní regrese:

1, 2, 3, 4, 3, 2, 1, 2, 3, 4 ...

Nutno říci, že řady nemusejí mít vždy "smysl", může jít o svým způsobem náhodné hodnoty (např. počet obyvatel v obci v každém roce):

742, 721, 784, 790 ...

I z takové řady se dá nicméně vysledovat nějaký trend pomocí regresní analýzy.

V umělé inteligenci jde právě o takovéto případy. Řekněme, že terén, po kterém musí nějaký robot jít, je náhodný a musí se mu přizpůsobovat. Pokud to bude jen plocha či šikmá plocha, přizpůsobí se mu snadno (lineární regrese). Pokud to bude most, přizpůsobí se mu ještě také snadno (kvadratická regrese). Ale pokud půjde po kamenech na Marsu, bude terén obtížně předvídatelný.

Přesto se dá po takovém povrchu naučit chodit. Robota můžeme naprogramovat neuronovými sítěmi nebo regresní analýzou. V případě regresní analýzy použijeme tzv. polynomickou regresi, která navíc může svůj výsledek zpřesňovat na základě předchozích úspěchů/neúspěchů (vícenásobná regrese).

Zde je nějaká teorie: odkaz

Pro příklad jsem přesně takto pomocí metody regrese naučil chodit kuře (je to celkem jednoduchý program, který se dá všemožně modifikovat a sofistikovat). Není předem nijak naprogramované, ale je "inteligentní" a učí se. Na začátku své dráhy se vždy podívá na terén a snaží se mu "porozumět". Nejprve mosty (ty mu jdou snadno, neboť rychle trefí kvadratickou rovnici). Složitější terén pak musí projít mnohokrát, sestaví si polynomické rovnice a pořád je vylepšuje. Nakonec se mu podaří přizpůsobit jakémukoli náhodnému terénu.

Přikládám to jako primitivní důkaz, že i klasické matematické metody mohou být využity pro programování umělé inteligence a mohou být velmi efektivní. Bylo by ostatně zajímavé porovnat - a to je otázka, v čem přesně bývá neuronová síť úspěšnější než regresní analýza, respektive v čem naopak zaostává. Legitimní je i otázka, zda jde regresní analýzu simulovat neuronovými sítěmi.

Ještě řeknu - kuře na videu je velice učenlivé a dokáže se naučit prakticky cokoliv. Zde na tomto odkazu jsou příklady umělé inteligence pomocí neuronových sítí (odkaz). Právě tento proces učení lze rekonstruovat regresní analýzou, jinými slovy neuronových sítí není - minimálně v tomto případě - potřeba.

Komentáře

Celkem 0 komentářů

  • Neregistrovaný uživatel

    Jméno: Přihlásit se

    Blog:

    Obsah zprávy*:

    Kontrolní kód*:
    Odpovězte na otázku: Co je dnes za den?