keskiviikko 28. lokakuuta 2015

Teoriassa vaikeaa - mutta mitä siitä!

Kävin katsomassa Alan Turingin elämästä kertovan elokuvan ”Imitation game”. Sen innostamana luin lopultakin Andrew Hodgesin maineikkaan elämäkerran ”Alan Turing: arvoitus” (Terra Cognita, 2000). Elokuva oli hyvä, vaikka se vetikin niin sanotusti mutkat suoriksi. Joten siitä ei sen enempää (paitsi että on syytä korostaa, että elokuvassa rakennettu koodeja murtava kone,"Bombe" ei ole maineikas ”Turingin kone” - eikä Turing ole edes keksinyt sitä, vaan puolalaiset matemaatikot). Sen sijaan tuo kirja, joka on kyllä raskasta luettavaa, lumosi minut. Ja aivan erityksestä syystä.

Tähän lumoukseen on kaksi syytä. Ensin se yksinkertaisempi. Kirjassa Turing kohtaa urallaan, useimmiten henkilökohtaisesti, ne samat legendaariset tiedemiehet, joiden ajatuksiin tutustuin itse opiskellessani teknillisessä korkeakoulussa tietokonetekniikkaa, säätötekniikkaa ja niihin liittyviä aineita 1970- luvun alussa. Näitä henkilöitä olivat Ludwig Wittgenstein, David Hilbert, Kurt Gödel, Bertrand Russell, Claude Shannon, Norbert Wiener ja John von Neumann. Turingin uran aikana, karkeasti ottaen vuosina 1932- 1952 luotiin se teoriapohja, jonka varaan syntyi meidän uusi aikamme, tietokoneiden, automaation, viestinnän ja internetin aika. Turing ei suorastaan tuottanut teorian läpimurtoja, mutta oli innokkaasti mukana, ja julkaisi myös itse lukuisia teorioihin vaikuttaneita artikkeleita. (Turingin koneeseen liittyvä teoria on kuitenkin poikkeus, ja siitä kohta lisää). Tieteen edistykseen Turing toki vaikutti. Toisin kun luullaan, tiede ei voi edistyä vain nimekkäiden tiedemiesten oivallusten varassa. On olennaista, että samoista asioita kiinnostuneet tutkijat kommentoivat, korjaavat, vastustavat ja täydentävät heidän teorioitaan.

Kun itse opiskelin samoja asioita noin 30 vuotta myöhemmin, kohtasin nuo samat tutkijat ja heidän ajatuksensa. Jouduin siihen samaan taikamaailmaan, jossa Turing vaikutti itse mukana, toimijana ja pohtijana. Ja kun nyt luin Hodgesin kirjaa, sama lumouksen ja ihmeen maailma palasi elävänä mieleeni.

Turingin keskeinen saavutus, Turingin koneiden teoria, ei liittynyt niinkään tietokoneisiin, vaan puhtaaseen matematiikkaan ja matematiikan filosofiaan. Vuonna 1936 hän julkaisi artikkelin ”On computable numbers...” (Luvuista, jotka voidaan laskea). Sen tausta on asioita rankasti yksinkertaistaen seuraava. Hilbert tavoitteli matematiikan täydellistä ja ristiriidatonta järjestelmää, ja uskoi, että sellainen voidaan luoda. Gödel osoitti, että sellaista ei voi olla. Aritmetiikka ei voi olla samalla sekä ristiriidaton että täydellinen. Todistuksessaan Gödel rinnasti väittämät lukuihin. Avoimeksi jäi, voidaanko matemaattisen väitteen mahdollinen todistettavuus osoittaa jollain mekaanisella prosessilla, joka muodostuisi sarjasta täsmällisesti kuvattuja operaatioita, vähän samoin kuin shakkipelissä noudatetaan tarkkoja sääntöjä .**

