APLIKACE INTELIGENTNÍHO ŘÍZENÍ. Studijní opory. Ing. Vít Pasker

Podobné dokumenty
Architektura - struktura sítě výkonných prvků, jejich vzájemné propojení.

Rosenblattův perceptron

5. Umělé neuronové sítě. Neuronové sítě

Fiala P., Karhan P., Ptáček J. Oddělení lékařské fyziky a radiační ochrany Fakultní nemocnice Olomouc

Umělé neuronové sítě

ANALÝZA A KLASIFIKACE BIOMEDICÍNSKÝCH DAT. Institut biostatistiky a analýz

Neuropočítače. podnět. vnímání (senzory)

Asociativní sítě (paměti) Asociace známého vstupního vzoru s daným výstupním vzorem. Typická funkce 1 / 44

Ambasadoři přírodovědných a technických oborů. Ing. Michal Řepka Březen - duben 2013

U Úvod do modelování a simulace systémů

Neuronové sítě v DPZ

5. Umělé neuronové sítě. neuronové sítě. Umělé Ondřej Valenta, Václav Matoušek. 5-1 Umělá inteligence a rozpoznávání, LS 2015

Algoritmy a struktury neuropočítačů ASN P4. Vícevrstvé sítě dopředné a Elmanovy MLNN s učením zpětného šíření chyby

Vytěžování znalostí z dat

Neuronové časové řady (ANN-TS)

Neuronové sítě AIL002. Iveta Mrázová 1 František Mráz 2. Neuronové sítě. 1 Katedra softwarového inženýrství. 2 Kabinet software a výuky informatiky

TEORIE ZPRACOVÁNÍ DAT

Úvod do optimalizace, metody hladké optimalizace

Vysoká škola báňská Technická univerzita Ostrava TEORIE ÚDRŽBY. učební text. Jan Famfulík. Jana Míková. Radek Krzyžanek

Neuronové sítě. Vlasta Radová Západočeská univerzita v Plzni katedra kybernetiky

VY_32_INOVACE_E 15 03

Neuronové sítě Ladislav Horký Karel Břinda

Projekční algoritmus. Urychlení evolučních algoritmů pomocí regresních stromů a jejich zobecnění. Jan Klíma

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Algoritmy a struktury neuropočítačů ASN - P11

Emergence chování robotických agentů: neuroevoluce

2. RBF neuronové sítě

Algoritmy a struktury neuropočítačů ASN - P1

PV021: Neuronové sítě. Tomáš Brázdil

3. Vícevrstvé dopředné sítě

Využití neuronové sítě pro identifikaci realného systému

Trénování sítě pomocí učení s učitelem

Moderní systémy pro získávání znalostí z informací a dat

7. Funkce jedné reálné proměnné, základní pojmy

Automatizace je proces při němž je řídicí funkce člověka nahrazována činností

Programování v C++ 3, 3. cvičení

13 Barvy a úpravy rastrového

Úvod do zpracování signálů

Principy počítačů I Netradiční stroje

Matematika (KMI/PMATE)

Klíčové pojmy: Informační mohutnost, mozek, myšlení, nepřesné algoritmy, neuron, neuronová síť, simulace, umělá neuronová síť.

Úvod do modelování a simulace. Ing. Michal Dorda, Ph.D.

0.1 Funkce a její vlastnosti

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Příklady použití tenkých vrstev Jaromír Křepelka

0.1 Úvod do matematické analýzy

Matematika I (KMI/PMATE)

Globální matice konstrukce

OPTIMALIZACE A MULTIKRITERIÁLNÍ HODNOCENÍ FUNKČNÍ ZPŮSOBILOSTI POZEMNÍCH STAVEB D24FZS

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Algoritmy a struktury neuropočítačů ASN P9 SVM Support vector machines Support vector networks (Algoritmus podpůrných vektorů)

SIGNÁLY A LINEÁRNÍ SYSTÉMY

Vyhodnocení 2D rychlostního pole metodou PIV programem Matlab (zpracoval Jan Kolínský, dle programu ing. Jana Novotného)

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

2. Množiny, funkce. Poznámka: Prvky množiny mohou být opět množiny. Takovou množinu, pak nazýváme systém množin, značí se

Pokročilé operace s obrazem

Moderní technologie ve studiu aplikované fyziky CZ.1.07/2.2.00/ Množiny, funkce

METODY DOLOVÁNÍ V DATECH DATOVÉ SKLADY TEREZA HYNČICOVÁ H2IGE1

Evoluční výpočetní techniky (EVT)

Dobývání znalostí. Doc. RNDr. Iveta Mrázová, CSc. Katedra teoretické informatiky Matematicko-fyzikální fakulta Univerzity Karlovy v Praze

ZÁKLADY AUTOMATICKÉHO ŘÍZENÍ

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Nelineární obvody. V nelineárních obvodech však platí Kirchhoffovy zákony.

4EK201 Matematické modelování. 2. Lineární programování

SEKVENČNÍ LOGICKÉ OBVODY

Aplikovaná numerická matematika

Genetické algoritmy. Informační a komunikační technologie ve zdravotnictví

Zada ní 1. Semina rní pra ce z pr edme tu Matematický software (KI/MSW)

NEURONOVÉ SÍTĚ A EVOLUČNÍ ALGORITMY NEURAL NETWORKS AND EVOLUTIONARY ALGORITHMS

Pseudospektrální metody

MATURITNÍ TÉMATA Z MATEMATIKY

Jak se matematika poučila v biologii

Profilová část maturitní zkoušky 2017/2018

5. Lokální, vázané a globální extrémy

Neuronové sítě (11. přednáška)

0.1 Úvod do lineární algebry

Fuzzy množiny, Fuzzy inference system. Libor Žák

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Numerické metody a programování. Lekce 8

Teorie her a ekonomické rozhodování. 2. Maticové hry

Komplexní čísla, Kombinatorika, pravděpodobnost a statistika, Posloupnosti a řady

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

0.1 Úvod do lineární algebry

1 Modelování systémů 2. řádu

1 Nejkratší cesta grafem

B) výchovné a vzdělávací strategie jsou totožné se strategiemi vyučovacího předmětu Matematika.

Státnice odborné č. 20

SIGNÁLY A LINEÁRNÍ SYSTÉMY

(Cramerovo pravidlo, determinanty, inverzní matice)

SIGNÁLY A LINEÁRNÍ SYSTÉMY

Neuronové sítě. 1 Úvod. 2 Historie. 3 Modely neuronu

7. Rozdělení pravděpodobnosti ve statistice

5. Optické počítače. 5.1 Optická propojení

Algoritmizace prostorových úloh

ELT1 - Přednáška č. 6

CW01 - Teorie měření a regulace

Úloha - rozpoznávání číslic

Přednáška 13 Redukce dimenzionality

4EK213 LINEÁRNÍ MODELY

Kódováni dat. Kódy používané pro strojové operace

CVIČENÍ 4 Doc.Ing.Kateřina Hyniová, CSc. Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze 4.

Transkript:

APLIKACE INTELIGENTNÍHO ŘÍZENÍ Studijní opory Ing. Vít Pasker Ostrava 2018

Název: Autor: Aplikace inteligentního řízení Ing. Vít Pasker Vydání: první, 2018 Studijní materiály pro studijní opory Aplikace inteligentního řízení Fakulty metalurgie a materiálového inženýrství. Jazyková korektura: nebyla provedena. VŠB Technická univerzita Ostrava 2

POKYNY KE STUDIU Název předmětu Pro předmět Aplikace inteligentního řízení studijního oboru Automatizace a počítačová technika v průmyslu jste obdrželi balík obsahující integrované skriptum pro kombinované studium obsahující i pokyny ke studiu. Prerekvizity Pro studium tohoto předmětu se nepředpokládá nutnost absolvování jakéhokoliv předešlého předmětu. Doporučením zůstávají znalosti nabyté z předmětů: Metody umělé inteligence Matematické prostředky informatiky Cíl předmětu a výstupy z učení Předmět se zabývá umělými inteligencemi a jejich realizací v softwarových aplikacích. Po dostudování předmětu by měl student být schopen: Definovat neuronové sítě Popsat Hopfieldovu síť a využít ji na konkrétních příkladech Popsat síť back propagation a využít ji na konkrétních příkladech Popsat genetické algoritmy a využít je na konkrétních příkladech Způsob komunikace s vyučujícím Student má možnost kontaktu s vyučujícím pomocí pracovního telefonu a emailu uvedeného v telefonním seznamu VŠB-TU, popřípadě osobně v rámci konzultačních hodin přednášejícího či cvičícího. 3

