Jedním z prvních pokusů o implementaci něčeho podobného moderní neuronové síti byl projekt Franka Rosenblatta z Cornell Aeronautical Laboratory v roce 1957. Šlo o hardwarovou implementaci nazvanou "Mark-1", která byla navržena k rozpoznávání primitivních geometrických tvarů, jako jsou trojúhelníky, čtverce a kruhy.
![]() |
![]() |
Obrázky z Wikipedie
Vstupní obraz byl reprezentován maticí 20x20 fotobuněk, takže neuronová síť měla 400 vstupů a jeden binární výstup. Jednoduchá síť obsahovala jeden neuron, který se také nazývá jednotka logického prahu. Váhy neuronové sítě fungovaly jako potenciometry, které bylo nutné manuálně upravovat během fáze učení.
✅ Potenciometr je zařízení, které umožňuje uživateli upravit odpor v obvodu.
New York Times tehdy o perceptronu napsaly: embryo elektronického počítače, od kterého [námořnictvo] očekává, že bude schopné chodit, mluvit, vidět, psát, reprodukovat se a být si vědomo své existence.
Předpokládejme, že máme N vlastností v našem modelu, v takovém případě by vstupní vektor měl velikost N. Perceptron je model binární klasifikace, tj. dokáže rozlišit mezi dvěma třídami vstupních dat. Předpokládáme, že pro každý vstupní vektor x bude výstup našeho perceptronu buď +1, nebo -1, v závislosti na třídě. Výstup se vypočítá podle vzorce:
y(x) = f(wTx)
kde f je aktivační funkce typu schod.
Abychom perceptron natrénovali, musíme najít vektor vah w, který klasifikuje většinu hodnot správně, tj. vede k nejmenší chybě. Tato chyba E je definována pomocí kritéria perceptronu následujícím způsobem:
E(w) = -∑wTxiti
kde:
- součet se bere přes ty tréninkové datové body i, které vedou k nesprávné klasifikaci
- xi je vstupní data a ti je buď -1 nebo +1 pro negativní a pozitivní příklady.
Toto kritérium je považováno za funkci vah w, kterou je třeba minimalizovat. Často se používá metoda gradientního sestupu, při které začneme s počátečními váhami w(0) a v každém kroku aktualizujeme váhy podle vzorce:
w(t+1) = w(t) - η∇E(w)
Zde η je tzv. rychlost učení a ∇E(w) označuje gradient E. Po výpočtu gradientu získáme:
w(t+1) = w(t) + ∑ηxiti
Algoritmus v Pythonu vypadá takto:
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 weightsV této lekci jste se naučili o perceptronu, což je model binární klasifikace, a jak jej natrénovat pomocí vektoru vah.
Pokud si chcete zkusit vytvořit vlastní perceptron, zkuste tento lab na Microsoft Learn, který využívá Azure ML designer.
Chcete-li vidět, jak lze perceptron použít k řešení jednoduchého problému i reálných problémů, a pokračovat v učení, podívejte se na notebook Perceptron.
Zajímavý článek o perceptronech také stojí za přečtení.
V této lekci jsme implementovali perceptron pro úlohu binární klasifikace a použili jsme jej k rozlišení mezi dvěma ručně psanými číslicemi. V tomto labu máte za úkol vyřešit problém klasifikace číslic kompletně, tj. určit, která číslice nejpravděpodobněji odpovídá danému obrázku.