Todistettavuusongelman ratkaisemiseksi Turing kuvitteli mielessään yksinkertaisen koneen, joka laskisi väittämiä vastaavia lukuja. Sitten hän osoitti, että ei voida etukäteen päätellä, saadaanko laskennasta jokin täsmällisesti määritelty tulos, siis esimerkiksi päättyvä tai jaksollinen desimaaliluku. Saattaa olla, ettei kone pysähdy koskaan, jolloin väittämästä ei voi sanoa mitään varmaa. Itse koneen konstruktio, jota en lähde nyt selittämään, on täysin looginen ja aukoton - eikä se edes ole kovin mutkikas. Sen toimivuudesta ei siten jää mitään epäilystä.

Hyvin harva pystyi aikanaan ymmärtämään Turingin artikkelia, mutta vähitellen se herätti kasvavaa huomiota. Hänen kuvitteellista laitettaan alettiin sanoa Turingin koneeksi. Artikkelissa oli myös sivujuonne, joka herätti vähintään yhtä paljon huomiota. Pitäisikö jokaista tutkittavaa väitettä varten rakentaa juuri sitä tutkiva kone? Turing totesi, että voidaan rakentaa kone, joka aluksi lukee sisäänsä ongelmaa ratkaisevan koneen kuvauksen, ja alkaa sitten jäljitellä sitä. Tällaista konetta alettiin nimittää universaaliksi Turingin koneeksi. Turingin artikkelin tiivistetty tulos on siis: kaikki mitä ylipäätään voidaan laskea tarkasti, voidaan laskea universaalilla Turingin koneella***.

On toinenkin syy, miksi Hodgesin kirja lumosi minut. Se tuntuu kertovan kummallisesta lainalaisuudesta, teorian ja käytännön mutkikkaasta suhteesta. Tietokoneen kehitys ei nimittäin saanut vauhtia Turingin tekemästä kehitystyöstä. Turing ajautui mukaan kehittämään ensimmäisiä tietokoneita aivan toisesta syystä. Hänen sodan aikainen työnsä salakirjoituskoodia murtavien koneiden parissa oli perehdyttänyt hänet konkreettisella tavalla sähkömekaaniseen elektroniikkaan, ja viimeisissä murtamiskoneissa (Colossus) kokeiltiin jo elektroniputkia. Niistä saatiin hyviä kokemuksia, joten pian sekä Britanniassa että Yhdysvalloissa alettiin suunnitella putkilla toimivia laskukoneita, muun muassa tykistön ballististen taulukoiden ja atomipommilaskelmien jouduttamiseksi.

Edellä kerroin, kuinka Turing oli 10 vuotta aikaisemmin esittänyt universaalin koneen idean, se olisi laskeva kone, jonka muistiin luettaisiin ensin sen toimintaa ohjaava koodi. Idean toteuttamista tietokoneessa ei kuitenkaan esittänyt Turing, vaan toinen nero, John von Neumann****. Siksi nykyisen kaltaisia tietokoneita sanotaan joskus von Neumannin koneiksi. Turing alkoi suunnitella ACE- nimistä elektronista tietokonetta, mutta hanke joutui vaikeuksiin. Hän siirtyi turhautuneena Manchesterin yliopiston tietokoneprojektiin, joka oli jo pitkällä. 500 elektroniputken demonstraatiokone (1948) oli maailman ensimmäinen toimiva elektroninen ”von Neumann” tietokone. Siitä kehittyi Mark I malli, jossa putkia oli jo 4000. Turingissa yhdistyi abstrakti teoreettinen ajattelu ja hyvin konkreettinen työtapa. Turing ei osallistunut vain teorian tasolla, vaan laatimalla ja testaamalla konekielisiä ohjelmia, ja rakentamalla ja korjaamalla elektronisia piirejä.

