Eteenpäin kytketty 2 × 5 monikerrosverkko
**Neuroverkot** ovat informaation käsittelyn, matematiikan tai laskennan malleja, jotka ovat saaneet inspiraationsa aivojen rakenteesta. Neuroverkko on graafi, joka koostuu *neuroneista*, joita yhdistävät *synapsit*. Neuroni saa signaaleja ja laskee niistä painotetun summan, jonka tietyn rajan ylitettyään lähettää eteenpäin. Signaalit ovat neuroverkoissa yksinkertaisesti lukuja. Neuroverkko järjestetään tasoiksi, joiden läpi signaali kulkee. Neuroverkko *koulutetaan* syöttämällä sille esimerkkejä vastaantulevista syötteistä. Oppismisprosessin aikana verkko muodostaa todennäköisyyksin painotetun sisäisen mallin syötteen ja tuloksen välisestä suhteesta. Perinteisempiin koneoppimismalleihin verrattuna neuroverkkojen keskeinen etu on, että ne kykenevät hyödyntämään koulutuksessa syntynyttä malliaan tilanteissa, jotka eivät ole esiintyneet koulutusaineistossa.

Siinä missä perinteisemmissä asiantuntijajärjestelmissä käytetään "jos-niin"-sääntöpareja (esim. jos raidat, niin seepra; jos pitkät korvat, niin aasi), neuroverkkoa opetetaan esimerkkien avulla (nämä ovat eri-ikäisiä seeproja ja nämä aaseja). Tällä pyritään siihen, että neuroverkko itse havaitsee muuttujien epälineaariset riippuvuussuhteet suoraan havaintoaineistosta (em. esimerkissä neuroverkko oppii tarkastelemaan korvia ja värin kuvioita, ei esim. jalkojen pituutta). Muilta osin neuraalilaskenta muistuttaa tilastotieteessä käytettyjä yleistettyjä lineaarisia malleja (GLM).

Neuroni ja neuroverkon kerrokset
--------------------------------

Neuroverkot koostuvat joukosta (keinotekoisia) neuroneita. Neuronit ovat yksinkertaisia, toisiinsa kytkettyjä tiedonkäsittely-yksiköitä. Keinotekoinen neuroni muistuttaa karkeasti biologista hermosolua, ja koostuu seuraavista osista:

* synapseista
* summaajasta
* aktivaatiofunktiosta.

**Synapsi** on kahden neuronin välinen kytkentä, jolle on määritelty kytkentäkohtainen paino. **Summaajan** tehtävä on laskea kaikilta syötesynapseilta tulleiden signaalien summa. Lopulta neuroni tuottaa tämän summan perusteella epälineaarisen **aktivaation**. Kustakin neuronista lähteviä synapseja, summajia ja aktivaatioita voidaan mallintaa yhdistetyllä funktiolla, joka koostuu lineaarikuvauksesta, vakiotermistä ja aktivaatiofunktiosta.

Keinotekoisessa neuroverkossa neuronit järjestetään peräkkäisiksi kerroksiksi (engl. *layer*), joissa on tietty joukko vektoriksi järjestettyjä neuroneja. **Syväoppivassa** (engl. *deeplearning*) neuroverkossa on useita tällaisia kerroksia, joilla voi olla toisistaan poikkeavia tehtäviä. Kunkin kerroksen aktivaatio on seuraavan kerrokseen sisään tuleva signaali. Koska syöte- ja ulostulokerrosten välissä olevat kerrokset eivät näy ulospäin, niitä nimitetään *piilokerroksiksi* (engl. *hidden layer*).

### Lineaarikuvaus ja vakiotermi

Neuronin {\displaystyle k} summaaja laskee syöttösynapseilta tulleiden signaalien summan

{\displaystyle u\_{k}=\sum \_{j=1}^{m}w\_{kj}x\_{j}+b\_{k}}
jossa {\displaystyle x\_{j}} ovat syötesignaaleita ja {\displaystyle b\_{k}} on vakiotermi (bias). Tämä esitetään usein matriisimuodossa

