Kirjoittaja MaKo » 17.01.2012, 18:58:39
Tekoälyihin liittyvät kysymykset pyörivät nyt sen verran mielessä, että jatketaan ääneen ajattelua. Vaikka tniemi tuohon väliin ehtikin jo postata, niin postaan tämän, koska tämän kirjoittamiseen kului niin paljon vaivaa. Joku päivä ajattelin kirjoittaa aiheesta jotain blogimerkintöjäkin. Tässä postauksessa keskityn miltei yksinomaan ongelmanratkaisuun, toiminnan suunnitteluun; on aika hämmentävää, että aivot (ihmisten ja eläinten) palvelevat yhtä aikaa koko tekoälyn monipuolista kenttää: ongelmanratkaisua, motorista ohjausta (kybernetiikkaa), hahmontunnistusta, ...
Olen aina välillä miettinyt, millainen laite (device) toimisi tekoälyn peruspalikkana, tavallaan tekoälyn "transistorina". Digitaalitekniikasta tiedän sen, että aluksi on aivan mahdottoman vaikea käsittää, miten prosessorit ja tietokoneet voivat rakentua niin yksinkertaisesta palikasta kuin transistori. Mutta niin se on, että kun transistoreja kytketään tarpeeksi paljon oikealla tavalla toisiinsa, saadaan aikaiseksi prosessori, jonka pyörittämät bitit mahdollistavat webbisurffauksen. Millainen olisi tekoälyn "transistori", joka riittävän suurina määrinä, oikein kytkettynä tuottaisi koneen, joka oppisi sekä pelaamaan shakkia että kääntämään C:tä konekieleksi?
Mainitsin aiemmin, että liputtaisin hakuihin (oikeammin reitin etsimiseen) perustuvien ratkaisujen puolesta, jos nyt pitäisi valita jokin väline tekoälyn perusrakennuspalikaksi. Siihen ei ole olemassa kovin perusteltua syytä. Lähinnä se johtuu siitä, että nykyisen tavallisen pöytäkoneen ohjelmistoista ne, joiden voidaan katsoa suorittavan jotain orastavasti älyllistä puuhaa (pelejä pelaavat algoritmit ja kääntäjät), perustuvat monilta osiltaan reitin etsintään eivätkä esimerkiksi hahmontunnistukseen. Toisaalta aivojen neuronin ajatellaan olevan nimenomaan hahmontunnistin (vrt. ), toisaalta aivojen toiminnan oletetaan nojaavan vielä käyttäytymiseltään huonosti tunnetun neuroneista rakentuvan NCC:n () varaan.
Hakualgoritmissa on oikeastaan kaksi keskeistä osaa: muisti ja generaattori. Koodausmielessä hakualgoritmit ovat kaikki samanlaisia, hakujen erot syntyvät siitä, millaista informaatiota ongelmasta voidaan hyödyntää: tunnetaanko etäisyys tilanteesta toiseen, voidaanko laskea tilanteiden keskinäinen etäisyys, saadaanko arvio tilanteen ja maalin välille, ja niin edelleen. Mitä enemmän informaatiota voidaan hyödyntää haun rajoittamiseen, sen parempiin tuloksiin päästään.
Hakualgoritmissa muistin tehtävänä on tallentaa ne tilanteet, joiden jatkotilanteet on jo generoitu. Evolutiivisissa hauissa muistina toimii nk. populaatio. Ilman muistia hakualgoritmilla on vaara jäädä kiertämään kehää. Generaattori on puolestaan palikka, joka osaa luoda syötteenä saamastaan tilanteesta jatkovaihtoehtoja. Jos generaattori osaa luoda kaikki mahdolliset jatkovaihtoehdot, päädytään johonkin perinteisistä hakualgoritmeista (Depth-First, Breadth-First, A*).Jos taas kaikkia ratkaisuja ei syystä tai toisesta voida generoida, päädytään johonkin evolutiiviseen tai vastaavaan hakuun. Evolutiivisissa hauissa generaattorin tuotokset saattavat olla epäkelpoja, joten ne on karsittava pois. Useimmille hauille on myös edullista se, jos muistista voidaan hakea seuraavana käsiteltäväksi parhaimmilta vaikuttavat vaihtoehdot.
OK, tuohon asti kaikki on suhteellisen selkeää. Mun on helppoa nähdä läjä generaattoreita pulppuamassa uusia ideoita sähköisen pään sisällä, mutta sen jälkeen multa hajoaa ajatus. Ensimmäinen este on se, kun koetan mieltää, miten hakuja suorittavat koneet saadaan yhdistettyä toisiinsa hierarkiseksi järjestelmäksi. Yhden hakukoneen pitäisi saada ongelman "kuvaus" (jatkotilanteiden generointiin tarvitut tiedot) toisilta hakukoneilta - yksittäisen hakukoneen tuloksien puolestaan pitäisi toimia seuraavien syötteinä. Näistä pitäisi kaiken kaikkiaan saada aikaiseksi jonkinlainen sykli.
Tuosta seuraa myös toinen hahmottelua vaikeuttava este: kuinka esittää tilanteet niin, että ne voivat nivoutua toisiinsa (toimia toisen generaattorin syötteenä)? Ihmisen ongelmanratkaisukoneen eräs hienoimpia piirteitä on se, kuinka se kykenee käsittelemään tilanteita monella tasolla. Toimia voi suunnitella miltei portaattomasti erilaisilla aikajänteillä: "Isona minusta tulee autokorjaaja, menenpä siis yläasteen jälkeen ammattikouluun", "töiden jälkeen käyn ensin kaupassa", "minun pitäisi päästä ovelle, kierränpä siis edessä olevan laatikon." Eri aikajänteiltä saatuja ratkaisuja ja mahdollisuuksia voi siirtää tarkemmin käsiteltäväksi ("Löydänkö kolmen vuoden päästä oikean luokan ammattikoulun ensimmäisenä päivänä?") tai yksityiskohtaisempia mahdollisuuksia kokonaisuuksien osiksi ("ostanpa nyt kolme purkkia maitoa, niin huomenna voin tulla suoraan kotiin"). Miten ihmeessä tämä tehdään?
Jos tästä nyt halutaan vielä vetää aasinsiltaa ketjun alkuperäiseen aiheeseen, niin juuri tältä pohjalta ajateltuna mun on vaikea nähdä, että esimerkiksi vaikkapa moraalisia tekijöitä voitaisiin pakottaa tekoälyn ongelmanratkaisukoneeseen. Kun se itse generoi sääntöjä itselleen (vrt. yhden generaattorin jatkomahdollisuuksien tuottamiseen tarkoitut säännöt tulevat muilta generaattoreilta), niin missä välissä siellä on "moraalipoliisi" (ja millainen?) vahtimassa, ettei sääntöjen jatkomahdollisuuksien joukkoon epämoraalista tavaraa?