Teorian ja käytännön mutkikkailla suhteilla on historiansa. Mekaaninen laskukone voitaisiin helposti rakentaa hyvin konkreettista laskemisen tarvetta varten pelkästään käsityötaidon varassa. Kuitenkin varhaisen mekaanisiin hammaspyöriin perustuvan laskukoneen rakensi matemaatikko Blaise Pascal vasta 1600-luvulla. 1700- luvulla matemaatikko Gottfried Leibniz suunnitteli ehkä ensimmäisen mekaanisen laskukoneen, joka pystyi kertolaskuun. Ehkäpä konkreettinen työ ja mekanismien kanssa leikittely ei välttämättä olekaan abstraktin ajattelun vastakohta, vaan jopa oudolla tavalla sille sukua.

Teorian ja käytännön suhde on kirjassa vieläkin monimutkaisempi. Turingin koneen idealla on lähes käsittämätön matemaattinen voima - mutta se vaikuttaa periaatteellisella tasolla, sillä ei ole juuri mitään roolia arkipäiväisten ongelmien parissa. Ehkä tuon voiman sokaisemina Turing ja hänen kollegansa antautuivat laajoihin kybernetiikkaa ja tekoälyä koskeviin spekulaatioihin. He tuntuivat olevan uskomattoman tietämättömiä edes kielitieteen tai psykologian alkeista. Turing tosin selvitteli aivojen neuronien määrää, ja päätyi jopa 10 miljardin solun arvioihin - valtava kontrasti verrattuna sen aikaisten laskentakoneiden kapasiteettiin: muutama tuhat muistipaikkaa tai elektroniputkea.

Siitä huolimatta Turing uskoi tietokoneiden supervoimiin. Hän muotoili kuuluisan Turingin testin. Ajatellaan suljettua huonetta, jossa on joko tietokone tai ihminen, ja joka kommunikoi koneella kirjoitettujen viestien kautta. Jos huoneen ulkopuolelta ei voida päätellä, onko huoneessa tietokone vai ihminen, Turingin mukaan voidaan sanoa että tietokone pystyy ajattelemaan. Turingin testiin on vaikea suhtautua, mutta harva yhtyisi päätelmään tietokoneen ajattelukyvystä, vaikka se onnistuisikin huijaamaan ulkopuolella olijoita. Testin muunnelma on ”Searlen kiinalainen huone” (John Searle on amerikkalainen filosofi). Nyt huoneessa istuu henkilö, joka lukee huoneeseen sujautettuja kiinan kielellä kirjoitettuja lappuja. Hän ei osaa kiinaa, vaan valitsee vastaukset suuresta koodikirjasta. Kirja on niin laaja ja hyvin laadittu, että vastaukset ovat järkeviä. Kysymys kuuluu: osaako tuo huone kiinaa?

Filosofiaan taipuvat lukijat voivat huvitella pohtimalla, ovatko nämä testit syvällisiä vai lapsellisia.

Palaan vielä Turingin lumottuun maailmaan, sillä jouduin sinne uudelleen ensimmäisessä työpaikassani Strömbergillä 1970- luvun loppupuolella. Yhtiössä vallitsi suuri innostus tietokoneisiin. Se oli jo suunnitellut ja rakentanut pienen sarjan järeitä Selco-1000 teollisuustietokoneita (kone muistutti pioneeriajan tietokoneita, se käsitti useita kahden metrin korkuisia instrumenttikaappeja, joiden etupaneelissa oli riveittäin värillisiä vilkkuvia lamppuja). Sen jälkeen siirryttiin niin sanottuihin minitietokoneisiin (sellainen painoi kymmenkunta kiloa ja mahtui vaikka kirjoituspöydälle). Toteutimme näillä koneilla teollisuuden automaatiojärjestelmiä. Laadimme konekielisiä ohjelmia (tarkemmin sanoen symbolista konekieltä eli assembleria). Alkuaikojen tietokoneiden tapaan ohjelmat syötettiin koneisiin paperisilla reikänauhoilla. Työ oli laiteläheistä, toisin sanoen tiesimme ja ymmärsimme pienintä yksityiskohtaa myöten, mitä tietokoneessa ja sen oheislaitteissa sekä ohjattavissa teollisuusprosesseissa tapahtui.

