Ett av de första försöken att implementera något liknande ett modernt neuralt nätverk gjordes av Frank Rosenblatt från Cornell Aeronautical Laboratory år 1957. Det var en hårdvaruimplementation som kallades "Mark-1", designad för att känna igen enkla geometriska figurer, såsom trianglar, kvadrater och cirklar.
![]() |
![]() |
Bilder från Wikipedia
En inmatningsbild representerades av en 20x20 fotocellmatris, vilket innebar att det neurala nätverket hade 400 ingångar och en binär utgång. Ett enkelt nätverk innehöll en neuron, även kallad en tröskellogikenhet. Vikterna i det neurala nätverket fungerade som potentiometrar som behövde justeras manuellt under träningsfasen.
✅ En potentiometer är en enhet som gör det möjligt att justera motståndet i en krets.
The New York Times skrev om perceptron vid den tiden: embryot till en elektronisk dator som [marinen] förväntar sig ska kunna gå, prata, se, skriva, reproducera sig själv och vara medveten om sin existens.
Anta att vi har N funktioner i vår modell, vilket innebär att inmatningsvektorn skulle vara en vektor av storlek N. Ett perceptron är en modell för binär klassificering, det vill säga den kan skilja mellan två klasser av indata. Vi antar att för varje inmatningsvektor x kommer utgången från vårt perceptron att vara antingen +1 eller -1, beroende på klassen. Utgången beräknas med formeln:
y(x) = f(wTx)
där f är en stegaktiveringsfunktion
För att träna ett perceptron behöver vi hitta en viktvektor w som klassificerar de flesta värden korrekt, det vill säga resulterar i det minsta felet. Detta fel E definieras av perceptronkriteriet på följande sätt:
E(w) = -∑wTxiti
där:
- summan tas över de träningsdatapunkter i som resulterar i fel klassificering
- xi är indata, och ti är antingen -1 eller +1 för negativa respektive positiva exempel.
Detta kriterium betraktas som en funktion av vikterna w, och vi behöver minimera det. Ofta används en metod som kallas gradientnedstigning, där vi börjar med några initiala vikter w(0), och sedan vid varje steg uppdaterar vikterna enligt formeln:
w(t+1) = w(t) - η∇E(w)
Här är η den så kallade inlärningshastigheten, och ∇E(w) betecknar gradienten av E. Efter att vi har beräknat gradienten får vi:
w(t+1) = w(t) + ∑ηxiti
Algoritmen i Python ser ut så här:
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 weightsI denna lektion lärde du dig om ett perceptron, som är en modell för binär klassificering, och hur man tränar det genom att använda en viktvektor.
Om du vill prova att bygga ditt eget perceptron, testa detta labb på Microsoft Learn som använder Azure ML designer.
För att se hur vi kan använda perceptron för att lösa ett enkelt problem samt verkliga problem, och för att fortsätta lära dig - gå till Perceptron-notebook.
Här är en intressant artikel om perceptrons.
I denna lektion har vi implementerat ett perceptron för en binär klassificeringsuppgift, och vi har använt det för att klassificera mellan två handskrivna siffror. I detta labb ombeds du att lösa problemet med sifferklassificering helt och hållet, det vill säga att avgöra vilken siffra som mest sannolikt motsvarar en given bild.


