next up previous contents
Next: Výsledky experimentů Up: Implementace učení RBF sítí Previous: Gradientní učení   Obsah


Genetické algoritmy

V kapitole 6.1.4 jsme zmínili, že Bang2 obsahuje agenty pro realizaci obecného genetického algoritmu. Nyní chceme tohoto agenta použít pro učení RBF sítí genetickými algoritmy. Musíme tedy k tomuto obecnému algoritmu připojit agenta, který bude realizovat genetické operátory na jedincích představujících RBF sítě, a agenta, který bude schopen takovéto jedince ohodnotit.

Součástí obecného genetické algoritmu v systému Bang2 je agent George (Genetix), realizující jádro genetického algoritmu, a agent jménem Sally realizující ruletovou selekci. Protože Rafael byl prvním uživatelm těchto agentů, bylo třeba je modifikovat a rozšířit.


Tabulka 6.2: Přehled agentů podílejících se na genetickém učení.
Úloha Genetické operátory Chybová funkce
Učení všech parametrů Oakley Fififjonka
RBF sítě    
Učení parametrů Oakley Bart
skryté vrstvy    
Hledání středů Vivian Vivian
(vektorová kvantizace)    


Popíšeme tedy nejprve tyto dva agenty. Poté se podíváme na agenty Oakleyho, Vivian a Fififjonku realizující různé genetické operátory a účelovou funkci pro účely učení RBF sítí. Přehled agentů zapojených do genetického učení je v tabulce 6.2.

George(genetix.html)
Agent George (viz Genetix, kapitola 6.1.4) realizuje vlastní genetický algoritmus. Protože tento algoritmus je iterativního charakteru, byl modifikován tak, aby byl potomkem Iteračního algoritmu a měl stejné rozhraní jako ostatní iterační agenti.

Pro realizaci modifikace genetického algoritmu popsané v části 5.4, kdy účelovou funkci nahradíme chybou funkce a hledáme její minimum, je George upraven tak, že umí pracovat ve dvou módech. Buďto pracuje s klasickou účelovou funkcí, nebo s chybou. Mód si nastaví sám. Umí-li agent, který je k němu připojen, spočítat účelovou funkci, George pracuje v klasickém módu. V opačném případě se jej zkusí zeptat, zda umí alespoň spočítat chybu. Pokud je odpověď kladná, přepne se do druhého módu.

Dále byla Georgovi přidána schopnost zálohovat populaci do souboru. Populace se ukládá jako posloupnost XML řetězců odpovídajících jednotlivým jedincům. Protože však George neví nic o struktuře jedinců, se kterými pracuje (neboť tu potřebují znát pouze operátory), neumí už z tohoto souboru populaci obnovit. Nemá totiž ani schopnost vytvářet nové jedince, to za něj vždy dělá agent představující genetické operátory. Ten už je specializován na daný typ jedinců a na něj tedy byla přesunuta schopnost tyto jedince ze souboru obnovit.

Práce s  Georgem probíhá jako u každého Iteračního algoritmu. Před spuštěním výpočtu je možné příkazem <config/> nastavit velikost populace, velikost elity a frekvenci zálohování populace. Příkaz <setservant id="AGENT" job="[fitness|operators|select]"/> umožňuje připojit jednotlivé specializované agenty. Pokud tak nikdo neučiní, George se pokusí najít tyto agenty sám.

Poté je spuštěn výpočet. Během něho je zobrazována chyba a iterace. Pokud se tyto informace ukládají do souboru, je s nimi navíc zapisována průměrná chyba a chyba nejhoršího jedince, délka nejlepšího jedince a průměrná délka jedinců v populaci. Po skončení výpočtu je jako výsledek předán nejlepší jedinec přes binární rozhraní ( <get> <var> <result/> </var> </get>).

Obrázek 6.7 znázorňuje postup George při vytváření nové populace.

Obrázek 6.7: 1. George získá od agenta realizujícího selekci vybrané jedince 2. Předá vybrané jedince genetickým operátorům, dostane nové jedince 3. Nové jedince předá agentovi realizujícímu chybovou funkci, která pro ně spočte hodnotu chyby
\begin{figure}
\leavevmode
\centering\epsfxsize =0.6\textwidth
\epsfbox {genetix1.eps}\end{figure}