Mielenkiintoisin vaihe alkoi, kun siirryimme käyttämään mikroprosessoreita - ne olivat varsinaisiin tietokoneisiin verrattuina halpoja, pieniä ja luotettavia. Tässä vaiheessa tapahtui useita kertoja, että teoria ja käytäntö joutuivat ristiriitaan - ja useimmiten käytäntö voitti. Ensimmäisen kerran se tapahtui, kun ehdotin esimiehelleni, että myös oma ryhmäni alkaisi käyttää mikroprosessoria. Strömberg oli jo valmistautunut, sillä se oli kehittämässä mikroprosessoreihin perustuvaa teollisuusjärjestelmää (tarvittaisiin mm. laskentayksiköitä, muistiyksiköitä ja prosessisignaalien liittämiseen tarvittavia yksikköjä). Mutta esimieheni selitti minulle, että mikroprosessori sopii vain hyvin yksinkertaisiin tehtäviin, se olisi vähän niinkuin taskulaskimen kaltainen laite. Sitä ei voisi käyttää vaativissa automaatiosovelluksissa. En uskonut. Tutkin teknisiä dokumentteja ja tein laskelmia. Huomasin, että mikro olisi jopa tehokkaampi kuin käyttämämme minitietokone. Joten pienen väännön jälkeen sain luvan käyttää mikroprosessoria. Ja käytäntö osoitti, että olin oikeassa.

Seuraava kriisi koski käyttöjärjestelmää. Minikoneissa oli yksinkertainen reaaliaikakäyttöjärjestelmä, joka helpotti merkittävästi ohjelmointia ja mahdollisti useiden ohjelmaprosessien samanaikaisen ajon. Mutta mikroihin sellaista ei ollut saatavilla. Ehdotin taas esimiehelleni, että tekisimme sen itse. Tällä kertaa hän oli suorastaan kauhuissaan. Hän selitti, että se olisi lähes mahdoton asia, se vaatisi vuosien työn, eikä ehkä edes onnistuisi (tietokonetekniikan historiassa tunnettiinkin katastrofeiksi muuttuneita käyttöjärjestelmäprojekteja). En saanut hänen mieltään muuttumaan, joten menin takaisin toimistooni ja aloin koodata sitä itse, ilman lupaa. Muutamassa viikossa se oli koodattu ja testattu - muun työn ohessa. Se oli hyvä ratkaisu, ilman käyttöjärjestelmää olisimme olleet todella pulassa.

Oli toinenkin syy miksi käyttöjärjestelmä saattoi arveluttaa. Akateemisessa tietokoneteoriassa prosessien vaihto-ongelma tunnettiin niin sanottuna pahana ongelmana, sen mutkikkuus kasvoi rajusti prosessien lisääntyessä. Mutta tiesin, että tarvitsisimme enintään parikymmentä samanaikaista prosessia. Näin pienessä mittakaavassa prosessien vaihto ei vaatinut paljoakaan ylimääräistä laskentaa.  Saatoin jättää akateemisen tieteen ennustaman riskin huomiotta. 
 