STRUKTURA KAPITOL Čas ke studiu Na úvod kapitoly je uveden čas potřebný pro prostudování látky. Čas je orientační a může Vám sloužit jako hrubé vodítko pro rozvržení studia celého předmětu. Někomu se čas může zdát příliš dlouhý, někomu naopak. Jsou studenti, kteří se s touto problematikou ještě nikdy nesetkali a naopak takoví, kteří již v tomto oboru mají bohaté zkušenosti. Cíl Ihned poté jsou uvedeny cíle, kterých máte dosáhnout po prostudování této kapitoly konkrétní znalosti a dovednosti. Výklad Následuje vlastní výklad studované látky, zavedení nových pojmů, jejich vysvětlení, vše doprovázeno obrázky, tabulkami, řešenými příklady, odkazy na animace. Čas k zamyšlení V rámci studia kapitol se setkáte s otázkami a problémy, které je vhodné si pro správné osvojení látky promyslet. Správná řešení navazují na položené otázky, proto nepokračujte ve čtení, dokud si vše dobře nepromyslíte. Příklad z praxe, Řešený příklad K lepšímu pochopení probírané látky využijte praktické příklady aplikace vysvětlovaných teoretických znalostí. Animace, Video Ke zvýšení názornosti studované látky doprovázejí výklad animace, k dokreslení a rozšíření znalostí pak videa. Shrnutí pojmů Na závěr kapitoly jsou zopakovány hlavní pojmy, které si v ní máte osvojit. Pokud některému z nich ještě nerozumíte, vraťte se k nim ještě jednou. 4

Otázky otázek. Pro ověření, že jste dobře a úplně látku kapitoly zvládli, máte k dispozici několik teoretických Použitá literatura Na úplný závěr kapitoly je uvedena použitá literatura, z které je možno čerpat další informace z dané problematiky. Klíč k řešení Na konci studijních opor naleznete klíč k řešení úloh a odpovědi na otázky. Úspěšné a příjemné studium s touto učebnicí Vám přeje autor výukového materiálu Ing. Vít Pasker 5

OBSAH POKYNY KE STUDIU... 3 STRUKTURA KAPITOL... 4 OBSAH... 6 1 NEURONOVÉ SÍTĚ... 7 1.1 Základní pojmy... 7 1.2 Základní biologické poznatky o neuronech a neuronových sítích... 11 1.3 Umělé neuronové sítě... 12 1.4 Výkonný prvek umělé neuronové sítě... 13 1.5 Hopfieldova síť... 14 1.5.1 Uspořádání sítě... 14 1.5.2 Učení a vybavování v Hopfieldově sítí... 15 1.5.3 Příklad softwaru využívající Hopfieldovu síť... 16 1.6 Back propagation... 20 1.6.1 Datové struktury sítě... 20 1.6.2 Struktura neuronu... 21 1.6.3 Struktura vrstev... 21 1.6.4 Struktura neuronové sítě... 22 1.6.5 Výpočet hodnot sítě... 22 1.6.6 Výpočet a propagace hodnot sítě... 23 1.6.7 Trénování sítě... 23 1.6.8 Aplikace... 25 2 GENETICKÉ ALGORITMY... 28 2.1 Základní pojmy... 28 2.2 Účelová funkce jako geometrický problém... 30 2.3 Příklad softwaru pro využívající genetický algoritmus... 31 3 FUZZY LOGIKA... 33 3.1 Aplikace využívající Fuzzy logiku... 33 4 ZDROJOVÉ KÓDY... 38 4.1 Hopfieldova síť asynchronní rekurentní síť... 38 4.2 Genetický algoritmus... 45 6

1 NEURONOVÉ SÍTĚ Čas ke studiu 8 hodin Cíl Po prostudování této kapitoly budete umět: Definovat neuronové sítě Definovat Hopfieldovou síť Definovat Back-propagation Definovat umělou neuronovou síť Popsat neuron Výklad 1.1 ZÁKLADNÍ POJMY Adaline - klasická umělá neuronová síť perceptronovského typu s binárními výkonnými prvky. Jejich váhy jsou nastavitelné a učení probíhá tzv. delta pravidlem. Adaptace - schopnost umělé neuronové sítě k samoorganizaci. Realizuje se obvykle změnami vah během učení. Aktivita neuronu - stav jedné buňky. Je funkcí váženého součtu jeho vstupů, prahů a dosavadní aktivity. Počítá se z ní hodnota jeho výstupu. Ve stejném významu se používá i pojem vnitřní potenciál neuronu. Asociativní učení - metoda učení umělé neuronové sítě. Vstupní vektor sítě je v tomto případě i jejím vektorem výstupním. Neuronová síť se učí tím, že asociuje vstupní vektor se sebou samým. Architektura - struktura sítě výkonných prvků, jejich vzájemné propojení. ART - Adaptivní rezonanční teorie. Umělá neuronová síť mající zpětnovazební charakter, tzn. že mezi vstupy neuronů ve vrstvě jsou i výstupy z téže vrstvy. Tento typ neuronové sítě byl vyvíjen podle biologického vzoru a díky speciální architektuře má zajímavé vlastnosti. Patří mezi ně zejména fakt, že jednou naučené vzory už zůstávají během dalších stabilní, síť se neodučuje. Axon - výstup neuronu. Je mohutně rozvětvený a prostřednictvím synapsí vysílá signály do jiných neuronů. Back-propagation (zpětné šíření) - učící algoritmus vícevrstevnatých dopředných (nerekurentních) neuronových sítí. Při něm se chyba výstupní vrstvy zpětně 7

přepočítává do předchozích vrstev (zpětně se šíří) a podle její hodnoty se upravují jednotlivé váhy. Bázový prvek - jeden z prvků umělé neuronové sítě, který je stále aktivní. Jeho výstup se přivádí (vynásobený příslušnou váhou) do všech ostatních výkonných prvků jako jejich práh. Binární neuron - výkonný prvek, jehož výstup nabývá právě jedné ze dvou různých hodnot (aktivní, neaktivní). Boltzmannův stroj - symetrická binární zpětnovazební síť se skrytou vrstvou, u které se při vybavování užívá simulovaného žíhání. Tato síť je v mnoha aspektech podobná síti Hopfieldově. Díky zpětným vazbám ve skryté vrstvě je při učení zapotřebí speciální učící algoritmus. Brain-state-in-a-box - je zpětnovazební nelineární síť odvozená z Hopfieldovy sítě. Připouští se však reálné hodnoty aktivity vnitřního potenciálu. Výkonné prvky jsou propojeny samy se sebou a po ustálení sítě jsou buď aktivní nebo neaktivní. Cílový vektor - žádaný výstupní vektor patřící k nějakému vektoru vstupnímu. Tento vektor musí být při učení s učitelem znám. Delta pravidlo - pravidlo pro učení s učitelem, u kterého se změnou vah dosahuje stále zmenšujícího rozdílu mezi žádanou a skutečně dosaženou hodnotou výstupu. Dopředná (nerekurentní) síť - moderní vícevrstvá a částečně samoorganizující se síť. Samostatně klasifikuje vstupní vektory tak, že jim přiřazuje odpovídající výstupní hodnoty. Je v ní jednoznačně definován informační tok. V takové síti neexistují spoje mezi neurony z vyšších vrstev zpět do vrstev nižších, dokonce ani spojení mezi neurony v téže vrstvě. Dynamika - pravidlo, na jehož základě jednotlivé výkonné prvky neuronové sítě mění svůj stav. Patří k ní vstupní funkce, aktivační (výstupní) funkce neuronů, jakož i předpis pro posloupnost výpočtů jednotlivých výstupů. Excitace - je takové působení aktivního neuronu, že při něm v připojených neuronech dochází k růstu jejich vnitřního potenciálu. Energetická funkce - energie je mírou naučennosti, tedy odchylky mezi skutečnými a požadovanými hodnotami výstupů neuronové sítě pro danou trénovací množinu. Hammingonova síť - optimální minimální klasifikátor Hebbovské učící pravidlo - původní učící předpis pro učení bez učitele. Je analogií průběhu učení v lidském nervovém systému. Přeneseno do umělých neuronových sítí říká, že častější používání tohokterého spoje posiluje jeho hodnotu váhy. K této základní formulaci existuje mnoho variant. Heteroasociativní síť - je učení s učitelem. Vstupní vektor neuronové sítě se v tomto případě od žádaného výstupu liší. Pro učení musí být žádaný výstupní vektor k dispozici. Hopfieldova síť - zpětnovazební symetrická neuronová síť s binárními neurony. Používá se zejména k identifikaci zašumělých vstupních vzorů. Inhibice - je opakem excitace. Buňka má inhibiční chování, je-li v aktivním stavu a snižuje-li vnitřní potenciál v neuronech, které jsou s ní spojeny. Kohenenova síť - učící pravidlo, ve kterém si výkonné prvky při předkládání vstupních vzorů vzájemně konkurují. 8