Sally(gaselect.html)
Agent Sally realizuje ruletovou selekci. Žadatel o provedení selekce předá Sally přes binární rozhraní vektor hodnot účelové funkce a obdrží požadovaný počet vybraných jedinců.

Sally byla rozšířena o práci s chybou místo účelové funkce. Žádost o provedení selekce obsahuje i specifikaci, o který případ se jedná. V případě, že Sally obdrží chybové hodnoty, provede výpočet pravděpodobností tak, aby jedinci s malou chybou měli velkou pravděpodobnost výběru.
<query> <bin> <query> <select type="[error|fitness]"> </query> </bin>
</query>

Oakley(rbfgeop.html)
Agent Oakley ovládá genetické operátory pro učení RBF sítí. Umí vytvářet jedince reprezentující RBF síť nebo její skrytou vrstvu a aplikovat na ně operátor mutace a křížení.

Než budeme po Oakleym požadovat dané operace, musíme mu dát informace o tom, jak požadovaná RBF síť vypadá, tedy počet skrytých jednotek a informace o tom, jaké mají RBF jednotky parametry. Počet jednotek nemusíme specifikovat, tedy bude se také učit a Oakley bude vytvářet jedince různých délek. Dále můžeme určit, zda se jedná o kanonickou nebo klasickou verzi genetického algoritmu (viz kaptila 5.3). Lze zadat i omezení pro generování náhodných hodnot jednotlivých parametrů. Vše lze zadat příkazem <config/>. Chybějící informace si Oakley nahradí svými přednastavenými hodnotami.

Samotné operace pak probíhají přes binární rozhraní. Oakley tedy dokáže přes binární rozhraní zpracovat příkaz <operator num="INDEX"/>, kde INDEX určuje, o který operátor se jedná.

Vivian(vqgeop.html)
Agent Vivian realizuje genetické operátory pro operace s množinami vektorů pro účely vektorové kvantizace (viz část 5.6). Chování je podobné jako u  Oakleyho. Navíc k ní lze připojit Tréninkovou množinu a používat ji i jako chybovou funkci.

Fififjonka(fitness.html)
Agent Fififjonka umí spočítat hodnotu chybové funkce pro jedince předstvujícího RBF síť.

Práce s tímto agentem je jednoduchá. Je třeba pouze připojit tréninkovou množinu, případně příkazem <config> <error lambda="FLOAT"/> </config> zadat hodnotu regularizačního členu (viz 2.4.1).

Komunikace pak probíhá přes binární rozhraní zpracováním zprávy <query>
<error/> </query>.

Má-li RBF agent použít k učení své sítě genetické algoritmy, měl by o to požádat George.

Chce-li učit celou síť, připojí jako genetické operátory Oakleyho, jako chybovou funkci Fififjonku a jako selekci Sally. Jednotlivé agenty si může pomocí příkazu <config/> nakonfigurovat podle svých představ. Například Oakleymu může sdělit, zda chce učit i počet skrytých jednotek a Oakley má vytvářet jedince různých délek, nebo zda použít kanonické operace. Pak pošle Georgovi příkaz ke spuštění výpočtu, případně zadá kritérium ukončení a počká si na výsledek.

Jinou možností je použít genetické učení pouze pro určení parametrů skryté vrstvy. Pak nakonfiguruje Oakleyho tak, aby vytvářel pouze jedince představující skrytou vrstvu. Jako účelovou funkci připojí Barta. Jedinci představující skrytou vrstvu jsou ohodnocováni Bartem tak, že je nejprve na určitý počet iterací spuštěn genetický algoritmus, který jedinci dopočte hodnoty vah, poté se spočte hodnota chybové funkce takto naučené sítě a použije se jako hodnota účelové funkce.

Po skončení genetického algoritmu jsou váhy vítězné sítě doučeny gradientním algoritmem.

Posledním použitím genetického algoritmu je první krok třífázového učení. Rafael připojí k  Georgovi agenta Vivian, a to jak na místo operátorů, tak na místo účelové funkce. Vivian předá tréninkovou množinu, na jejímž základě je počítána účelová funkce. Výsledkem genetického učení je pak množina vektorů, které Rafael použije k nastavení středů.


next up previous contents
Next: Výsledky experimentů Up: Implementace učení RBF sítí Previous: Gradientní učení   Obsah
Petra Kudova
2001-04-19