Fundament: Dane MNIST
Aby zademonstrować efekty regularyzacji (czyli ochrony przed "wkuwaniem na pamięć"), korzystamy z klasycznego zbioru obrazków 28x28 pikseli reprezentujących cyfry (MNIST). Przygotowujemy spłaszczone tablice `(784,)` na potrzeby wielowarstwowego perceptronu ucząc maszynę ich rozpoznawania.
1. Batch Normalization
(Stabilizacja na bieżąco)
Nawet z pięknie znormalizowanymi danymi na początku, z każdą warstwą gęstą skale powracają do szaleństwa. Ustawiamy wartswy BatchNormalization pomiędzy rdzeniami. Standaryzuje ono średnią i odchylenie każdej aktywacji ukrytej.
self.bn1 = layers.BatchNormalization()
self.act1 = layers.Activation('relu')
Dense (bez narzucania z góry wbudowanej aktywacji). Przechwytujemy gołe wyniki i puszczamy przez BatchNormalization. Dopiero wtedy czystą i wypośrodkowaną masę nakłuwamy łagodną aktywacją wyginającą przestrzeń: Activation('relu').
x = self.bn1(x, training=training)
training. Moduły z "pamięcią" statystyczną jak BN czy Dropout potrafią radykalnie zmieniać zachowanie gdy przełączamy się między salą tortur uczenia, a suchą predykcją (gdzie BN używa już średnich sztywnych zapamiętanych podczas treningów). Zaniechanie tego skutkuje usterką przewidywania.2. L2 Regularization & Dropout
(Celowe zapominanie przeciw Przeuczeniu)
Najgorszym przyjacielem deep learningu jest Overfitting: sytuacja doskonałego opanowania przez sieć zbioru z notatnika przy jednoczesnym zerowym zdolnościom użycia tego w "praktyce" i "w prawdziwym świecie". Aby uchronić sieć, krzywdzimy ją regularyzacją osłabiając jej fotograficzną pewność siebie.
Dense dorzuca na siłę dodatkową stratę do ogólnego Error Loss ilekroć wagi synaptyczne poszczególnych komórek rosną do wysokich astronomicznych i przesadzonych kwot. Wymusza trzymanie małych, rozproszonych wartości połączeń ukróconych od fałszywie pewnych dyktatorów.Działanie Mechanizmu Dropout (30%)
Węzły przekreślone na czerwono nie biorą udziału w tej iteracji Forward Pass i propagacji wstecznej. Z każdym updatem zestaw zgasłych losuje się na nowo.
3. Early Stopping (Callbacks)
(Bo czas to pieniądz, a epoki palą sprzęt)
Nigdy nie wiemy jaka powinna być epoka graniczna dla wyciągnięcia optymalnego ułamka logiki. Na ogół odpalamy tysiące epoek - ale dzięki asystentom z Callbacks kod sam strzeże straty i odpuszcza, gdy nauka cośnie i zacznie się wyginać w stronę przerażającego overfittingu.
val_loss spadł. Jeśli po upływie pięciu testów (patience=5 epok) model jedynie pogłębia porażki, trening jest rygorystycznie urywany, a wagi (co najważniejsze) powracają do stanu ze szczytu swojego absolutnie najlepszego testu z przeszłości.
callbacks=[early_stop, model_checkpoint] metody fit(), wprowadzają bezpieczeństwo do szkolącej sesji.4. Keras Tuner
(Automatyczny kowolucyjny detektyw Hiperparametrów)
Ręczne wpisywanie różnych LR, Dropoutu, liczebności i gęstości węzłów we for-zagnieżdżeniach to archaiczność. Narzędzie Keras Tuner losowo przeszukuje siatkę ustalonej przestrzeni kosmicznej potężnie szpikując różne wariacje same, generując tabele i szukając złotego środka dla twojego projektu ML!
hypermodel=build_hypermodel,
objective='val_accuracy',
max_trials=10,
directory='tuner_results')
tuner_random.search(x_train, y_train, epochs=15, validation_split=0.1)
get_best_hyperparameters()[0] położy nam gotowy układ optymalny przed naszymi oczami ze struktur ukrytych w katalogach.
Sprawdź jak regularyzacja L2 i Dropout dławi przedwczesne Przeuczenie. Zwróć uwagę jak i kiedy strażnik Early Stopping zainterweniuje przy wzroście Val_Loss! (Przełączaj suwak dławienia by uświadczyć korzyści lub destrukcji).