Skip to content

Latest commit

 

History

History
95 lines (54 loc) · 5.44 KB

File metadata and controls

95 lines (54 loc) · 5.44 KB

Úvod do neuronových sítí: Perceptron

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.

Frank Rosenblatt The Mark 1 Perceptron

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.

Model perceptronu

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.

Trénování perceptronu

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 weights

Závěr

V této lekci jste se naučili o perceptronu, což je model binární klasifikace, a jak jej natrénovat pomocí vektoru vah.

🚀 Výzva

Pokud si chcete zkusit vytvořit vlastní perceptron, zkuste tento lab na Microsoft Learn, který využívá Azure ML designer.

Přehled & Samostudium

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.