Lineární asociátor - je jednoduchá lineárně pracující síť, jejíž matici vah vypočítáváme podle Hebbovského pravidla učení. Představuje nejjednodušší formu dělené asociativní paměti. Madaline - je o jednu vrstvu rozšířená síť Adaline. Má zvláštní metodu učení, protože na rozdíl od Adaline obsahuje jednu skrytou vrstvu. Neuron - buňka nervového systému. Neuron je anatomicky i funkčně základním stavebním kamenem nervového systému a posloužil jako vzor pro výkonný prvek v umělých neuronových sítích. Neuronová síť - počítačová architektura podobná mozku. Proti klasickým počítačům má celou řadu výhod: je odolná proti chybám, má schopnost se učit, dovede abstrahovat i generalizovat. Obousměrná asociativní paměť - dvouvrstvá síť s binárními výkonnými prvky a symetrickým propojením, je zobecněním Hopfieldovy sítě. Díky zpětnovazebnímu propojení se mezi vrstvami dosahuje rezonance a síť po jisté době dosáhne stabilního stavu. Paměť adresovatelná obsahem - paměťový blok nebo jeho část, jehož obsah je přístupný pouze pomocí jistého vzoru. Ten může být i zatížen šumem, takže tento vstupní vzor nemusí přesně odpovídat. Perceptron - je jednoduchá dopředná síť bez skrytých vrstev. To znamená, že jen jednu vrstvu této sítě lze učit. Klasickou hranicí schopností perceptronu je XOR- problém. Práh - hodnota, kterou musí součet všech vážených vstupů neuronu překročit, aby se stal aktivním. Problém obchodního cestujícího - kombinatorická úloha, ve které se hledá nejkratší cesta předem známým počtem míst. S tímto problémem se setkáváme v řadě nejrůznějších oborů. Přeučování - učící proces, ve kterém se maže jistý počet vah. V kontrastu k normálnímu učení už při přeučování síť jistý objem informací obsahovala. Rozpoznávání vzorů, obrazů - rozpoznávání naučených vzorů v zašumělých vstupních datech. Vstupní i výstupní data se obvykle prezentují vektorovou formou. Rozpoznávání znaků - interpretace vizuálních symbolů. Rozpoznávání číslic, alfabetických znaků nebo jiných, třeba i ručně psaných, symbolů. Jde sice o klasický, ale velmi složitý problém. Samoorganizace - schopnost neuronové sítě učením přizpůsobit své chování k vyšetření daného problému. Schopnost asociace - vlastnost neuronové sítě odhalit podobnosti mezi naučenými vzory a vstupními daty. Simulace neuronových sítí - použití současných počítačových systémů, které strukturu a paralelní způsob práce neuronových sití svými prostředky a obvykle jen sériově simulují. Simulované žíhání - stochastický algoritmus, kterým se hledá žádaný stav rekurentní neuronové sítě. Podobá se procesům probíhajícím v látkách při jejich krystalizaci. Sumační funkce - část výkonného prvku, který sčítá vážené vstupní signály. Synapse - místo styku mezi dvěma neuronovými buňkami v organismu. Během učení se jeho parametry mění. 9

Šum - náhodné změny některých informačních jednotek, které dohromady představují vstupní vzor. Neuronové sítě mají schopnost rozpoznat i zašumělé vstupní vzory. Tolerance k chybám - schopnost neuronové sítě na základě natrénovaných vzorů odpovědět i na vzor, který nebyl součástí trénovací množiny. Topologie - popisuje druh a počet výkonných prvků sítě a strukturu / graf jejich propojení. Učení - přizpůsobování nebo adaptace neuronové sítě daným požadavkům. Váhy na spojích mezi jednotlivými výkonnými prvky sítě se mění podle nějakého učícího algoritmu. Učení bez učitele - při tomto způsobu učení nemá systém žádnou podporu zvnějšku. Učení s učitelem - učení, při kterém se neuronová síť trénuje zvnějšku. Učitel zadává vstupní i výstupní vektor dat, vyhodnocuje výsledek a provádí změny. Učící fáze - časový interval, během kterého se podle nějakého učícího algoritmu mění parametry sítě a tyto se do sítě nahrávají. Učící krok - reálné číslo mezi 0 a 1, které udává, jak silně se jednotlivý učící krok ve změně vah projeví. K tomu, aby se naučený vzor zrušil, lze použít negativní hodnoty tohoto parametru. Učící pravidlo (algoritmus) - předpis, který udává, jak se budou síti předkládat vzory k učení a jak se budou vypočítávat změny vah. Ustálení - dosažení stabilního stavu zpětnovazební sítě. Po ustálení zůstanou aktivity všech výkonných prvků sítě konstantní. Váha - hodnotou vyjádřená míra vazby mezi dvěma spojenými výkonnými prvky. jejich prostřednictvím se v síti předávají informace. Paměť sítě představují právě tyto váhy, resp. jejich velikosti. Vážený vstup - součin výstupního signálu jiného neuronu a váhy tohoto spoje. Tento příspěvek vstupuje do součtu se všemi ostatními váženými vstupy konkrétního neuronu a vytváří s nimi jeho nový vnitřní potenciál. Vrstva - základní komponenta architektury neuronové sítě. Vrstvu tvoří jistý počet stejných buněk majících v síťové struktuře identickou funkci. Vybavovací fáze - časový interval, ve kterém neuronová síť na základě předchozího naučení generuje výstupní data jako odezvu na data vstupní. Výkonný prvek (neuron) - základní procesorový prvek neuronové sítě. V lidském mozku mu odpovídá jedna neuronová buňka. Výstupní funkce (přenosová funkce) - část výkonného prvku zajišťující výstup vnitřního potenciálu (aktivity) na další neurony. Někdy je vnitřní potenciál a výstup neuronu identický. Zobecňování - schopnost neuronové sítě na základě naučených vzorů odpovědět i na vzor, který nebyl součástí učící množiny. Zpětná vazba - zvláštní propojení výkonných prvků podobné např. kruhu, kdy se informační tok znovu vrací ke svému výchozímu bodu. Zpětnovazební síť - síť, ve které nelze jednoznačně definovat směr informačního toku. Jednotlivé vrstvy zde nemají jednoznačně definovanou hierarchii. Síť obsahuje zpětné vazby mezi buňkami nebo skupinami buněk. 10

1.2 ZÁKLADNÍ BIOLOGICKÉ POZNATKY O NEURONECH A NEURONOVÝCH SÍTÍCH Neurony jsou základními stavebními prvky nervové soustavy převážně mozku. Jsou to živé buňky, které se zaměřují na sbírání, uchování, zpracování a přenos informace. Přestože v lidském těle existuje celá řada různých druhů neuronů struktura těchto buněk je následující: tělo neuronu (soma), které obsahuje jádro neuronu a do kterého přicházejí informace po vstupních větvích; vstupní větve (dendrity, dendritové vlákna), kterých je asi 10 000; výstupní větev (axon, axonové vlákno), pomocí něhož informace vycházejí ven, je pouze jeden, avšak na svém konci je bohatě rozvětven;. synapse, pomocí níž jsou jednotlivé neurony vzájemně propojeny tak, že na jejich dendrity jsou prostřednictvím synapsí připojeny axony ostatních neuronů (někdy lze pozorovat tzv. sebe excitující vazbu, kdy axon neuronu je připojen na jeho vlastní dendrit), jednotlivé synapse mají různou propoustnost, kterou ohodnocují vstupní signály přicházející po axonech. Schématické znázornění struktury biologického neuronu je na Obr. 1. Obr. 1 Struktura biologických neuronů Výstupní signál axonu odpovídá vstupům, které jsou zpracovány uvnitř neuronu. Výstup neuronu tedy závisí na vstupech, které do něho přicházejí. Průměr neuronu bývá různý (od několika mm do několika desítek mm), délka dendritu je maximálně 2 až 3 mm, délka axonu může být přes 1 m. Aby mozek správně plnil svoji funkci, musí být neurony vhodně navzájem propojeny do tzv. neuronových sítí. Toto propojení, jak již bylo naznačeno, je uskutečňováno pomocí dendritů, které se pomocí speciálních výběžků (synapsí) připojují na dendrity neuronů nebo přímo na těla neuronů. Na jeden neuron připadá v průměru asi 10 až 100 tisíc spojů s jinými neurony. Inteligentní a výkonné chování mozku (neuronové sítě) je tedy z velké části dáno právě dokonalostí vzájemného propojení. Neurony v neuronových sítích mozku jsou uspořádány tak, že výpadek jednoho neuronu nemůže ohrozit funkci celku. Hustota neuronů v lidském mozku je asi 7 až 8 104 na mm 3. Během života organismu je mnoho buněk nahrazováno po odumření buňkami novými. U neuronových buněk to neplatí denně odumře asi 10 tisíc buněk, které již nejsou nahrazeny. To se zdá na první pohled hodně, ale asi za 75 let života se sníží počet neuronů je o 0,2 až 0,5 % celkového počátečního počtu neuronů. Avšak synapse na dendritech se vytvářejí během celého života a dochází tak ke vzniku nových spojů (respektive k oživení dosud nefunkčních synapsí) - vytváření spojů nazýváme schopností učit se. Aby mohl neuron dobře 11

