|
|
||
|---|---|---|
| .. | ||
| lab | ||
| Perceptron.ipynb | ||
| README.md | ||
README.md
Introduksjon til nevrale nettverk: Perceptron
Quiz før forelesning
En av de første forsøkene på å implementere noe som ligner på et moderne nevralt nettverk ble gjort av Frank Rosenblatt fra Cornell Aeronautical Laboratory i 1957. Det var en maskinvareimplementasjon kalt "Mark-1", designet for å gjenkjenne primitive geometriske figurer, som trekanter, firkanter og sirkler.
![]() |
![]() |
Bilder fra Wikipedia
Et inputbilde ble representert av et 20x20 fotocelle-array, så det nevrale nettverket hadde 400 innganger og én binær utgang. Et enkelt nettverk inneholdt én nevron, også kalt en terskellogikkenhet. Vektene i det nevrale nettverket fungerte som potensiometre som krevde manuell justering under treningsfasen.
✅ Et potensiometer er en enhet som lar brukeren justere motstanden i en krets.
The New York Times skrev om perceptron på den tiden: embryoet til en elektronisk datamaskin som [marinen] forventer vil kunne gå, snakke, se, skrive, reprodusere seg selv og være bevisst sin egen eksistens.
Perceptron-modell
Anta at vi har N funksjoner i modellen vår, i så fall vil inputvektoren være en vektor av størrelse N. En perceptron er en binær klassifiseringsmodell, det vil si at den kan skille mellom to klasser av inputdata. Vi antar at for hver inputvektor x vil utgangen fra vår perceptron være enten +1 eller -1, avhengig av klassen. Utgangen beregnes ved hjelp av formelen:
y(x) = f(wTx)
hvor f er en stegaktiveringsfunksjon
Trening av perceptron
For å trene en perceptron må vi finne en vektvektor w som klassifiserer flest mulig verdier korrekt, det vil si som resulterer i den minste feilen. Denne feilen E er definert av perceptron-kriteriet på følgende måte:
E(w) = -∑wTxiti
hvor:
- summen tas over de treningsdatapunktene i som resulterer i feil klassifisering
- xi er inputdata, og ti er enten -1 eller +1 for henholdsvis negative og positive eksempler.
Dette kriteriet betraktes som en funksjon av vektene w, og vi må minimere det. Ofte brukes en metode kalt gradient descent, der vi starter med noen initiale vekter w(0), og deretter oppdaterer vektene ved hver steg i henhold til formelen:
w(t+1) = w(t) - η∇E(w)
Her er η den såkalte læringsraten, og ∇E(w) betegner gradienten av E. Etter å ha beregnet gradienten, ender vi opp med
w(t+1) = w(t) + ∑ηxiti
Algoritmen i Python ser slik ut:
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
Konklusjon
I denne leksjonen lærte du om en perceptron, som er en binær klassifiseringsmodell, og hvordan du trener den ved hjelp av en vektvektor.
🚀 Utfordring
Hvis du vil prøve å bygge din egen perceptron, kan du prøve dette laboratoriet på Microsoft Learn som bruker Azure ML designer.
Quiz etter forelesning
Gjennomgang & Selvstudium
For å se hvordan vi kan bruke perceptron til å løse et lekeproblem så vel som virkelige problemer, og for å fortsette læringen - gå til Perceptron-notatboken.
Her er en interessant artikkel om perceptrons også.
Oppgave
I denne leksjonen har vi implementert en perceptron for en binær klassifiseringsoppgave, og vi har brukt den til å klassifisere mellom to håndskrevne sifre. I dette laboratoriet blir du bedt om å løse problemet med sifferklassifisering helt, det vil si å bestemme hvilket siffer som mest sannsynlig tilsvarer et gitt bilde.

