OpenTechLab Jablonec nad Nisou · Science Micro Elementary School
ReLU není „jen funkce“. Je to mechanismus vypínání: část informací dál neprojde a tím vzniká struktura. Táhni bod ve vstupním prostoru a sleduj, jak nelinearita mění geometrii sítě.
Perceptron / sigmoid: „něco vážím a vyhladím“
ReLU:
rozhoduji, co vůbec smí existovat dál
To není jen aktivace, to je brána relevance.
„Tento rys je přítomen. Tento ne.“
Zavádí nelinearitu. Umožňuje síti "vypínat" nerelevantní části a skládat složité tvary.
Bez ReLU není
latentní prostor „ostrý“.
Skládání mnoha ReLU vrstev za sebe. Vznikají komplexní hierarchie (od hran po tváře).
ReLU (Rectified Linear Unit) je zdánlivě banální funkce: max(0, x).
Přesto způsobila revoluci v Deep Learningu. Proč?
V mozku nikdy „nesvítí“ všechny neurony naráz. ReLU to napodobuje – vypíná vše pod nulou. Tím vzniká efektivní a robustní reprezentace.
Každý neuron rozděluje prostor rovnou čárou. Když jich složíme hodně, můžeme vytvořit libovolně složitý tvar (jako origami z papíru).
Na rozdíl od sigmoid/tanh se ReLU „nesytí“ v kladných hodnotách. Gradient může téct skrz hlubokou síť bez mizení (Vanishing Gradient Problem).
Je to prosté. Pokud je vstup záporný, vrátíme nulu. Pokud je kladný, vrátíme ho beze změny.
Derivace: 0 pro x < 0, 1 pro x> 0. To je klíčové pro rychlý trénink (žádné složité exponenciály).
Pokud se váhy nastaví tak, že vstup neuronu je vždy záporný při všech datech, neuron "umře".
Gradient je 0 → váhy se neaktualizují → neuron už se nikdy neprobere. Řešení: Leaky ReLU (malý sklon v záporu) nebo opatrná inicializace.
Abychom předešli zmatkům: ReLU je aktivační funkce. Aplikuje se vždy až po sečtení všech vstupů. Představme si to jako výrobní linku jednoho neuronu:
Poznámka: Často se říká "neuron spočítá vážený součet". To je pravda, ale to je jen "před-aktivace". Teprve ReLU rozhodne, zda tento součet pustí dál (aktivace), nebo ho zahodí (nula).
ReLU je dnes výchozí volba pro skryté vrstvy v: Konvolučních sítích (CNN) pro zpracování obrazu, Transformerech (LLM) (často ve variantě GeLU/SwiGLU) pro zpracování textu, i v klasických MLP.
Ukázka struktury jednoduché neuronové sítě s ReLU aktivací ve skryté vrstvě.
class NeuralNetwork {
constructor(inputSize, hiddenSize, outputSize) {
this.inputSize = inputSize;
this.hiddenSize = hiddenSize;
this.outputSize = outputSize;
// Inicializace vah: +1 pro bias v každé vrstvě
// Pro ReLU je vhodné použít He Initialization (zde zjednodušeno)
this.weightsIH = this.randomMatrix(inputSize + 1, hiddenSize, 0.5);
this.weightsHO = this.randomMatrix(hiddenSize + 1, outputSize, 0.5);
}
randomMatrix(rows, cols, range) {
return Array.from({ length: rows }, () =>
Array.from({ length: cols }, () =>
(Math.random() - 0.5) * 2 * range
)
);
}
// Klíčová část: ReLU
relu(x) { return Math.max(0, x); }
// Derivace pro trénink (zpětný průchod)
reluDerivative(x) { return x > 0 ? 1 : 0; }
forward(inputs) {
// ... matrix multiplication & activation ...
}
}