fungovat, je jeho povrch pokryt membránou, která umožňuje přenášet informace. Tato membrána je silná asi 10 až 30 nm a skládá se ze dvou vrstev molekul tzv. lipidů. Mezi těmito vrstvami jsou ještě vnitromembránové proteiny, které tvoří iontové pumpy a kanály. Iontové pumpy přenášejí přes membránu trvale ionty Na+ a K-. Tím dochází ke stálé polarizaci membrány. Vnější povrch má kladný potenciál a na vnitřní m povrchu je záporný potenciál. Rozdíl potenciálů je napětí, které je v průměru asi 70 mv. Působením chemických přenašečů (transmitérů) na povrch membrány vzniká potenciálová vlna, která se šíří po dendritu od místa vzruchu na styku se synapsí až k somatu. Tímto způsobem přicházejí informace do neuronu. Neuron je však ovlivňován nejen signály po dendritech, ale také různými podněty, které jsou přenášeny krevním oběhem (hormony, kyselost prostředí, obsah kyslíku, množství glukózy, ale také drogy, léky, viry, protilátky apod.). Reakce neuronu (aktivace výstupního axonu) se objeví až po překročení určité hodnoty potenciálu (tzv. prahu q). Tento práh často považujeme za konstantu, ale u živých organismů závisí jeho hodnota na mnoha okolních vlivech. Aktivace neuronu je opět depolarizace axonové membrány a tedy šíření potenciálové vlny, jedná se vlastně o sled impulsů, kdy kmitočet těchto impulsů je od 250 do 1000 impulsu/s a to podle toho, kolik signálů působí na práh (obvyklá frekvence je od několika až po desítky impulsu /s). Po vyslání impulsu je neuron po krátký čas necitlivý na podněty na vstupech. Tato pauza je označována jako refrakterní perioda. Informace může být přenášena např. změnou tvaru, velikostí, rychlostí nebo frekvencí signálu. V živých organismech se využívá převážně frekvenční modulace. Frekvence impulsů se pohybuje od jednoho do sta impulsů/s. Rychlost přenosu změnou rychlosti je asi od 0,5 do 2 m/s takováto rychlost dovolí přenést informaci mezi dvěma neurony za 20 až 40 ms. 1.3 UMĚLÉ NEURONOVÉ SÍTĚ Za umělou neuronovou síť (UNS) se obecně považuje taková struktura pro distribuované paralelní zpracování dat, která se skládá z jistého, obvykle velmi vysokého počtu vzájemně propojených výkonných prvků. Každý z nich může současně přijímat libovolný konečný počet různých vstupních dat. Na další výkonné prvky může předávat libovolný konečný počet shodných informací o stavu svého jediného, avšak velmi rozvětveného výstupu. Každý výkonný prvek transformuje vstupní data na výstupní podle jisté přenosové funkce. Přitom se též může uplatnit obsah jeho lokální paměti. Funkci umělé neuronové sítě můžeme chápat jako jistou transformaci T vstupního signálu X na výstupní, tedy Základní vlastnosti umělých neuronových sítí udává jejich paradigma. Paradigmatem rozumíme nejen jejich topologii, ale též způsoby učení a vybavování. Topologii neuronové sítě určuje její síťový graf, jehož jednotlivé uzly odpovídají výkonným prvkům a hrany spojům mezi nimi působícím. Vzájemné připojení vstupů a výstupů výkonných prvků vymezuje konfiguraci sítě. Ta může být jednovrstvá, plošná, vícevrstvá, prostorová či mnohorozměrná. Paradigmat neuronových sítí je známo několik desítek a stále se objevují další. 12

1.4 VÝKONNÝ PRVEK UMĚLÉ NEURONOVÉ SÍTĚ Výkonným prvkem umělé neuronové sítě je formální neuron, který zpravidla vstupní údaje zpracovává podle vztahu,kde xi... vstupy neuronu a je jich celkem N, wi... synaptické váhy, S obvykle nelineární přenosová funkce neuronu, práh. Výraz v závorce někdy označujeme jako vnitřní potenciál neuronu (značení z). Podle povahy vstupních dat rozlišujeme neurony binární - zpracovávající vstupní data dvouhodnotová; neurony vícehodnotové (spojité) - zpracovávají i data nesoucí vícebitovou informaci To, že o nich mluvíme jako o neuronech spojitých, nemá žádnou souvislost s vlastním způsobem jejich činnosti, s jejich implementací. Ta bývá nejčastěji digitální v podobě programu nějakého procesoru, nebo jako speciální VLSI obvod. Jiná, hlavně v dřívější době používaná, je implementace analogová tvořená operačními zesilovači a proměnnými odpory. V poslední době vzrůstá význam implementací optických. Činnost základního modelu neuronu lze rozdělit do čtyř fází, jimiž jsou: konfluence - k-tý vstupní signál přicházející do neuronu je vynásoben váhou (reálným číslem), která je danému vstupu přiřazena, neboli: agregace - signály vynásobené příslušnými vahami jsou prostým způsobem sečteny, čili: 13

prahování - od výsledného součtu u(t) je odečtena prahová hodnota w 0: nelineární zobrazení - hodnota y(t) je pomocí obecně nelineární funkce zobrazena zpravidla do intervalu (0,1). Nejčastějším případem je zobrazení pomocí tzv. sigmoidální funkce (sigmoida): Tato funkce zobrazuje proměnnou v(t) na interval (0,1). Parametr theta se nazývá parametr strmosti a určuje, jak rychle tato křivka stoupá s rostoucí proměnnou. Dalšími používanými přenosovými funkcemi jsou např. tangens hyperbolický, Gaussova pravděpodobnostní funkce či lineární funkce. Původní model perceptronu byl založen na nespojité skokové funkci, nabývající hodnoty 0 pro záporná čísla a hodnoty 1 pro čísla kladná. Vedle uvedeného základního modelu neuronu byla rozpracována řada dalších modelů. Některé z nich jsou pouze rozšířením modelu základního, jiné si kladou za cíl přesněji napodobit funkci živočišné nerovové buňky. Z hlediska praktického nasazení jsou tyto modely zpravidla jen málo významné, mnohým z nich se však už nyní rýsuje nadějná budoucnost. 1.5 HOPFIELDOVA SÍŤ Na začátku osmdesátých let přišel John Hopfield při studiu autoasociativních sití na nový model neuronové sítě - Hopfieldova síť. Tato síť může být použita buď jako asociativní paměť, klasifikátor nebo k řešení optimalizačních problémů. Princip této sítě bude demonstrován na využití sítě jako asociativní paměti pro obrazový výstup. Na obrazových vzorech se dobře demonstruje chování sítě, neboť lze jednotlivým pixelům obrázku snadno přiřadit binární hodnoty. Hopfieldova síť se nehodí pro spojité vstupy, protože pak zde vzniká problém, jak převést spojité signály do binární podoby. 1.5.1 Uspořádání sítě Hopfieldova síť se skládá z tolika neuronů, kolik má vstupů. Pokud například učíme síť obrázky, odpovídá každý pixel jednomu neuronu. Každý neuron je napojen na vstup sítě pouze jediným svým vstupem. Výstup každého neuronu je veden zpět na vstupy ostatních neuronů přes vady wij, a tak se vytváří uzavřená smyčka. Tímto vzájemným uspořádáním vzniká symetrická síť a tedy diagonálně symetrická matice vah. 14

