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.
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.
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ů.
I 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ů.