Viimeinen kriisi liittyi muistin riittävyyteen. Tunnetun lainalaisuuden mukaan ohjelmien koko pyrkii kasvamaan jatkuvasti. Siihen aikaan se ei ollut ongelma ohjelmien kirjoittajille, mutta käyttämämme 8 bitin mikroprosessorin muistialue oli rajoitettu. Olisimme voineet siirtyä tehokkaampiin prosessoreihin, mutta siihen ei vielä ollut valmiutta. Joten päätin tehdä virtuaalimuistin - ja tällä kertaa en edes yrittänyt kysyä lupaa esimieheltä. Akateeminen tietokoneteoria liitti virtuaalimuistiin ns. roskienkeruun, jota pidettiin niin ikään potentiaalisesti pahana ongelmana. Tarvittiin ohjelma, joka vapautti käyttöön aiemmin varattuna olleita muistilohkoja. Toisaalta meidän ohjelmiemme piti reagoida prosessista tuleviin signaaleihin lähes välittömästi, ei ollut mahdollista jonottaa esimerkiksi muistin vapautumista. Keksin kuitenkin toisenlaisen tavan tehdä virtuaalimuisti. Kävelin laitekehityksestä vastaavan Kari Matilaisen toimistoon, ja selitin, että tarvitsemme muistiyksiköitä, jotka voidaan aktivoida ja passivoida ohjelmakäskyllä. Samalle muistialueelle voitaisiin silloin latoa rajattomasti muistia. Hän piti ajatusta hyvänä, ja lupasi toimittaa tällaisia muistiyksikköjä siihen mennessä kun me saamme niitä tarvitsevan ohjelman valmiiksi. Lopuksi tein käyttöjärjestelmään pienen muutoksen, joka vaihtoi prosessia vaihdettaessa myös sen käyttämän muistiyksikön. Ohjelmoijan ei tarvitsisi koskaan murehtia muistin riittävyyttä. Riitti, kun ohjelmistoa koottaessa tietokoneelle "kerrottiin", missä lohkossa kukin ohjelmaprosessi sijaitsee.

Koetan vetää yhteen, mitä olen koettanut havainnollistaa. Teknologia ei välttämättä kehity tieteellisen teorian vaikutuksesta. Usein teorioissa esiintyvät periaatteelliset rajoitukset saattavat jopa hidastaa teknologian kehitystä****. Toisaalta, kuten esimerkit mekaanisista laskukoneista ja tietokoneiden alkuajoista osoittavat, teoria voi myös rohkaista ja oikeuttaa käytännön kehitystyötä. Teknologiaan liittyvä keskeinen teoriatausta myös muuttuu kehityksen myötä. Tietokoneiden alkuaikoina tarvittiin Alan Turingin kaltaisia matemaatikkoja löytämään ja muokkaamaan tietokoneiden ratkaistaviksi soveltuvia tehtäviä. Tällä hetkellä laskentateoriat ovat jääneet taustalle, ja tilalle on tullut esimerkiksi koodausteoriaa, tiedon pakkauksen teoriaa ja salakirjoituksen teoriaa.

Kohtasin työssäni vielä yhden Turingin taikamaailman piirteen. Koodeja murtava ryhmä toimi täysin autonomisesti, siinä ei ollut hierarkiaa eikä esimiessuhteita, vaan työt jaettiin kykyjen mukaan ja kaikki auttoivat toisiaan. Oma työympäristöni oli samanlainen, Samalla kun taistelimme teknisten ongelmien kimpussa, koetimme pitää huolta, että keksimämme uudet ratkaisut sopivat yhteen ja hyödyttivät koko yritystä. Johtajat eivät motivoineet eivätkä kannustaneet, vaan pysyttelivät poissa tieltä.

Hodgesin kirjan nimessä on sana ”arvoitus”. Selvästi se liittyy saksalaisen salakirjoituskoneen koodin murtamistyöhön, missä Turingin rooli oli aivan keskeinen. Koneen nimi ”Enigma” tarkoittaa arvoitusta. Mutta se voi viitata myös Turingin persoonallisuuteen, joka oli vähintään poikkeuksellinen. Myös Turingin itsemurha on arvoitus. Hän ei vaikuttanut masentuneelta eikä itsetuhoiselta, mutta toisaalta hän puhui itsemurhan mahdollisuudesta huolettomasti. On totta, että Yhdysvalloissa levisi sodan jälkeen moraalinen paniikki, ja he painostivat myös brittejä puhdistamaan homoseksuaalit ja muut epäilyttävät henkilöt valtion palveluksesta. Turing suhtautui avoimesti ja luontevasti seksuaalisuuteensa. Mutta epäilemättä painostus tuntui, ja hän sai myös poikkeuksellisen kovan tuomion "seksuaalisesta perversiosta". On myös mahdollista, että hänet murhattiin, vaikka selviä viitteitä ei ole. Jostain syystä Turingin sodanaikainen työ luokiteltiin myös sodan jälkeen äärimmäisen arkaluontoiseksi. Se pidettiin täysin salassa 20 vuotta, ja kirjan mukaan se on edelleen osittain salaista. Turingin homoseksuaalisuus, hänen persoonallisuutensa, hänen älyllinen kapasiteettinsa ja  lukuisat kontaktit ”epäilyttäviin” henkilöihin saattoivat tehdä hänestä uhkaavan turvallisuusriskin. 