Obr. 2 Možnosti uspořádání Hopfieldovy sítě totožné. Na Obr. 2 jsou znázorněny dva typy uspořádání Hopfieldovy sítě, z funkčního hlediska jsou x0, x1,..., xn-1 jsou vstupy sítě m0, m1,..., mn-1 stavy v jednotlivých časových krocích, které se v následujícím kroku stávají opět vstupy y0, y1,..., yn-1 výstupy sítě, které se de facto rovnají stavům m0, m1,..., mn-1 Vybavování je iterační proces, a proto smysluplným výstupem je až poslední stav neuronů. Váhy, které vedou z jednoho neuronu do druhého, jsou stejné v obou směrech (wij = wji) a váhová matice je tedy, jak již bylo zmíněno, diagonálně symetrická. Na vstupy neuronů nikdy nepřivádíme jejich vlastní výstupy (i! = j), proto jsou váhy na diagonále matice vah nulové. Každý neuron obsahuje, stejně jako jiné druhy neuronů (např. perceptron), svůj vlastní práh a přenosovou funkci. Práh Q je u této sítě nulový pro všechny neurony a přenosová funkce se tedy nebude posouvat. Všechny signály ať vstupní, stavové nebo výstupní mohou být buď binární (nabývají hodnot 0 nebo 1) nebo bipolární (nabývají hodnot -1 nebo +1). Po příchodu vstupních signálů do neuronu se provede jejich váhový součet a výsledek se použije jako argument přenosové funkce. Výstupem z neuronu je potom hodnota přenosové funkce. Hopfield při studiu neuronových sítí přišel na to, že přenosová funkce skutečných neuronů je podobná sigmoidě. 1.5.2 Učení a vybavování v Hopfieldově sítí Fáze učení 1) Nastavení vah podle vstupních vzorů V této rovnici wij je váha mezi neuronem i a j (jedná se o čtvercovou matici vah) a xi resp. xj je i- tý (j-tý) element s-tého vstupního vzoru, který nabývá hodnoty +1 nebo -1. 2) Opakování učícího procesu Pokud ještě nebyly předloženy všechny trénovací vzory, přejdeme opět na krok 1, jinak skončíme učení. Pro každý vzor vytvoříme dílčí matici dimenze NxN, kde N je počet vstupů. Tato matice bude tvořena prvky, které vzniknou vynásobením i-tého vstupu j-tým vstupem (metoda každý s každým), přičemž jedná-li se o stejný vstup (i=j), je váhový koeficient nulový. Tím vznikne symetrická 15

matice obsahující +1 a -1 s výjimkou nulové diagonály. Výsledná čtvercová matice vah, vznikne součtem všech dílčích matic jednotlivých vzorů, kterých je M. Poté, co jsou všechny obrazce naučeny, tj. zakódovány ve váhové matici, můžeme přejít k fázi vybavování. Z předchozího algoritmu je patrné, že učení sítě jednomu vzoru probíhalo jednorázově, ale vybavování je opakovaný iterační děj. Fáze vybavování Ve fázi vybavování předložíme nový neznámý obrazec na vstupy sítě a postupně počítáme výstupy podle následujícího algoritmu. 1) Inicializace stavů Nastavení počátečních stavů podle předloženého vzoru V této rovnici je i(t) výstup z i-tého neuronu v čase t a xi je element obrazce, který může nabývat hodnot jen 0 nebo 1 resp. +1 nebo -1. 2) Iterace až do nalezení odpovědi Funkce fh je nelinearita zobrazená na obr.24b bez posunutí. Krok 2 provádíme tak dlouho, až se přestanou měnit stavy, tj. rozdíl mezi tímto a předchozím stavem je nulový. Výstupy neuronů yi = i(tposlední) jsou přímo jednotlivé body výstupního obrazce. 3) Opakování procesu Po skončení iterace můžeme zadat nový vzor a přejít ke kroku 1. V opačném případě skončíme. Po každém průběhu jsou výstupy poopraveny a slouží opět jako vstupy do sítě. Tento postup opakujeme tak dlouho, až se výstupy během dvou cyklů nezmění ani na jednom neuronu, tj. nynější a předchozí stavy jsou shodné. Takto získané výstupy přímo odpovídají vybavenému vzoru. Princip celé Hopfieldovy sítě je založen na porovnání obrazců pomocí Hammingovy metriky a za správnou odpověď bere ten obrazec, který má tuto vzdálenost nejmenší. 1.5.3 Příklad softwaru využívající Hopfieldovu síť Moderní neuronové sítě se věnují převážně maticemi. Jednoduše Hopfieldova rekurentní síť na Obr. 3 není výjimkou a podle matice vah hledá lokální minimum pro zjištění výsledku. Obr. 3 Princip asynchronní rekurentní binární Hopfieldovy sítě 16

