🎨 MLP Grayscale

OpenTechLab Jablonec nad Nisou · Science Micro Elementary School

Kontinuální neuronová síť - stejná architektura, jiná interpretace dat - podstatný krok ke konvolučním neuronovým sítím

💡 Co je tu jinak?

Aspekt
MLP Builder (binární)
MLP Grayscale (kontinuální)
Vstup
0 nebo 1 (zapnuto/vypnuto)
0.0 - 1.0 (stupně šedi)
Výstup
Binární kód číslice (0101)
Pravděpodobnost pro každou třídu
Architektura
MLP: Vstup → Skrytá → Výstup
MLP Grayscale: Vstup → Skrytá → Výstup
Aktivace
Sigmoid (0-1)
Sigmoid + Softmax (pravděpodobnosti)

🎯 Klíčový vhled: Síť je téměř identická! Rozdíl je v tom, jak interpretujeme data - ne v architektuře.

Neuron už nerozhoduje. Neuron měří.

⚙️ Konfigurace

📚
Trénink
▶️
Provoz
Klikni a táhni pro malování
25 vstupních neuronů (0.0 = černá, 1.0 = bílá)
1.00

PŘIDAT VZOR DO TRÉNINKU


TRÉNINK SÍTĚ

Epocha: 0
Vzorů: 0
Chyba:
📈 Historie chyby

Režim vstupu (experiment)
💡 Síť vidí plynulé hodnoty – stupně šedi.
Rozpoznaná číslice
?
Nakresli vzor

PRESETY

🔗 Neuronová síť 25→15→10

Epocha 0
Chyba

📈 Výstup (Pravděpodobnosti)

💡 Síť neříká, co to JE. Říká, čemu věří nejvíc.

Každý výstupní neuron měří „míru přesvědčení" pro jednu číslici (0-9).

Rozpoznaná číslice
?
Nakresli vzor

Tréninková data

Zatím žádná data.

📚 Teoretický základ

Pochopení klíčových konceptů pro práci s kontinuálními neuronovými sítěmi

🔢 Kontinuální vs Binární vstup

V binární síti je pixel buď zapnutý (1) nebo vypnutý (0). V kontinuální síti pixel vyjadřuje intenzitu – hodnotu mezi 0 a 1.

Příklad: 0.7 = „poměrně jasný pixel" – síť tuto nuanci zpracuje.

📊 Neuron měří, nerozhoduje

V binární síti výstupní neuron říká ANO/NE. V kontinuální síti říká „jak moc" – míru přesvědčení.

Výstup 0.73 pro číslici „7" = síť si je 73% jistá.

⚖️ Softmax – pravděpodobnostní výstup

Softmax převede surové výstupy neuronů na pravděpodobnosti. Součet všech výstupů je vždy 100%.

Síť „rozděluje svou jistotu" mezi všechny možnosti.

📉 Loss ≠ Přesnost

Loss (chyba) měří, jak daleko jsou predikce od reality. Přesnost měří, kolik odpovědí je správných.

Síť může mít nízkou chybu, ale stále dělat špatná rozhodnutí (a naopak).

🎭 I špatná odpověď má strukturu

Když síť odpoví špatně, její „nejistota" ukazuje, co ji zmátlo. Např. záměna 8 a 0 – oba mají podobný tvar.

Tato informace je cenná pro ladění a pochopení sítě.

🌈 Cesta k férovosti (Fairness)

Kontinuální výstupy otevírají otázky o férovosti. Jak síť rozděluje svou „jistotu"? Je pro všechny skupiny stejně sebevědomá?

Toto je základ pro pochopení biasu v AI.

⚠️ Problém pozice – limit MLP sítí

MLP síť se učí přesnou pozici každého pixelu. Pokud nakreslíš „7" o pixel doleva, síť ji nemusí poznat – pro ni je to úplně jiný vzor.

Naučený vzor
✓ Rozpoznáno
Posunutý vzor
✗ Nepozná!

💡 Řešení? Konvoluční neuronové sítě (CNN) – hledají vzory kdekoli v obrázku.

⚠️ Toto ještě není konvoluční síť!

  • Každý pixel má stále svou vlastní váhu.
  • MLP vidí pixely. CNN uvidí také vztahy.
  • CNN prozkoumáme v další kapitole.

🎓 Klíčové ponaučení

Přechod od binárního k kontinuálnímu výstupu není jen technická změna – mění způsob, jak přemýšlíme o odpovědích AI.

