|
|
||
|---|---|---|
| .. | ||
| lab | ||
| Perceptron.ipynb | ||
| README.md | ||
README.md
Johdanto neuroverkkoihin: Perceptron
Ennakkokysely
Yksi ensimmÀisistÀ yrityksistÀ toteuttaa jotain modernin neuroverkon kaltaista tehtiin Frank Rosenblattin toimesta Cornellin ilmailulaboratoriossa vuonna 1957. KyseessÀ oli laitteistototeutus nimeltÀ "Mark-1", joka oli suunniteltu tunnistamaan yksinkertaisia geometrisia kuvioita, kuten kolmioita, neliöitÀ ja ympyröitÀ.
![]() |
![]() |
Kuvat Wikipedia-sivustolta
Syötekuva esitettiin 20x20 valokennon matriisina, joten neuroverkolla oli 400 syötettÀ ja yksi binÀÀrinen ulostulo. Yksinkertainen verkko sisÀlsi yhden neuronin, jota kutsutaan myös kynnyslogiikkayksiköksi. Neuroverkon painot toimivat kuin potentiometrit, joita piti sÀÀtÀÀ manuaalisesti koulutusvaiheen aikana.
â Potentiometri on laite, joka mahdollistaa piirin vastuksen sÀÀtĂ€misen.
The New York Times kirjoitti tuolloin perceptronista: sÀhkötietokoneen alkio, jonka [laivasto] odottaa pystyvÀn kÀvelemÀÀn, puhumaan, nÀkemÀÀn, kirjoittamaan, lisÀÀntymÀÀn ja olemaan tietoinen olemassaolostaan.
Perceptron-malli
Oletetaan, ettÀ mallissamme on N ominaisuutta, jolloin syötevektori olisi kooltaan N. Perceptron on binÀÀriluokittelumalli, eli se pystyy erottamaan kahden syötedataluokan vÀlillÀ. Oletamme, ettÀ jokaiselle syötevektorille x perceptronin ulostulo olisi joko +1 tai -1 riippuen luokasta. Ulostulo lasketaan kaavalla:
y(x) = f(wTx)
missÀ f on askelaktivointifunktio
Perceptronin kouluttaminen
Perceptronin kouluttamiseksi meidÀn tÀytyy löytÀÀ painovektori w, joka luokittelee suurimman osan arvoista oikein, eli tuottaa pienimmÀn virheen. TÀmÀ virhe E mÀÀritellÀÀn perceptron-kriteerin avulla seuraavasti:
E(w) = -âwTxiti
missÀ:
- summa otetaan niistÀ koulutusdatapisteistÀ i, jotka johtavat vÀÀrÀÀn luokitteluun
- xi on syötedata, ja ti on joko -1 tai +1 negatiivisille ja positiivisille esimerkeille vastaavasti.
TÀtÀ kriteeriÀ pidetÀÀn painojen w funktiona, ja meidÀn tÀytyy minimoida se. Usein kÀytetÀÀn menetelmÀÀ nimeltÀ gradienttimenetelmÀ, jossa aloitetaan jollain alkuperÀisillÀ painoilla w(0), ja sitten jokaisessa vaiheessa pÀivitetÀÀn painot kaavan mukaan:
w(t+1) = w(t) - ηâE(w)
TĂ€ssĂ€ η on niin sanottu oppimisnopeus, ja âE(w) tarkoittaa E:n gradienttia. Kun laskemme gradientin, pÀÀdymme seuraavaan:
w(t+1) = w(t) + âηxiti
Algoritmi Pythonissa nÀyttÀÀ tÀltÀ:
def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):
weights = [0,0,0] # Initialize weights (almost randomly :)
for i in range(num_iterations):
pos = random.choice(positive_examples)
neg = random.choice(negative_examples)
z = np.dot(pos, weights) # compute perceptron output
if z < 0: # positive example classified as negative
weights = weights + eta*weights.shape
z = np.dot(neg, weights)
if z >= 0: # negative example classified as positive
weights = weights - eta*weights.shape
return weights
Yhteenveto
TÀssÀ oppitunnissa opit perceptronista, joka on binÀÀriluokittelumalli, ja kuinka sitÀ koulutetaan kÀyttÀmÀllÀ painovektoria.
đ Haaste
Jos haluat kokeilla rakentaa oman perceptronin, kokeile tÀtÀ Microsoft Learn -laboratoriota, joka kÀyttÀÀ Azure ML designeria.
JĂ€lkikysely
Kertaus ja itseopiskelu
Jos haluat nÀhdÀ, kuinka perceptronia voidaan kÀyttÀÀ leikkimielisen ongelman ratkaisemiseen sekÀ todellisiin ongelmiin, ja jatkaa oppimista - siirry Perceptron-muistikirjaan.
TÀssÀ on myös mielenkiintoinen artikkeli perceptroneista.
TehtÀvÀ
TÀssÀ oppitunnissa toteutimme perceptronin binÀÀriluokittelutehtÀvÀÀ varten, ja kÀytimme sitÀ kahden kÀsinkirjoitetun numeron luokitteluun. TÀssÀ laboratoriossa sinua pyydetÀÀn ratkaisemaan numeroluokittelun ongelma kokonaisuudessaan, eli mÀÀrittÀmÀÀn, mikÀ numero todennÀköisimmin vastaa annettua kuvaa.

