|
|
||
|---|---|---|
| .. | ||
| lab | ||
| Perceptron.ipynb | ||
| README.md | ||
README.md
Uvod v nevronske mreže: Perceptron
Predhodni kviz
Eden prvih poskusov implementacije nečesa podobnega sodobni nevronski mreži je izvedel Frank Rosenblatt iz Cornell Aeronautical Laboratory leta 1957. Šlo je za strojno implementacijo, imenovano "Mark-1", zasnovano za prepoznavanje primitivnih geometrijskih oblik, kot so trikotniki, kvadrati in krogi.
![]() |
![]() |
Slike iz Wikipedije
Vhodna slika je bila predstavljena z matriko fotocelic velikosti 20x20, kar pomeni, da je imela nevronska mreža 400 vhodov in en binarni izhod. Preprosta mreža je vsebovala en nevron, imenovan tudi enota logičnega praga. Teže nevronske mreže so delovale kot potenciometri, ki so jih morali ročno nastaviti med fazo učenja.
✅ Potenciometer je naprava, ki omogoča uporabniku prilagajanje upornosti v vezju.
New York Times je takrat o perceptronu zapisal: zarodek elektronskega računalnika, za katerega [mornarica] pričakuje, da bo lahko hodil, govoril, videl, pisal, se razmnoževal in bil zavesten svoje eksistence.
Model perceptrona
Predpostavimo, da imamo v našem modelu N značilnosti, v tem primeru bi bil vhodni vektor velikosti N. Perceptron je model za binarno klasifikacijo, kar pomeni, da lahko razlikuje med dvema razredoma vhodnih podatkov. Predpostavljamo, da bo za vsak vhodni vektor x izhod našega perceptrona bodisi +1 ali -1, odvisno od razreda. Izhod se izračuna po formuli:
y(x) = f(wTx)
kjer je f funkcija aktivacije s korakom.
Učenje perceptrona
Za učenje perceptrona moramo najti vektorsko težo w, ki pravilno klasificira večino vrednosti, tj. povzroči najmanjšo napako. Ta napaka E je definirana z merilom perceptrona na naslednji način:
E(w) = -∑wTxiti
kjer:
- vsota zajema tiste točke učnih podatkov i, ki povzročijo napačno klasifikacijo,
- xi so vhodni podatki, ti pa je bodisi -1 ali +1 za negativne oziroma pozitivne primere.
To merilo obravnavamo kot funkcijo tež w, ki jo moramo minimizirati. Pogosto se uporablja metoda gradientnega spusta, pri kateri začnemo z začetnimi težami w(0), nato pa pri vsakem koraku posodobimo teže po formuli:
w(t+1) = w(t) - η∇E(w)
Tu je η tako imenovana stopnja učenja, ∇E(w) pa označuje gradient E. Ko izračunamo gradient, dobimo:
w(t+1) = w(t) + ∑ηxiti
Algoritem v Pythonu izgleda takole:
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
Zaključek
V tej lekciji ste spoznali perceptron, ki je model za binarno klasifikacijo, in kako ga naučiti z uporabo vektorske teže.
🚀 Izziv
Če želite poskusiti zgraditi svoj perceptron, preizkusite to delavnico na Microsoft Learn, ki uporablja Azure ML designer.
Kviz po predavanju
Pregled in samostojno učenje
Če želite videti, kako lahko perceptron uporabimo za reševanje preprostih problemov in resničnih težav ter nadaljevati z učenjem, obiščite zvezek Perceptron.
Tukaj je zanimiv članek o perceptronih.
Naloga
V tej lekciji smo implementirali perceptron za nalogo binarne klasifikacije in ga uporabili za razlikovanje med dvema ročno napisanima številkama. V tej delavnici morate rešiti problem popolne klasifikacije številk, tj. določiti, katera številka najbolj verjetno ustreza dani sliki.