Na Obr. 3 je binární Hopfieldova síť. Binární v tomto případě znamená +1 nebo -1. Jakýkoliv černobílý obraz může být znázorněn jako sekvence černého (+1) a bílého (-1) pixelu, které tvoří vstupní vektor. Vstupní a výstupní vektory sestávají z "-1" a "+1" (namísto "-1" lze použít "0") má symetrickou hmotnostní matici složenou z celých čísel s nulovou diagonální symetrickou maticí. Nulová diagonála je doporučenou podmínkou pro konvergenci, ale ne požadovanou. Je třeba určit váhy vektorů, které se nazývají instance. Předpokládáme, že tyto instance jsou pevnými body výsledné sítě. Přestože tomu tak není vždy. Matice vah se nastaví takto:, kde N počet instancí x k pořadí instance Pokud instance vektorů tvoří sadu ortogonálních vektorů, je možné zajistit, že pokud je zvolena hmotnostní matice, jak je uvedeno výše, každá kopie vektoru je pevným bodem. Hopfieldovy sítě mají skalární hodnotu spojenou s každým stavem sítě označovanou jako energie E, kde Asynchronní korekce Asynchronní - Aktualizuje se současně pouze jedna jednotka. Tato jednotka může být vybrána náhodně nebo předem definovaná Synchronní: Všechny jednotky jsou aktualizovány ve stejnou dobu. To vyžaduje centrální hodiny systému k udržení synchronizace. Tato metoda je méně realistická, protože biologické nebo fyzické systémy postrádají globální hodiny, které sledují čas. Vstupní vektor X je vynásoben maticí hmotnosti pomocí normálního násobení matice a vektoru. V každé iteraci se však používá pouze jedna složka výstupního vektoru. Tento postup je znám jako "asynchronní korekce". Tato složka, která může být náhodně vybraná, se aplikuje na prahový prvek, jehož výstup je -1 nebo 1. Odpovídající složka vstupního vektoru je nahrazena hodnotou a tudíž tvoří vstupní vektor pro další iteraci. Proces pokračuje tak dlouho, dokud vstupní a výstupní vektory nebudou stejné (tj. dokud nedosáhne pevný bod). Synchronní korekce - znamená, že výstupní vektor je použit při každé iteraci. Mějte na paměti, že asynchronní korekce je mnohem přesnější než synchronní korekce, ale vyžaduje vyšší výpočetní výkon. V současné době se běžně používá pouze asynchronní korekce. Asynchronní korekce a nuly na diagonále matice závaží W zajistí, že energetická funkce (klesne s každou iterací. Asynchronní korekce - je obzvláště důležité zajistit konvergenci k pevnému bodu. Pokud budeme pracovat se synchronní korekcí a předpokládáme, že vektor děr je nastaven na každé iteraci, síť může být s periodickými cykly jako terminální stavy atraktorů a ne s pevnými body. 17

Algoritmus řešení 1. Výpočet matice vah W pomocí vzorce výše 2. Výpočet výstupních vektorů pro j = 1, 2 n podle vzorce,kde 3. Provedení asynchronní korekce a. Začátek se vstupním vektorem Xn b. Najít Yj podle vzorce c. Nahrazení Xn a Yn a zavedení Y na vstup X d. Opakování procesu nalezením y2 y3 atd. 4. Opakování kroků 2. a 3. tak dlouho, dokud se vektor Y nezmění. Každý krok snižuje množství energetických vazeb, takže je zajištěna konvergence k pevnému bodu (atraktoru): Zdrojový kód Pro svou rozsáhlost je zdrojový kód tohoto příkladu uveden v kapitole 4.1. Příklady využití aplikace Test šumu Počáteční vzory jsou zobrazeny na Obr. 4. Obr. 4 Počáteční vzory pro Hopfieldovu síť Test šumu na počátečním vzoru A je zobrazeno na Obr. 5. Bylo zjištěno, že vstupní obrazce snesou až 50% šumu, aby byly dobře rozpoznány. 18

Obr. 5 Test šumu na vstupu pro Hopfieldovu síť Test rotace Test rotace na počátečním vzoru H je zobrazeno na Obr. 6. Obr. 6 Test rotace na vstupu pro Hopfieldovu síť Test křížové asociace (záměny vzorů) Na Obr. 7 je možné vidět vstupy a výstupy vzorů, které jsou si hodně podobné, téměř stejné. Je patrné, že písmena G a C, které jsou krom malé rozlišnosti totožné, nemohou být dobře rozpoznány. 19

Obr. 7 Test záměny podobných vzorů Výhody řešení Přesné rozpoznání, a to i v případech až 50% šumu, kde i člověk má problém rozpoznat tvar Nevýhody řešení Přítomnost křížových asociací, kde pokud jsou vzory hodně podobné (jako G a C), tak dojde ke špatnému rozeznání Kapacitní limity počtu uložených atraktorů (0,3 / 0,4) * n, kde n je rozměr matice vah W Neschopnost rozpoznat vzor, pokud je otočený Výše uvedené nevýhody podstatně omezují praktické využití Hopfieldovy sítě, ale při správně vytvořeném algoritmu okolo algoritmu pro vyhodnocení (manuální rotace a úpravy vzorů) se dá zvýšit procento správnosti řešení a tím i rozšíření využití. 1.6 BACK PROPAGATION Funkce neuronové sítě se zpětným šířením je nastavena, kde net výstupní hodnota každého neuronu sítě f(x) aktivační funkce Pro tento příklad byla zvolena jako aktivační funkce sigmoida. 1.6.1 Datové struktury sítě Síť se skládá z vrstev. V tomto případě je to vícevrstvá síť, takže je nutné najít cestu k implementaci každé vrstvy zvlášť jako samostatné jednotky (stejně jako každého neuronu). 20

1.6.2 Struktura neuronu Tato struktura by měla obsahovat vše, co nějakým způsobem charakterizuje neuron, tedy: pole typu float / double jako synaptický konektor nebo pole vah výstupní hodnotu neuronu gain zesílení (obvykle 1) váhový nebo synaptický konektor zesílení navíc pole s hodnotami pro uložení delt hodnot od posledních dat. Zdrojový kód struktury neuronu: struct neuron float *weights; float *deltavalues; float output; float gain; float wgain; neuron(); ~neuron(); void create(int inputcount); ; 1.6.3 Struktura vrstev V podstatě obsahuje řadu neuronů spolu s vstupem. Všechny neurony z vrstvy sdílejí stejný vstup, takže vstup vrstvy je reprezentován řadou hodnot s pohyblivou čárkou. struct layer neuron **neurons; int neuroncount; float *layerinput; int inputcount; layer(); ~layer(); ; void create(int inputsize, int _neuroncount); void calculate(); Struktura obsahuje blok neuronů představující vrstvu sítě. Obsahuje ukazatel na pole neuronové struktury pole obsahující vstup neuronu a jejich příslušné deskriptory. Navíc obsahuje konstruktor, destruktor a funkce vytváření. 21

1.6.4 Struktura neuronové sítě Třída "bpnet" představuje celou neuronovou síť. Obsahuje základní vstupní vrstvu, výstupní vrstvu a volitelné skryté vrstvy. class bpnet private: layer m_inputlayer; layer m_outputlayer; layer **m_hiddenlayers; int m_hiddenlayercount; public: bpnet(); ~bpnet(); void create(int inputcount,int inputneurons,int outputcount,int *hiddenlayers,int hiddenlayercount); void propagate(const float *input); float train(const float *desiredoutput,const float *input,float alpha, float momentum); void update(int layerindex); inline layer &getoutput() return m_outputlayer; ; 1.6.5 Výpočet hodnot sítě Prvním cílem je vypočítat neurony každé vrstvy a neexistuje lepší způsob než implementovat funkci člena v objektu vrstvy, který by tuto práci vykonal. Funkce zobrazuje, jak implementovat vzorec do vrstvy. void layer::calculate() int i,j; float sum; for(i=0;i<neuroncount;i++) sum=0; for(j=0;j<inputcount;j++) sum+=neurons[i]->weights[j] * layerinput[j]; 22

sum+=neurons[i]->wgain * neurons[i]->gain; neurons[i]->output= 1.f/(1.f + exp(-sum)); 1.6.6 Výpočet a propagace hodnot sítě Funkce vypočítá síťovou hodnotu danou vstupním signálem. Zahájí výpočet vstupní vrstvy a následně se šíří do další vrstvy a počítá další vrstvu, dokud nedosáhne výstupní vrstvy. Jakmile je síť propagována a vypočítána, postará se o výstupní hodnotu. void bpnet::propagate(const float *input) memcpy(m_inputlayer.layerinput,input,m_inputlayer.inputcount * sizeof(float)); m_inputlayer.calculate(); update(-1); if(m_hiddenlayers) for(int i=0;i<m_hiddenlayercount;i++) m_hiddenlayers[i]->calculate(); update(i); m_outputlayer.calculate(); 1.6.7 Trénování sítě Nenaučená neuronová síť je nepoužitelná, proto je potřeba ji dobře naučit. Níže je uveden algoritmus pro natrénování sítě. float bpnet::train(const float *desiredoutput, const float *input, float alpha, float momentum) float errorg=0; float errorc; float sum=0,csum=0; float delta,udelta; float output; propagate(input); int i,j,k; for(i=0;i<m_outputlayer.neuroncount;i++) output=m_outputlayer.neurons[i]->output; 23

errorc=(desiredoutput[i] - output) * output * (1 - output); errorg+=(desiredoutput[i] - output) * (desiredoutput[i] - output) ; for(j=0;j<m_outputlayer.inputcount;j++) delta=m_outputlayer.neurons[i]->deltavalues[j]; udelta=alpha * errorc * m_outputlayer.layerinput[j] + delta * momentum; m_outputlayer.neurons[i]->weights[j]+=udelta; m_outputlayer.neurons[i]->deltavalues[j]=udelta; sum+=m_outputlayer.neurons[i]->weights[j] * errorc; m_outputlayer.neurons[i]->wgain+= alpha * errorc * m_outputlayer.neurons[i]->gain; for(i=(m_hiddenlayercount - 1);i>=0;i--) for(j=0;j<m_hiddenlayers[i]->neuroncount;j++) output=m_hiddenlayers[i]->neurons[j]->output; errorc= output * (1-output) * sum; for(k=0;k<m_hiddenlayers[i]->inputcount;k++) delta=m_hiddenlayers[i]->neurons[j]->deltavalues[k]; udelta= alpha * errorc * m_hiddenlayers[i]->layerinput[k] + delta * momentum; m_hiddenlayers[i]->neurons[j]->weights[k]+=udelta; m_hiddenlayers[i]->neurons[j]->deltavalues[k]=udelta; csum+=m_hiddenlayers[i]->neurons[j]->weights[k] * errorc; >neurons[j]->gain; m_hiddenlayers[i]->neurons[j]->wgain+=alpha * errorc * m_hiddenlayers[i]- sum=csum; csum=0; for(i=0;i<m_inputlayer.neuroncount;i++) output=m_inputlayer.neurons[i]->output; errorc=output * (1 - output) * sum; 24

for(j=0;j<m_inputlayer.inputcount;j++) delta=m_inputlayer.neurons[i]->deltavalues[j]; udelta=alpha * errorc * m_inputlayer.layerinput[j] + delta * momentum; m_inputlayer.neurons[i]->weights[j]+=udelta; m_inputlayer.neurons[i]->deltavalues[j]=udelta; m_inputlayer.neurons[i]->wgain+=alpha * errorc * m_inputlayer.neurons[i]->gain; return errorg / 2; 1.6.8 Aplikace Tato jednoduchá aplikace ukazuje, jak naučit neuronovou síť funkci XOR. Kód lze samozřejmě rozšířit a aplikovat jej na různé příklady. #include <iostream> #include "bpnet.h" using namespace std; #define PATTERN_COUNT 4 #define PATTERN_SIZE 2 #define NETWORK_INPUTNEURONS 3 #define NETWORK_OUTPUT 1 #define HIDDEN_LAYERS 0 #define EPOCHS 20000 int main() float pattern[pattern_count][pattern_size]= 0,0, 0,1, 1,0, 1,1 ; float desiredout[pattern_count][network_output]= 0, 1, 1, 0 25

; bpnet net;//our neural network object int i,j; float error; net.create(pattern_size,network_inputneurons,network_output,hidden_layers,hidden _LAYERS); for(i=0;i<epochs;i++) error=0; for(j=0;j<pattern_count;j++) error+=net.train(desiredout[j],pattern[j],0.2f,0.1f); error/=pattern_count; cout << "ERROR:" << error << "\r"; for(i=0;i<pattern_count;i++) net.propagate(pattern[i]); cout << "TESTED PATTERN " << i << " DESIRED OUTPUT: " << *desiredout[i] << " NET RESULT: "<< net.getoutput().neurons[0]->output << endl; return 0; 26

Shrnutí pojmů Neuronové sítě, Hopfieldova síť, Back-propagation, biologický neuron Otázky 1. Co je to neuronová síť? 2. Co je to Hopfieldova síť? 3. Co je to síť back-propagation? 4. Jaké vlastnosti má neuron a jaké biologický neuron? 5. Co je to umělá neuronová síť? 27

2 GENETICKÉ ALGORITMY Čas ke studiu 8 hodin Cíl Po prostudování této kapitoly budete umět: Popsat genetické algoritmy Aplikovat genetické algoritmy do softwarové aplikace Výklad Genetické algoritmy jsou evoluční stochastické optimalizační metody, které pracují na principu přímého prohledávání Metody přímého prohledávání (direct search) jsou založené generování a testování. Tyto metody různými strategiemi procházejí prostor možných řešení (generování) a vyhodnocují různá řešení (testování). Mezi tyto metody patří například i A* algoritmus. Cílem je najít stav, který splňuje omezující podmínky optimalizace a současně poskytuje minimální hodnotu optimalizované funkce. Algoritmus pracuje numericky bez ohledu na znalost přesného tvaru optimalizované funkce. Algoritmus vyžaduje pouze znalost výsledných hodnot v daném bodě stavového prostoru. Tyto hodnoty jsou pak předány kriteriální funkci, která stavy porovná a určí lepší stav. Základem genetických algoritmů je více či méně věrná simulace evolučních procesů a zákonů dědičnosti. V oblasti přirozené evoluce existuje množství otevřených otázek, které brání vytvoření přesné simulace. Prakticky se tedy evoluční algoritmy v živé přírodě pouze inspirují a konkrétní postupy se vytváří podle řešené úlohy Pro popis genetických algoritmů (GA) se používá terminologie informatiky (objekt, řetězec) i biologie (jedinec, chromozom, fenotyp). Významnou charakteristikou genetických algoritmů, kterou se odlišují od jiných optimalizačních metod, je paralelní přístup k řešení úlohy. Pracují s množinou možných řešení (populace), místo s jednotlivými řešeními. Z pohledu optimalizace funkce tedy evoluční algoritmy mají více prohledávacích bodů (jedinců), z nichž každý se snaží najít optimum funkce. 2.1 ZÁKLADNÍ POJMY Genetický algoritmus pracuje s řadou pojmů z oblasti genetiky, které se používají k popisu datových a programových struktur algoritmu. 28

Klasická struktura genetického algoritmu je zobrazena na Obr. 8. Obr. 8 Struktura genetického algoritmu Jedinec (hypotéza) h - představuje jedno z možných řešení úlohy. Jedinec se skládá z genotypu a z fenotypu (těla jedince). Genotyp jsou data potřebná pro vytvoření fenotypu a fenotyp je vlastní řešení zadané úlohy. Genotyp zahrnuje veškerou genetickou informaci něčeho (buňky, živočicha, rostliny). U genetických algoritmů se obvykle redukuje pouze na jediný chromozom. Fitness F - hodnocení jedince, tedy každé hypotézy, která je v průběhu výpočtu vytvořena. Fitness je přiřazeno všem jedincům v populaci na konci nebo na začátku každého populačního cyklu pomocí kriteriální funkce. Fitness jedince vyjadřuje vzdálenost hypotézy od skutečného optimálního řešení a určuje tak, které řešení je lepší a které je horší. Kriteriální funkce tedy transformuje úlohu do stavového prostoru. Z hlediska genetického algoritmu tedy v podstatě není nutné znát matematický model optimalizovaného problému. Je nutné znát pouze kriteriální funkci, která umožní určit lepší či horší řešení, aby bylo možné jednotlivé hypotézy porovnat. Gen - jednotka genetické výbavy jedince. Její konkrétní význam závisí na řešeném problému a na použitém kódování. Může se jednat například o jeden bit, nebo třeba o celé číslo, znak a podobně. Chromozom - vektor genů. Chromozom je část genetické výbavy jedince, kterou je možné přenášet na potomky jedince. 29

Příklady řetězců: binární řetězec r = [1 01 1 1 0] celočíselný řetězec r = [2, 7, 21, O, 105] reálně-číselný řetězec r = [7.1, 0.01, 128.0,-1.5] symbolický řetězec r = [kladný, malý, H2SO4] kombinovaný řetězec r = [2.77, -2, X, zásaditý, vypnuté] Genotyp - kompletní genetická výbava jedince. Soubor chromozomů jedince se označuje genom, v genetických algoritmech je zpravidla veškerá genetická výbava jedince obsažena v chromozomech, a genotyp se tedy shoduje s genomem. Většina genetických algoritmů navíc používá pouze jeden chromozom, pak tedy chromozom odpovídá genotypu. Fenotyp - množina vnějších znaků a vlastností jedince. Z hlediska genetických algoritmů se tedy jedná o vlastní řešení úlohy. Fenotyp může tedy být naprosto libovolný, jeho tvar závisí pouze na řešené úloze. V operacích křížení a mutace genetického algoritmu se zpravidla fenotyp nevyužívá, uvažují se v nich pouze chromozomy. Populace p - množina jedinců v okamžiku t. Populace představuje soubor hypotéz, které jsou v daném okamžiku v genetickém algoritmu k dispozici. Z těchto hypotéz se v každé iteraci výpočtu vyberou nejvhodnější řešení, která jsou dále rozvíjena. Genetický algoritmus může využívat jednu populaci, častější je však užití více populací současně. Populace pak mohou být organizované do dalších struktur (stromů, sítí). Ve struktuře pak v pravidelných intervalech dochází k výměně informací o dosaženém řešení, které mohou být dále využity v ostatních populacích. Strukturované populace mají větší diverzitu než populace nestrukturované, a přispívají tedy k omezení rizika předčasné konvergence (uváznutí v lokálním řešení). 2.2 ÚČELOVÁ FUNKCE JAKO GEOMETRICKÝ PROBLÉM Na každou účelovou funkci lze nahlížet také jako na geometrický problém, v jehož rámci se hledá nejnižší (minimum) či nejvyšší (maximum) pozice na N-rozměrné ploše, pro kterou se někdy používá výraz hyperplocha či prostor možných řešení daného problému. Počet dimenzí N je dán počtem optimalizovaných argumentů účelové funkce. Má-li optimalizovaná funkce např. šest argumentů (nezávisle proměnných), pak se hledá extrém na šestirozměrné ploše v sedmirozměrném prostoru, kde sedmá dimenze je v podstatě návratová hodnota účelové funkce. Prvních šest dimenzí má charakter os typu x a y jak je známe z našeho, třírozměrného prostoru, zatímco sedmá má charakter osy z. Více než třírozměrné geometrické konstrukce si samozřejmě nedovede nikdo graficky představit, nicméně analogie je zřejmá. Daná účelová funkce může obsahovat více stejných globálních extrémů na různých souřadnicích, nebo ještě hůře (matematicky vzato), může být těchto extrémů nekonečně mnoho. Přitom se může jednat o problémy ryze praktického charakteru. V případě, že existence více než jednoho globálního extrému není únosná, je vhodné problém přeformulovat. Na druhou stranu však více globálních extrémů skýtá možnost nalezení více stejně kvalitních řešení, z nichž si řešitel případně může vybrat. 30

Jestliže máme aplikaci zkompilovánu s procedurami, jež hledají minimum, a potřebovali bychom z jakéhokoli důvodu hledat globální maximum. A naopak. Tento požadavek lze splnit velice snadno a bez zásahu do zdrojového kódu aplikace pouhým vynásobením účelové funkce číslem 1. Je však třeba dát si pozor na interpretaci výsledku. V podstatě lze říci, že minimum obrácené funkce je maximem funkce původní. Z výsledku, který z aplikace obdržíme, musíme uvažovat en jeho x-ovou část, y-ovou část musíme dopočítat. Cílem algoritmu je vyvíjet (měnit) generaci tak, aby se neustále zlepšovala. To znamená, aby v ní přibývali dobří jedinci a ubývali špatní (slabí) jedinci, stejně jak je tomu v přírodě. Nyní ovšem vyvstává otázka, kdo rozhoduje o tom, jak dobrý je daný řetězec. Toto rozhodování není součástí genetického algoritmu. Algoritmus se na kvalitu řetězce pouze zeptá. Musí tedy existovat funkce f (x), která pro daný řetězec vrátí jeho kvalitu. Touto funkcí je nám již dobře známá účelová funkce. Při hledání extrému funkce bude řetězec reprezentovat nějaký bod definičního oboru funkce (fenotyp). Kvalita řetězce (fitness) jedince pak bude funkční hodnota v tomto bodě. 2.3 PŘÍKLAD SOFTWARU PRO VYUŽÍVAJÍCÍ GENETICKÝ ALGORITMUS Algoritmus je řešený takto: 1) Náhodná inicializace populace 2) Vyhodnocení fitness hodnoty populace a. Výběr rodičů z populace b. Křížení a generování nové populace c. Mutace nové populace d. Vypočítání fitness hodnoty pro novou populaci Kroky a. d. se opakují, dokud nedojde ke konvergenci. Zdrojový kód: Pro svou rozsáhlost je zdrojový kód tohoto příkladu uveden v kapitole 2.3. 31

