|
|
||
|---|---|---|
| .. | ||
| lab | ||
| Perceptron.ipynb | ||
| README.md | ||
README.md
Introduktion til Neurale Netværk: Perceptron
Quiz før lektionen
En af de første forsøg på at implementere noget, der minder om et moderne neuralt netværk, blev udført af Frank Rosenblatt fra Cornell Aeronautical Laboratory i 1957. Det var en hardware-implementering kaldet "Mark-1", designet til at genkende primitive geometriske figurer som trekanter, firkanter og cirkler.
![]() |
![]() |
Billeder fra Wikipedia
Et inputbillede blev repræsenteret af et 20x20 fotocelle-array, så det neurale netværk havde 400 input og én binær output. Et simpelt netværk indeholdt én neuron, også kaldet en threshold logic unit. Vægtene i det neurale netværk fungerede som potentiometre, der krævede manuel justering under træningsfasen.
✅ Et potentiometer er en enhed, der gør det muligt for brugeren at justere modstanden i et kredsløb.
The New York Times skrev dengang om perceptronen: embryoet til en elektronisk computer, som [flåden] forventer vil kunne gå, tale, se, skrive, reproducere sig selv og være bevidst om sin eksistens.
Perceptron-modellen
Antag, at vi har N funktioner i vores model, i hvilket tilfælde inputvektoren vil være en vektor af størrelse N. En perceptron er en binær klassifikationsmodel, dvs. den kan skelne mellem to klasser af inputdata. Vi antager, at for hver inputvektor x vil outputtet fra vores perceptron være enten +1 eller -1, afhængigt af klassen. Outputtet beregnes ved hjælp af formlen:
y(x) = f(wTx)
hvor f er en step-aktiveringsfunktion
Træning af Perceptron
For at træne en perceptron skal vi finde en vægtvektor w, der klassificerer de fleste værdier korrekt, dvs. resulterer i den mindste fejl. Denne fejl E defineres ved perceptron-kriteriet på følgende måde:
E(w) = -∑wTxiti
hvor:
- summen tages over de træningsdatapunkter i, der resulterer i en forkert klassifikation
- xi er inputdata, og ti er enten -1 eller +1 for henholdsvis negative og positive eksempler.
Dette kriterium betragtes som en funktion af vægtene w, og vi skal minimere det. Ofte bruges en metode kaldet gradient descent, hvor vi starter med nogle indledende vægte w(0), og derefter opdaterer vægtene ved hvert trin ifølge formlen:
w(t+1) = w(t) - η∇E(w)
Her er η den såkaldte læringsrate, og ∇E(w) betegner gradienten af E. Efter at vi har beregnet gradienten, ender vi med:
w(t+1) = w(t) + ∑ηxiti
Algoritmen i Python ser sådan ud:
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
Konklusion
I denne lektion lærte du om en perceptron, som er en binær klassifikationsmodel, og hvordan man træner den ved hjælp af en vægtvektor.
🚀 Udfordring
Hvis du vil prøve at bygge din egen perceptron, kan du prøve dette lab på Microsoft Learn, som bruger Azure ML designer.
Quiz efter lektionen
Gennemgang & Selvstudie
For at se, hvordan vi kan bruge perceptron til at løse et simpelt problem såvel som virkelige problemer, og for at fortsætte med at lære - gå til Perceptron-notebooken.
Her er en interessant artikel om perceptrons.
Opgave
I denne lektion har vi implementeret en perceptron til en binær klassifikationsopgave, og vi har brugt den til at klassificere mellem to håndskrevne cifre. I dette lab bliver du bedt om at løse problemet med cifergenkendelse fuldstændigt, dvs. bestemme hvilket ciffer, der sandsynligvis svarer til et givet billede.