Elokuvan nimi ”Imitation game” eli ”jäljittelypeli” voisi viitata ainakin kolmeen asiaan. Ensinnä se tuo mieleen Turingin testin, missä tietokone yrittää jäljitellä ihmistä. Toiseksi, se voisi viitata universaalin Turingin koneen toimintaan. Tuo konehan lukee minkä tahansa muun koneen rakennekuvauksen, ja ryhtyy sitten jäljittelemään sitä. Ja sitten sillä voidaan viitata siihen, miten homoseksuaali selviytyy vihamielisessä ympäristössä. Pitää jäljitellä ”tavallisia” ihmisiä. Mutta tällaisesta elämästä Alan Turing ei itse piitannut. Hän oli avoimesti vain oma itsensä. 

Jälkikirjoitus

Alan Turing oli harvinaisen monipuolinen ajattelija. Hänen ideansa "universaalista Turingin koneesta" vaikutti ratkaisevasti nykyaikaisen tietokoneen keksimiseen. Hän vaikutti vahvasti tekoälyn (AI) tutkimuksen käynnistämiseen 1950- luvulla. Hän pohti myös, miten kemialliset prosessit voisivat saada aikaan epäorgaanisten aineiden järjestäytymisen symmetrrisiksi muodoiksi, kuten tähdiksi, nauhoiksi ja spiraaleiksi. Vuonna 1952 hän julkaisi artikkelin "The chemical basis of morphogenesis" (muotojen syntymisen kemiallinen perusta). Sitä pidetään yhtenä teoreettisen biologian perusteoksena.

*) Jos lukija ei ole perehtynyt matematiikkaan ja logiikkaan, voi olla valaisevaa lukea hieno sarjakuvaromaani ”Logicomix” - se on myös suomennettu (Avain 2010). Siinä seikkailevat nämä Alan Turingin tärkeät kollegat - myös Turing mainitaan sen liiteosassa.
**) Tämä kuvaus on epätarkka, eikä se pysty valaisemaan hyvin vaikeaa ja syvällistä ongelmaa. Yllä mainittu ”Logicomix” johdattelee siihen kansantajuisesti.
***) Nykyiset tietokoneet ovat pääasiassa niin sanottuja von Neumann- koneita ja sen muunnelmia. Loogisesti ne vastaavat täysin universaalia Turingin konetta - paitsi että jälkimmäisessä on ääretön muisti. Oikeassa tietokoneessa sellaista ei tietenkään voi olla.
****) John von Neumann julkaisi vuonna 1945 raportin "First Draft of a Report on the EDVAC", jossa kuvataan yleiskäyttöisen tietokoneen rakennetta. Turingin nimeä ei siinä mainita, mutta raportin keskeinen idea oli peräisin Turingin vuoden 1936 artikkelista "On computable numbers". Von Neumannin julkaiseman raportin takia tietokonetta ei koskaan voitu patentoida.
*****) Olen eritellyt teknologian ja tieteen suhteita ja teknologian leviämistä ja vaikutuksia kirjassani ”Tervanpoltosta innovaatiotalouteen.