Shrnutí pojmů Genetické algoritmy, účelová funkce, fitness Otázky 1. Popište genetické algoritmy. 2. Co je to účelová funkce? 3. Jaké vlastnosti mají genetické algoritmy? 4. Co je to fitness hodnota? 32

3 FUZZY LOGIKA Čas ke studiu 8 hodin Cíl Po prostudování této kapitoly budete umět: Definovat Fuzzy logiku Aplikovat Fuzzy logiku prostřednictvím softwarové aplikace Výklad Předpokládejme, že máme číselnou hodnotu pro vzdálenost k místu zájmu a chceme ji zařadit do jedné z následujících kategorií: "velmi blízko", "blízko", "blízko nebo daleko" nebo "daleko". To komplikuje záležitosti, předpokládejme, že odborníci se nemohou shodnout na tom, jaké hodnoty vzdálenosti určují členství v každé kategorii, a tak definují funkce, které odhadují míru členství v každé kategorii pro každou možnou hodnotu vzdálenosti. Například takové funkce mohou mít dané hodnoty vzdálenosti 5% "velmi blízko", 20% "blízko" a 75% "ani blízko ani daleko". Proto, pokud byste měli vybrat kategorii pro danou vzdálenost, mohli byste určit pouze "fuzzy" úrovně členství v každé kategorii. To je základ teorie fuzzy množin. 3.1 APLIKACE VYUŽÍVAJÍCÍ FUZZY LOGIKU Následující příklad pochází z knihy "Fuzzy Logic & Neurofuzzy Applications Explained" od Constantina von Altrocka. Skládá se z operace jeřábu, kdy program musí rozhodnout pomocí fuzzy úvah o tom, kolik výkonu je třeba aplikovat na jeřáb, vzhledem k známým měřením vzdálenosti a úhlu. Program začíná definováním funkcí členství a jazykových sad pro různé možnosti vzdálenosti, např. "Příliš daleko" nebo "střední". Ty jsou pak sestaveny do jazykové domény pro vzdálenost. Podobně jsou členové funkce, jazykové množiny a jazykové domény definovány pro měření úhlů a hodnoty výkonu (vypočítá se hodnota výkonu). Program pak deklaruje hodnoty pro známou vzdálenost (12 yardů) a úhel (4 stupně). Tyto hodnoty jsou při deklaraci přidruženy k příslušné doméně. Pak prohlašuje fuzzy hodnotu pro sílu, ale neurčuje známé měření, jelikož jsme ji vypočítali pomocí fuzzy logiky. Pak použijeme následující logiku: Pokud je vzdálenost střední a úhel je malý pozitivní, použijte kladný střední výkon. Je-li vzdálenost střední a úhel je nulový, použijte nulový výkon. Nakonec, pokud je vzdálenost daleko a úhel je nula, použijte kladný střední výkon. Všimněte si, že "malé pozitivní", "pozitivní médium", "střední", "nula" a "daleko" jsou všechny kategorie ne přesné hodnoty. 33