{\displaystyle \mathbf {u} =W\mathbf {x} +\mathbf {b} }
notaation ja derivaattojen laskennan selkeyttämiseksi.

### Aktivaatiofunktio

**Aktivaatiofunktio** {\displaystyle \phi } laskee summasta {\displaystyle u\_{k}} epälineaarisen kuvauksen

{\displaystyle y\_{k}=\phi (u\_{k})}
jossa {\displaystyle y\_{k}} on ulostulosignaali. Aktivaatiofunktio lasketaan yleensä jokaiselle kerroksen neuronille erikseen. Aktivaatiofunktion keskeisiä ominaisuuksia ovat: 

* epälineaarisuus – Tämä on aktivointifunktion tärkein ominaisuus, sillä kahden affiinin kuvauksen yhdistetty kuvaus on myös affiini kuvaus. Ilman epälineaarisuutta koko neuroverkon voi pelkistää yhdeksi neuroniksi.
* (jatkuva) derivoituvuus – Opetusvaiheessa hukkafunktion minimointi edellyttää myös aktivaatiofunktion derivaatan laskemista.
* identiteettifunktion läheisyys nollan lähellä – Jos aktivointifunktio on origon lähellä likimain *f(x) = x*, neuroverkko oppii tehokkaasti vaikka alkutilanteessa painokertoimet valittaisiin satunnaisesti.

Aktivointifuntion on myös käytännöllistä olla rajoitettu, sillä tällöin neuroverkko oppii tehokkaammin.

Juuri aktivointifunktion epälineaarisuus mahdollistaa mielivaltaisen funktion approksimoimisen. Itse asiassa voidaan todistaa, että tällainen neuroverkko, jossa on vähintään yksi neuronikerros (sisääntulon ja ulostulon lisäksi), kykenee approksimoimaan mitä tahansa riittävän sileää funktiota mielivaltaisella tarkkuudella, kunhan neuroneita on riittävän paljon! Aktivaatiofunktio voi olla esimerkiksi askelfunktio