📚 Teorie: MLP s kontinuálním vstupem

🔢 Kontinuální vs. binární vstup

Binární vstup (0 nebo 1) ztrácí informaci o intenzitě. Kontinuální vstup (0.0 až 1.0) zachovává nuance – síť vidí "jak moc" je pixel aktivní.

Binární
0, 1, 1
Kontinuální
0.2, 0.78, 1.0

Výhoda: Síť může rozlišovat jemné rozdíly ve vzorech, což zlepšuje rozpoznávání.

📊 Sigmoidální aktivace

Sigmoid "stlačí" libovolné číslo do rozmezí (0, 1). To umožňuje interpretovat výstup jako pravděpodobnost.

σ(x) = 1 / (1 + e-x)
x → -∞ ⇒ σ(x) → 0 | x → +∞ ⇒ σ(x) → 1 | σ(0) = 0.5
Derivace (pro backprop)
σ'(x) = σ(x) × (1 - σ(x))
Maximum derivace
σ'(0) = 0.25

⚡ Forward Pass (dopředný průchod)

Data proudí vstupem → skrytou vrstvou → výstupem. V každé vrstvě: vážený součet + aktivační funkce.

1. Skrytá vrstva:
hj = σ( Σi (xi × wij) + biasj )
2. Výstupní vrstva:
yk = σ( Σj (hj × wjk) + biask )

🔄 Backpropagation

Chyba se šíří zpět sítí. Pro každou váhu spočítáme, jak moc přispěla k chybě, a upravíme ji.

1. Chyba výstupu (MSE gradient):
δk = (targetk - yk) × σ'(yk)
2. Chyba skryté vrstvy:
δj = ( Σk δk × wjk ) × σ'(hj)
3. Aktualizace váhy:
wij += learning_rate × δj × xi + momentum × Δwij(předchozí)

📈 Interpretace výstupu jako pravděpodobnosti

Výstup sigmoidu (0-1) můžeme interpretovat jako "jistotu" sítě. Ale pozor – výstupy nejsou normalizované!

Sigmoid (zde)

Každý výstup nezávisle 0-1. Součet ≠ 1.

[0.8, 0.3, 0.7, ...] → součet = ?
Softmax (alternativa)

Normalizuje výstupy, aby součet = 1.

softmax(z)k = ezk / Σez

💻 Implementační průvodce

1. Sigmoid a její derivace
function sigmoid(x) {

    return 1 / (1 + Math.exp(-x));

}



function sigmoidDerivative(y) {

    // y je již výstup sigmoidu!

    return y * (1 - y);

}
2. Forward pass
function forward(inputs) {

    // Skrytá vrstva

    for (let j = 0; j < hiddenSize; j++) {

        let sum = biasHidden[j];

        for (let i = 0; i < inputSize; i++) {

            sum += inputs[i] * weightsIH[i][j];

        }

        hiddenValues[j] = sigmoid(sum);

    }

    

    // Výstupní vrstva

    for (let k = 0; k < outputSize; k++) {

        let sum = biasOutput[k];

        for (let j = 0; j < hiddenSize; j++) {

            sum += hiddenValues[j] * weightsHO[j][k];

        }

        outputValues[k] = sigmoid(sum);

    }

    return outputValues;

}
3. Backpropagation
function backward(targets, learningRate) {

    // Výstupní chyby

    for (let k = 0; k < outputSize; k++) {

        outputDeltas[k] = (targets[k] - outputValues[k]) 

                        * sigmoidDerivative(outputValues[k]);

    }

    

    // Skryté chyby (backprop)

    for (let j = 0; j < hiddenSize; j++) {

        let error = 0;

        for (let k = 0; k < outputSize; k++) {

            error += weightsHO[j][k] * outputDeltas[k];

        }

        hiddenDeltas[j] = error * sigmoidDerivative(hiddenValues[j]);

    }

    

    // Aktualizace vah

    for (let j = 0; j < hiddenSize; j++) {

        for (let k = 0; k < outputSize; k++) {

            weightsHO[j][k] += learningRate * outputDeltas[k] * hiddenValues[j];

        }

    }

    // ... podobně pro weightsIH

}

🎯 Klíčové koncepty

Kontinuální vstup
Zachovává nuance šedé škály
Sigmoid aktivace
Výstup v rozmezí (0, 1)
Gradient descent
Minimalizace chyby kroky
Limitace MLP
Pozice pixelu ovlivňuje rozpoznání