keskiviikko 17. helmikuuta 2010

"Hutter yhteensopiva älykkyys"

Johdanto

Tietojenkäsittelyssä on käsite "turingin kone", jolla tarkoitetaan Alan Turingin määrittelemää yksinkertaista, kömpelöä hypoteettista tietokonetta. Kone oli kuitenkin siitä erityinen, että se pystyi laskemaan minkä tahansa asian, joka yleensä oli laskettavissa, kunhan koneelle annettiin vain tarpeeksi, jopa äärettömästi aikaa. Eräs edelleen johdettu jatkopäätelmä turingin koneesta oli, että se pystyi emuloimaan mitä tahansa muuta digitaalista (käytännössä myös analogista) laskentalaitetta, tietokonetta. Tästä edelleen saatiin käsite "turing-yhteensopiva suoritinarkkitehtuuri" eli tietokonearkkitehtuuri (käytännössä suorittimen käskykanta), joka oli kykenevä emuloimaan kaikkia muita tietokoneita. Yllätys monelle saattaa olla se, että tällainen kone, suoritin, ei ole kovin monimutkainen (kuten ei alkuperäinen turingin konekaan). Koneen käskykannalta vaaditaan perus-bittilogiikan funktiot, muistiin kirjoitukset ja luvut sekä muutama ehdollisen haarautumisen käsky. Siinä oikeastaan kaikki. Käytännössä kaikki toteutetut suorittimet ovat "turing-yhteensopivia".

Em. määrittelyssä häiritsevä seikka on kuitenkin se, että pienten suorittimien rajoitetut muistiavaruudet todellisuudessa estävät esim. 32-bittisten suorittimien emuloinnin 8-bittisiä suorittimia käyttäen. Minun ratkaisuni tähän on laajentaa "turing yhteensopivan suorittimen" käsite laskentasoluksi, joka pitää sisällään suorittimen, muistin ja muutaman viestinlähetyslinkin, joiden avulla useita, mielivaltaisen monta, identtistä, mutta vaatimatonta suoritinta voidaan kytkeä yhteen "laskentapilveksi". Tällaisella pilvellä voidaan teoriassa emuloida minkälaista tahansa laskentamekanismia, esim. ihmisaivoja. Yksi laskentasolu voi olla hyvinkin vaatimaton: esim 8-bittinen suoritin, jonka osoiteavaruuskin on 8-bittinen. Solu sisältäisi siis 256 tavua muistia, sekä koodia että dataa varten. Tai sitten voitaisiin käyttää harward-arkkitehtuuria, jossa data ja koodi erotettaisiin omiin 256:n tavun muisteihinsa. Järkevämpi, nykyaikainen laskentasolu voisi muodostua 32-bittisestä suorittimesta, 16Mtavusta muistia ja esim kahdeksasta sanomalinkistä. Hyvin pian on mahdollista koota esim. 1024 tällaista solua yhdelle ainoalle piirille: 1024 suoritinta ja 16Gtavua muistia. En nyt puutu tällaisen massiivisen multiprosessoinnin ohjelmoinnin ongelmiin ja ratkaisuihin.

Em. laskentasolujen sanomanlähetyslinkkien lukumäärä olisi oltava riittävän suuri, jotta pilven, verkon laajentaminen mielivaltaisen suureksi olisi mahdollista. Vanhemmat nörtit muistavat varmasti Transputer-arkkitehtuurin, jossa linkkejä oli neljä/solu. Neljän linkin avulla on mahdollista toteuttaa mielivaltaisen moniulotteinen hyperkuutioverkko, jonka solmut muodostuvat useasta laskentasolusta. Neljä linkkiä voisi siis olla yhden solun minimimäärä.



Asian ydin, johon edellä halusin viitata, oli se, että "turing-yhteensopiva suoritinarkkitehtuuri" on rakenteellisen monimutkaisuuden kynnystaso, joka mahdollistaa tietyn laajennettavuuden. Tämän laajennettavuuden avulla voidaan identtisillä soluilla toteuttaa mikä tahansa laskennallisesti mahdollinen toteutus, kunhan solujen määrä on riittävä. Laskentapilven rakenne ja suorittimen rakenne eivät sanele pilven laskennallista toiminnallisuutta, vaan ovat kiinteitä. Toiminnallisuuden rajat määrittelee vain pilven koko sekä suorittimiin ladattava ohjelma ja data. Esim FPGA-arkkitehtuuri ei ylitä vastaavaa kynnystä, koska sen laskennallisen toiminnallisuuden sanelee, paitsi yksittäisen makrosolun konfigurointi (vastaa em. laskentasolun ohjelmaa), myös ehdottomasti solujen kytkentä toisiinsa, eli FPGA-toteutuksen nettilista. Siten esim FPGA-makrosolu tai aivojen neuroni eivät ole "turing-yhteensopiva suoritinarkkitehtuuri".

Toinen yhteensopivuus

