Autoenkodér je typ umělé neuronové sítě, která se používá pro učení efektivního kódování dat v rámci učení bez učitele. Cílem autoenkodéru je naučit se reprezentaci (kompresi) vstupních dat, obvykle za účelem snížení dimenzionality nebo odstranění šumu.
Základní princip spočívá v tom, že síť se snaží na svém výstupu zrekonstruovat přesně to, co dostala na vstupu.
Autoenkodér se skládá ze tří hlavních částí:
Část sítě, která postupně zmenšuje vrstvy a komprimuje vstupní data do menšího rozměru. Tato část „extrahuje“ nejdůležitější rysy dat.
Nejužší vrstva sítě. Zde jsou data uložena v nejvíce komprimované podobě (tzv. latentní reprezentace). Tato vrstva nutí síť zahodit nepodstatné informace (šum) a ponechat jen to podstatné.
Zrcadlová část k enkodéru. Bere komprimovaná data z hrdla a snaží se z nich rekonstruovat původní vstup v co nejvyšší kvalitě.
Autoenkodér nepotřebuje lidské štítky (labely). Jako „učitel“ mu slouží samotný vstup.
$$Loss = \|x - \hat{x}\|^2$$
Do vstupu se záměrně přidá šum (např. náhodné pixely). Síť se trénuje tak, aby na výstupu byl čistý obraz. Tím se učí chápat skutečnou strukturu dat, nikoliv jen kopírovat pixely.
Pokročilý typ, který místo pevných bodů v latentním prostoru modeluje pravděpodobnostní rozdělení.
Vynucuje, aby v hrdle bylo aktivních jen několik málo neuronů zároveň. To pomáhá extrahovat unikátní a silné příznaky.
from keras.layers import Input, Dense from keras.models import Model # Definice rozměrů input_size = 784 # např. 28x28 obrázek code_size = 32 # rozměr komprese (bottleneck) # Enkodér input_img = Input(shape=(input_size,)) encoded = Dense(code_size, activation='relu')(input_img) # Dekodér decoded = Dense(input_size, activation='sigmoid')(encoded) # Sestavení modelu autoencoder = Model(input_img, decoded) autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
Související články:
Tagy: ai neural_networks autoencoders deep_learning unsupervised_learning