{\displaystyle y(x)=\left\{{\begin{matrix}1,&{\mbox{kun }}x\geq 0\\0,&{\mbox{kun }}x<0\end{matrix}}\right.}
tai logistinen (sigmoidi) funktio

{\displaystyle y(x)={\frac {1}{1+e^{-x}}}.}
Nykyisin yleisin aktivaatiofunktio on ReLU (engl. *Rectified linear unit*)

{\displaystyle y(x)=\left\{{\begin{matrix}x,&{\mbox{kun }}x\geq 0\\0,&{\mbox{kun }}x<0\end{matrix}}\right.}
muun muassa sen helpon derivoituvuuden vuoksi. ReLU ei myöskään kärsi häviävien gradienttien ongelmasta toisin kuin sigmoidiset funktiot.

Neuroverkkorakenteet
--------------------

Avattu takaisinkytketty neuroverkko
Neuroverkkokerroksia yhdistelemällä voidaan rakentaa erilaisia neuroverkkoja. Yleisin neuroverkkorakenne on *eteenpäinsyöttävä verkko* (engl. *FeedForward Neural Network*, FFNN), jossa kaikki edellisen kerroksen neuronit on kytketty kaikkiin seuraavan kerroksen neuroneihin. Eri tarkoituksiin on kehitetty lisäksi monia erilaisia neuroverkkorakenteita.

* Eteenpäin kytketty yksikerroksinen perseptroniverkko (engl. *Single Layer Perceptron*)
* Eteenpäin kytketty monikerroksinen perseptroniverkko (engl. *Multilayer Perceptron*, MLP)
* Takaisinkytketty neuroverkko (engl. *Recurrent Neural Network*, RNN)
	+ Pitkä lyhytkestomuisti (engl. *Long Short Term Memory*, LSTM)
* Konvoluutioneuroverkko (engl. *Convolutional Neural Network*, CNN)
* Generatiivinen kilpaileva verkosto (engl. *Generative Adversarial Network*, GAN)
* Autoenkoodaaja (engl. *Autoencoder*)

Neuroverkon kouluttaminen
-------------------------

Neuroverkkojen opettamisessa kytkentöjen synaptiset painot optimoidaan siten, että opetusnäytteiden vasteiden ja haluttujen vasteiden ero minimoituu.

Opetusnopeutta voidaan parantaa nolla-keskiarvoistamalla opetusdata sekä vähentämällä opetusnäytteen piirteiden keskinäistä riippuvuutta esimerkiksi pääkomponenttianalyysillä.

### Hukkafunktio, gradientti ja vastavirta-algoritmi

Jotta neuroverkkoa voidaan opettaa, sille on ensin määriteltävä *hukkafunktio* (engl. *loss function*). Hukkafunktio antaa numeerisen mittarin sille, kuinka hyvin neuroverkon ennustukset vastaavat havaittua dataa. Regressiotehtävissä käytetään usein virheiden neliösummaa

{\displaystyle J=\sum \_{i=1}^{N}({\hat {y}}(\mathbf {x} \_{i})-y\_{i})^{2}}
jossa {\displaystyle {\hat {y}}(\mathbf {x} \_{i})} on neuroverkon ennuste datapisteen {\displaystyle \mathbf {x} \_{i}} perusteella, ja luokittelutehtävissä ristientropiaa (engl. *categorical cross-entropy*)

{\displaystyle J=\sum \_{i=1}^{N}-\log({\hat {y}}\_{C(i)}(\mathbf {x} \_{i}))}
jossa {\displaystyle C(i)} on datapisteen {\displaystyle i} oikea luokka.

Kun hukkafunktio on määritelty, käytetään gradienttimenetelmää (engl. *gradient descent*) sen minimoimiseksi. Siinä virhefunktion gradientti lasketaan painokertoimien suhteen ja siirrytään askel askeleelta vastakkaiseen suuntaan gradienttiin nähden. Askeleen pituus voi olla osa gradientin pituudesta, esimerkiksi 0.02, tai se voidaan määrittää. Yleensä gradientin laskemiseksi ei käytetä koko datasettiä joka askelmalla, vaan gradientti lasketaan satunnaistetusta alijoukosta dataa (engl. *Mini-batch gradient descent*).

Monikerroksisten neuroverkkojen opetuksessa käytetään vastavirta-algoritmia (engl. *backpropagation*), joka nopeuttaa gradientin laskemista. Vastavirta-algoritmi aloittaa gradientin laskemisen verkon viimeisestä kerroksesta. Se laskee gradientin aina yhdelle kerrokselle kerrallaan ja käyttää tätä gradienttia edellisen laskemiseen.

### Oppimisparadigmat

* Ohjatussa oppimisessa (engl. *supervised learning*) neuroverkolle syötetään oppimateriaaliksi ennalta luokiteltuja näytteitä. Neuroverkon tuottamien arvojen ja näytteen luokittelun onnistumisen perusteella neuronien painoarvoja muutetaan siten, että neuroverkko tuottaisi syötteen luokittelun mukaisen tuloksen.

* Ohjaamattomassa oppimisessa (engl. *unsupervised learning*) syväoppiva malli yrittää automaattisesti luokitella syötettä, ilman että sitä ohjataan millään tavalla. Koulutuksen aikana neuroverkko alkaa siis vähitellen löytämään opetusmateriaalista eri syötteitä yhdistäviä ja erottavia tekijöitä. Ohjaamatonta oppimista ovat muun muassa sellaiset autoenkooderit, jotka muuttavat vastaanottamansa syötteen matalampiulotteiseen muotoon ja yrittävät muokata sen takaisin alkuperäiseksi syötteeksi. Ohjaamatonta oppimista on myös Teuvo Kohosen kehittämä itseorganisoituva kartta.

* Osittain ohjatussa oppimisessa (engl. *semi-supervised learning*) osa näytteistä on luokiteltuja ja osa ei. Tämä voi tarkoittaa esimerkiksi sitä, että osaa verkosta esiharjoitetaan ohjaamattomasti, ja sitten tätä neuroverkkoa käytetään osana ohjattua arkkitehtuuria.

* Vahvistusoppimisessa (engl. *reinforcement learning*) malli oppii sellaisen palautteen perusteella, jota ympäristö antaa suorituksen aikana. Oppimisprosessissa neuroverkko pyrkii maksimoimaan saamansa positiivisen palautteen ja minimoimaan negatiivisen. Keskeisin ero ohjattuun oppimiseen on, että palaute perustuu verkon suoriutumiseen kokonaisuutena, eikä neuroverkko saa tietoa, mitkä valinnat olisivat olleet pitkällä tähtäimellä hyödyllisiä. Vahvistusoppimista käytetään paljon etenkin robotiikassa.

### Yli- ja alisovittaminen

Neuroverkon koulutuksessa on otettava huomioon samoja virhelähteitä kuin minkä tahansa muunkin mallisovituksen tapauksessa. Erityisesti ylisovittaminen on laajojen neuroverkkojen keskeinen ongelma, jos opetusmateriaalia on liian vähän suhteessa neuroverkon kokoon. Ylisovittunut malli on alkanut kiinnittää huomiota opetusdatan epäolennaisuuksiin ja satunnaisvaihteluun. Ylisovitettu malli suoriutuu hyvin opetusaineistosta, muttei osaakaan yleistää oppimaansa uusiin tilanteisiin. Ilmiselvä tapa korjata asia on lisätä opetusmateriaalin määrää, mutta se voi usein olla käytännössä vaikeaa. Yleinen tapa torjua ilmiötä on sammuttaa satunnaisesti osa neuroneista kullakin opetuskerralla. Näin yksittäisten neuronien riippuvuus viereisistä neuroneista vähenee jolloin niistä tulee itsenäisempiä ja verkon rakenne karkeistuu.

Alisovituksessa malli on dataan verrattuna liian yksinkertainen. Alisovituksessa neuroverkko oppii huonosti ja painot päivittyvät hitaasti.

Neuroverkkojen historiaa
------------------------

Aivotutkijat Warren McCulloch ja Walter Pitts esittivät ensimmäisen ihmisaivojen toimintaa ja matemaattista logiikkaa yhdistelevän laskentamallin vuonna 1943. Ensimmäinen varsinainen neuroverkko on Frank Rosenblattin perseptroni vuodelta 1958. Vaikka neuroverkkojen perusajatus perustuu luonnollisiin hermoverkkoihin, jo David Rumelhart, Geoffrey Hinton ja Ronald J. Williams vuoden 1986 artikkelissaan huomauttivat, ettei niiden kehittely enää perustu luonnollisten hermoverkkojen jäljittelyyn. Neuroverkkotekniikoiden kehittäminen oli jo tuolloin siirtynyt enemmän tilastotieteeseen ja signaalinkäsittelyn teoriaan.

Monikerroksisen neuroverkon toimivuus edellyttää tapaa, jolla verkon piilokerroksissa olevien neuronien painokertoimet saadaan päivitettyä. Ratkaisu tähän on vastavirta-algoritmi. Tekoälytutkimuksen pioneereihin kuuluva Jürgen Schmidhuber huomauttaa, että algoritmin ensimmäisen implementaation julkaisi Seppo Linnainmaa pro gradu -työssään vuonna 1970 nimellä *the reverse mode of automatic differentiation*. Käytännössä kaikki nykyisin tuotantokäytössä olevat neuroverkkototeutukset perustuvat Linnainmaan algoritmiin..

Takaisinkytketyt neuroverkot (RNN) perustuvat David Rumelhartin, Geoffrey Hintonin ja Ronald J. Williamsin julkaisuun *Learning representations by back-propagating errors* vuodelta 1986. Hopfieldin verkko (aiemmin assosiatiivinen neuroverkko) on RNN:n erikoistapaus, jonka kehitti John Hopfield vuonna 1982.

Pitkä-lyhytkestomuistiverkon esittelivät Sepp Hochreiter ja Jürgen Schmidhuber 1997. LSTM-verkot mullistivat puheentunnistuksen. käsialantunnistuksen, konekäännöksen ja kielimallinnuksen vuodesta 2007 eteenpäin.

Google Brain -tutkimusryhmä julkaisi vuonna 2017 Transformer-mallin, joka on käytännössä korvannut RNN ja LSTM-mallit. Transformer helpottaa rinnakkaista koulutusta ja sen pohjalta tuotettu generatiivisia tekoälymalleja kuten OpenAI:n GPT-mallit (engl. *Generative Pre-trained Transformer*), jotka on koulutettu valtavan laajoilla tekstiaineistoilla.

Avoimia ohjelmakirjastoja
-------------------------

Vapaasti käytettäviä ohjelmakirjastoja neuroverkkojen kehittelyyn ja toteutukseen ovat ainakin:

* Tensorflow
* PyTorch
* MXNet

Katso myös
----------

* Koneoppiminen
* Tekoäly
* Syväoppiminen
* Itseorganisoituva kartta (SOM)
* Tukivektorikone
* Konnektionismi

Lähteet
-------

* Haykin, Simon (1999). *Neural networks - A comprehensive edition*. 2.painos. Prentice Hall International. ISBN 0-13-908385-5.

### Viitteet

1. 1 2  What are neural networks? IBM (englanniksi)
2. 1 2 3 4 5 6 7 8 9 10  Heli Tuominen & Pekka Neittaanmäki (toim.): *Tekoälyn perusteita ja sovelluksia*, s. 8, 13–15, 23–55. Informaatioteknologia tiedekunta, Jyväskylän yliopisto, 2019. ISBN 978-951-39-7795-5.
3. ↑  Hornik *et al.* (1989) "Multilayer feedforward networks are universal approximators". Neural Networks vol. 2 (5), 359–366 (englanniksi)
4. 1 2 3  Kevin P. Murphy: "Deep Neural Networks", *Probabilistic Machine Learning – An Introduction*, s. 419–539. MIT Press, 2022. ISBN 9780262046824.
5. ↑  Orponen, Pekka: Neuroverkot *users.ics.aalto.fi*. Viitattu 28.04.2018.
6. ↑  Josh Patterson, Adam Gibson: *Deep Learning: A Practitioner's Approach*, s. 86–104. Google Books: O´Reilly, 2017. ISBN 1491914211. Deep Learning: A Practitioner's Approach (viitattu 23.5.2018). (englanniksi)
7. ↑  Juergen Schmidhuber: arXiv:1404.7828 Deep Learning in Neural Networks: An Overview *arxiv.org*. Viitattu 22.9.2019. (englanniksi)
8. 1 2 3 4  Isha Salian: SuperVize Me: What’s the Difference Between Supervised, Unsupervised, Semi-Supervised and Reinforcement Learning? *blogs.nvidia.com*. Viitattu 22.9.2019. (englanniksi)
9. ↑  L. P. Kaelbling *et al. "Reinforcement Learning: A Survey". arXiv:cs/9605103* (englanniksi)
10. ↑  Frank Rosenblatt (1958) "The Perceptron: A Probabilistic Model for Information Storage and Organization in The Brain". Psychological Review 65(6), 386–408 (englanniksi)
11. 1 2  Rumelhart *et al.* (1986). "Learning representations by back-propagating errors". Nature 323, 533 (englanniksi)
12. ↑  Jürgen Schmidhuber: Who Invented Backpropagation? (englanniksi) (viitattu 3.12.2023)
13. ↑  J. J. Hopfield (1982) "Neural networks and physical systems with emergent collective computational abilities". Proc Natl Acad Sci USA. 79(8): 2554–2558 (englanniksi)
14. ↑  Sepp Hochreiter & Jürgen Schmidhuber (1997) "Long Short-Term Memory". Neural Computation 9 (8): 1735–1780 (englanniksi)
15. ↑  Waswani *et al.* (2017) "Attention Is All You Need". arXiv:1706.03762 (englanniksi)

Aiheesta muualla
----------------

* Kuvia tai muita tiedostoja aiheesta **Neuroverkot** Wikimedia Commonsissa