Tämän pitkähkön johdannon jälkeen tullaan pohdiskelemaani asiaan. Voisiko olla olemassa toinenkin, edellisen kaltainen, mutta merkittävästi korkeampi monimutkaisuuden kynnystaso, jota haluaisin kutsua, paremman nimen puutteessa, "hutter-yhteensopivuudeksi"? AIXI on Marcus Hutterin ideoima hypoteettinen älykkään agentin malli, jossa on tiettyä yhdenmukaisuutta turing-koneen kanssa. Itse asiassa malli muodostuu kahdesta turing-koneesta, joista toinen on älykäs agentti ja toinen mallintaa ympäristöä. Hutterin älykkään AIXI-koneen monimutkaisuus riippuu ympäristön monimutkaisuudesta. Yksinkertaisessa ympäristössä monimutkaisuuden aste voi olla hyvin rajallinen, mutta Hutterin käsite "universaali älykkyys" edellyttää AIXI-koneelta ääretöntä monimutkaisuutta. AIXI-malli toimii ajallisesti ja topologisesti silmukassa, jossa agentti lukee ympäristön tilan, määrittelee ja suorittaa toimenpiteen ympäristölle. Ympäristö vastaa antamalla agentille kaksi arvoa: uuden ympäristön tilan ja "palautteen". Palaute, palkkiosignaali, kertoo toimenpiteen onnistuneisuuden, esim -100%.. +100% asteikolla. Agentin tehtävä on laskea ympäristölle uusi toimenpide ja yrittää oppimalla maksimoida palautteen arvo. Agentti on ehdottomasti oppiva. Sen on opittava ennakoimaan ympäristön uusi tila ja palautteen arvo. Tiedän, että käytän AIXI-termiä hieman väärin, koska viittaan vain ylimmän tason järjestelyyn, enkä Hutterin matemaattiseen esitykseen ideaalisen AIXI-koneen sisäisestä toiminnallisuudesta.

Kynnystason AIXI-kone olisi kykenevä oppimaan jonkin kohtuullisen monimutkaisen ympäristön ja optimoimaan toimintansa, hyötyfunktionsa, kuvatussa ympäristössä. Oleellisista määritelmälle olisi vaadittava ympäristön monimutkaisuus kynnystasolla toimittaessa. Ympäristön monimutkaisuuden määrittelee sitä mallintavan ohjelmiston koko ja monimutkaisuus: kolmogorov-monimutkaisuus. AIXI-agenttin tavoitteellisuus on ulkoisesti annettavan palkkiosignaalin maksimoimista. Muu tavoitteellisuus, esim ulkoa annetun tehtävän toteuttaminen, voidaan tulkita osaksi ympäristöä. Agentti ei siis toiminnallisesti tee eroa "esimiehen" ja toimintaympäristön välillä. Esimies on osa toimintaympäristöä, kuten kaikki muukin havaittava, esim agenttikumppanit.

Kuvattu ajattelutapa ei rajoita agentin sisäistä arkkitehtuuria, mutta minun skenaariossani se voisi muodostua kahdesta tasosta: alisymbolinen taso ja käsitetaso. Molemmat tasot rakentuvat hierarkisista verkoista, joiden sisällä on myös lateraalisia kytkentöjä. Lateraalisten kytkentöjen osuus kasvaa noustessa hierarkiassa ylöspäin.Lisäksi hierarkioiden sisällä tieto virtaa kahteen suuntaan, aistitieto hierarkiassa ylöspäin ja toiminallinen ohjaus alaspäin. Verkkojen solmujen rakenteelle on eri vaihtoehtoja, mutta alisymbolisella tasolla staattisten ja dynamisten hahmojen tunnistus on oleellista ja käsitetasolla tärkeää on rakenteen dynaamisuus: uusia rakenteita luodaan työtilaan ja hävitetään prosessoinnin kuluessa. Agentin on kyettävä alisymbolisista hahmoista, niiden sekvensseistä ja lainalaisuuksista muodostamaan uusia käsitteitä. Mutta tämä kaikki oli vain vihjailua. AIXI-koneen rakenne ei ole tämän jutun keskeistä sisältöä. Tärkeintä on todeta, että se edustaa kynnystasoa, yksinkertaisinta, toimivaa "yleistä älyä". Kunhan tämä ehto täyttyy, agentti on "hutter-yhteensopiva".(En kehtaa ottaa käyttöön käsitettä "jusa-yhteensopiva", Hutter voi hyvin lainata nimeään tähän. Oletan, ettei myöskään Alan Turing nimennyt itse käsitteitä "turing-yhteensopiva" tai "turing-täydellinen".)

