Z neuronové sítě jsem odstranil 74 % neuronů. Přesnost se snížila o pouhých 0,50 %. Zde je rozpis (s kódem):
Trénovaná neuronová síť má vždy neurony, které se na výkonu nijak výrazně nepodílejí. Ale stále spotřebovávají paměť. Ty lze odstranit bez výrazného snížení přesnosti. Pojďme se podívat, jak je identifikovat!
Zde jsou kroky: Krok 1) Trénujte neuronovou síť jako obvykle. Krok 2) Předejte validační sadu natrénovanou sítí a pro každý neuron ve skrytých vrstvách vypočítejte: - Průměrná aktivace - Rozptyl aktivací (pokud aktivace mohou být -ve) Zkontrolujte toto👇
Krok 3) Ořezejte neurony, které mají téměř nulový aktivační průměr a rozptyl, protože mají malý dopad na výstup modelu. V ideálním případě vyneste výkon do několika prahů vyřazování a vyberte model, který vyhovuje vašemu kompromisu mezi velikostí a přesností. Zkontrolujte toto 👇
Podívejme se na kód. Začneme tím, že definujeme jednoduchou neuronovou síť a naučíme ji. Protože aktivace na úrovni neuronů spočítáme později pro prořezávání, vrátíme všechny mezilehlé aktivace v dopředném průchodu. Zkontrolujte toto👇
Dále definujeme dva seznamy se třemi prvky: - Bude se ukládat průměr aktivací - Další bude ukládat std vývoj aktivací Ověřovací sadu předáme našemu modelu, abychom tyto statistiky vypočítali pro každou skrytou vrstvu. Zkontrolujte toto 👇
V tomto bodě vytvoříme distribuční graf statistik na úrovni neuronů, které jsme vygenerovali výše. Jak je znázorněno níže, průměrné aktivace většiny neuronů a jejich std dev. jsou silně distribuovány kolem hodnot blízkých nule. Zkusme je dále prořezat.
Při prořezávání iterujeme přes seznam prahových hodnot a: - Vytvořte novou síť a přeneste váhy, které překročí prahovou hodnotu. - Vyhodnoťte novou síť a vypočítejte celkový počet parametrů. - Připojte výsledky k seznamu. Zkontrolujte toto 👇
Tato tabulka porovnává přesnost a zmenšení velikosti vyřazeného modelu v rámci několika prahových hodnot ve srovnání s původním modelem. Při průměru=0,1 a std-dev=0,4: - Přesnost modelu klesá o 0,08 %. - Velikost modelu se zmenšila o 62 %. To je obrovské snížení. Zkontrolujte toto 👇
Zde je další zajímavý výsledek. Při průměru=0,5 a std-dev=1: - Přesnost modelu klesá o 0,5 %. - Velikost modelu se zmenší o 74 %. Takže v podstatě dostaneme téměř podobný výkon pro 1/4 parametrů. Zkontrolujte toto 👇
Samozřejmě existuje kompromis mezi přesností a velikostí. Jak zmenšujeme velikost, jeho přesnost klesá (podívejte se na video). Ve většině případů však přesnost není jedinou metrikou, kterou optimalizujeme. Místo toho je klíčovými faktory několik provozních metrik, jako je efektivita, paměť atd.
48,23K