Chcete-li vybírat výsledek pomocí těchto kategorií, jsou naměřené hodnoty vzdálenosti a úhlu určeny každý stupeň členství v každé kategorii v příslušných oblastech. Pak se logika aplikuje pomocí fuzzy argumentů, aby se přiřadily pravděpodobnosti členství v moci v kategoriích výkonu. Konečně je vypočtena přesná hodnota pro výkon z vypočítaných pravděpodobností členství ve skupině a vykázána. Zdrojový kód #include "FuzzyValue.hh" #include <iostream> int main() std::cout << std::endl; std::cout << "This program demonstrates Dan Williams' yet untitled" << std::endl; std::cout << "fuzzy logic toolkit." << std::endl; std::cout << std::endl; std::cout << "It implements the crane example in Constantin von Altrock's book " << std::endl; std::cout << "'Fuzzy Logic & Neurofuzzy Applications Explained'" << std::endl; std::cout << std::endl; std::cout << "Distance sensor reads 12 yards." << std::endl; std::cout << "Angle sensor reads 4 degrees." << std::endl; LinguisticDomain* distance_domain = new LinguisticDomain("distance_domain"); StandardMBF_Z* distance_domain_too_far_membership = new StandardMBF_Z(-5, 0); LinguisticSet* distance_domain_too_far = new LinguisticSet (distance_domain_too_far_membership, "too_far"); StandardMBF_Lambda* distance_domain_zero_membership = new StandardMBF_Lambda(-5, 0, 5); LinguisticSet* distance_domain_zero = new LinguisticSet (distance_domain_zero_membership, "zero"); StandardMBF_Lambda* distance_domain_close_membership = new StandardMBF_Lambda(0, 5, 10); LinguisticSet* distance_domain_close = new LinguisticSet(distance_domain_close_membership, "close"); StandardMBF_Lambda* distance_domain_medium_membership = new StandardMBF_Lambda(5, 10, 30); LinguisticSet* distance_domain_medium = new LinguisticSet(distance_domain_medium_membership, "medium"); StandardMBF_S* distance_domain_far_membership = new StandardMBF_S(10, 30); LinguisticSet* distance_domain_far = new LinguisticSet(distance_domain_far_membership, "far"); distance_domain->addlinguisticset(distance_domain_too_far); distance_domain->addlinguisticset(distance_domain_zero); 34

distance_domain->addlinguisticset(distance_domain_close); distance_domain->addlinguisticset(distance_domain_medium); distance_domain->addlinguisticset(distance_domain_far); LinguisticDomain* angle_domain = new LinguisticDomain("angle_domain"); StandardMBF_Z* angle_domain_neg_big_membership = new StandardMBF_Z(-45, -5); LinguisticSet* angle_domain_neg_big = new LinguisticSet(angle_domain_neg_big_membership, "neg_big"); StandardMBF_Lambda* angle_domain_neg_small_membership = new StandardMBF_Lambda(-45, -5, 0); LinguisticSet* angle_domain_neg_small = new LinguisticSet(angle_domain_neg_small_membership, "neg_small"); 0, 5); "zero"); StandardMBF_Lambda* angle_domain_zero_membership = new StandardMBF_Lambda(-5, LinguisticSet* angle_domain_zero = new LinguisticSet(angle_domain_zero_membership, StandardMBF_Lambda* angle_domain_pos_small_membership = new StandardMBF_Lambda(0, 5, 45); LinguisticSet* angle_domain_pos_small = new LinguisticSet(angle_domain_pos_small_membership, "pos_small"); StandardMBF_S* angle_domain_pos_big_membership = new StandardMBF_S(5, 45); LinguisticSet* angle_domain_pos_big = new LinguisticSet(angle_domain_pos_big_membership, "pos_big"); angle_domain->addlinguisticset(angle_domain_neg_big); angle_domain->addlinguisticset(angle_domain_neg_small); angle_domain->addlinguisticset(angle_domain_zero); angle_domain->addlinguisticset(angle_domain_pos_small); angle_domain->addlinguisticset(angle_domain_pos_big); LinguisticDomain* power_domain = new LinguisticDomain("power_domain"); StandardMBF_Lambda* power_domain_neg_high_membership = new StandardMBF_Lambda(-30, -25, -8); LinguisticSet* power_domain_neg_high = new LinguisticSet(power_domain_neg_high_membership, "neg_high"); StandardMBF_Lambda* power_domain_neg_medium_membership = new StandardMBF_Lambda(-25, -8, 0); 35

LinguisticSet* power_domain_neg_medium = new LinguisticSet(power_domain_neg_medium_membership, "neg_medium"); 0, 8); "zero"); StandardMBF_Lambda* power_domain_zero_membership = new StandardMBF_Lambda(-8, LinguisticSet* power_domain_zero = new LinguisticSet(power_domain_zero_membership, StandardMBF_Lambda* power_domain_pos_medium_membership = new StandardMBF_Lambda(0, 8, 25); LinguisticSet* power_domain_pos_medium = new LinguisticSet(power_domain_pos_medium_membership, "pos_medium"); StandardMBF_Lambda* power_domain_pos_high_membership = new StandardMBF_Lambda(8, 25, 20); LinguisticSet* power_domain_pos_high = new LinguisticSet(power_domain_pos_high_membership, "pos"); power_domain->addlinguisticset(power_domain_neg_high); power_domain->addlinguisticset(power_domain_neg_medium); power_domain->addlinguisticset(power_domain_zero); power_domain->addlinguisticset(power_domain_pos_medium); power_domain->addlinguisticset(power_domain_pos_high); FuzzyValue* distance = new FuzzyValue(distance_domain); distance->setcrispvalue(12); FuzzyValue* angle = new FuzzyValue(angle_domain); angle->setcrispvalue(4); FuzzyValue* power = new FuzzyValue(power_domain); power->or_setsetmembership( distance->and("medium", angle, "pos_small"), "pos_medium" ); power->or_setsetmembership( distance->and("medium", angle, "zero"), "zero" ); power->or_setsetmembership( distance->and("far", angle, "zero"), "pos_medium" ); long double power_setting; power_setting = power->getcrispvalue(); std::cout << "Set power to " << power_setting << " kw." << std::endl; std::cout << std::endl; return 0; 36

Shrnutí pojmů Fuzzy, Software Otázky 1. Co je to fuzzy logika? 2. Jak byste využili fuzzy logiku v praxi? 37