Samoin kun ajattelin turing-koneen kanssa, pidän luonnollisena, että myös AIXI-agentit on yhdistettävissä toisiinsa, mahdollistaen mielivaltaisen monimutkaisia älykkäitä järjestelmiä. Näen ajatusrakennelmien, teorioiden, maailmankuvien.. monimutkaisuuden olevan aina hajoitettavissa hierarkisesti eriteltäviksi käsiterakennelmiksi. Mutta tarkoitukseni on, että kokonaisjärjestelmä itse, automaattisesti toteuttaa tämän hajautetun monimutkaisuuden hallinnan. Siten yhden agentin rajalliset kyvyt ovat riittäviä sillä hierakiatasolla, jossa se oppii toimimaan. Sen ei tarvitse paljoa tietää alemmista, eikä ylemmistä tasoista. Näin toimii ihmisorganisaatioidenkin älykkyys. Kukaan ei täysin hallitse organisaation koko toiminnallisuutta. Lattiatasolla ei tarvitse paljon tietää pomojen ongelmista, eivätkä pomot tunne lattiatason osaamisen hienouksia. Ja organisaation keskellä ei tiedetä kummistakaan paljoa, noin periaatteessa, riippuen omasta työhistoriasta.

Luonnostelen siis, että "älypilven" "hutter-yhteensopiva älysolu" olisi kytketty sanomavälityksellä vaikkapa kahdeksaan organisatorisesti alemman tason (mutta rakenteellisesti identtiseen) älysoluun, 32:een lateraaliseen, oman tason naapurisoluun, sekä neljään lähinnä ylemmän tason ("esimies-")soluun, joista yksi olisi "varsinainen esimies". Linkit olisivat kaksisuuntaisia. Käsitteeni, "hutter-yhteensopivuus", viittaa siis yksinkertaisimpaan älylliseen monimutkaisuuteen, jolla älysolut kykenevät automaattisesti järjestäytymään, ohjaamaan toisiaan, oppimaan ulkoisen palkkiosignaalin avulla "tyhjästä", siis ilman "kovakoodattua" bias-älyä siihen kokonaistoiminnallisuuten, johon palkkiosignaali ne ohjaa.



On hyvin todennäköistä, että luonnostelemani arkkitehtuuri ei olisi oikeasti ihan toimintakykyinen, vaan vaatisi monenlaista tukitoiminnallisutta ja alueellista hienosäätöä. Esim hierarkian ylemmillä tasolla saatattaisi olla mielekästä luopua älysolujen alisymbolisesta kerroksesta. Toinen ajattelemisen arvoinen asia voisi olla luopua Hutterin ideaalisesta yleisyydestä ja varustaa rakenne oppimista nopeuttavalla, kovakoodatulla biaksella, esim arvo- ja tavoitehierakialla. Mutta hieman epäilen, että tällä lopulta voitettasiin vähemmän, kuin mitä tämän toteutuksen uudet vaikeudet maksaisivat. Parempi ratkaisu voisi olla panostaa älykkään keinoympäristön kehittämiseen, joka eteenkin harkitun progressiivisesti palkkiosignaalia käyttäen asteittain opettaisi suuren verkon yhä monimutkaisempien kokonaisuksien ja tehtävien hallintaan. Tällöin ongelmana voi olla ihmisen tason ylittäminen. Emme ehkä osaa tehdä riitävän älykästä opetusohjelmaa! Olen kuitenkin melko varma, että olen oikeilla jäljillä. Aika näyttää.

Yhteenvetoa

Mitä tällä käsitteellä siis voitetaan? Jos pitää paikkansa että on olemassa yllä kuvattu kynnysmonimutkaisuus ja että sen ylittävä rakenne on toteutettavissa, niin se helpottaisi merkittävästi AGI:n, Yleisen Tekoälyn toteuttamista. Riittäisi kun toteutetaan juuri ja juuri tuon kynnyksen ylittävä toiminnallisuus ja sen avulla, monistaen, toteutettaisiin yhä suurempia hierarkioita, jotka lopulta ohittavat suurella marginaalilla ihmisen älykkyyden. Myös tietokoneen kehitys olisi voinut ehkä 1970- tai 1980-luvulla haarautua ensin kuvatulle "laskentapilven" tielle, mutta kaupallisista ja ja ohjelmointiteknisistä syistä tämä suuntaus ei toteutunut. Transputerit olivat lähimpänä tätä ajattelua. Nyt moniydintekniikka on yleistymässä, koska vaihtoehtoinen tie on jo kuljettu loppuun. Ohjelmointiongelmien lisäksi moniydinsuorittimien suuri ongelma on muistiyhteyden jakaminen kymmenien, satojen, tuhansien... suorittimien kesken. Se ei onnistu kovin kauan. Edessä on väistämätön: muistipiirit ja suorittimet on sulautettava samaksi arkkitehtuuriksi, sama piiri, piipala, tulee sisältämään kymmeniä gigatavuja RAM-muistia sekä satoja suorittimia.

Tätä samaa puolijohdeteknologiaa voitaisiin soveltaa myös yllä (hyvin alustavasti) luonnostellun älyarkkitehtuurin toteuttamiseen. Tämä voisi olla käytäntönä 2020-luvulla.

Ei kommentteja:

Lähetä kommentti