Spadek gradientu nie działa tak, jak sugerowałeś, ale może wystąpić podobny problem.
Nie obliczamy średniej straty z partii, obliczamy średnie gradienty funkcji straty. Gradienty są pochodną straty w stosunku do masy, aw sieci neuronowej gradient dla jednej masy zależy od danych wejściowych z tego konkretnego przykładu i zależy również od wielu innych wag w modelu.
Jeśli twój model ma 5 ciężarków, a rozmiar mini-partii wynosi 2, możesz otrzymać:
Przykład 1. Strata = 2,gradients=(1.5,−2.0,1.1,0.4,−0.9)
Przykład 2. Strata = 3,gradients=(1.2,2.3,−1.1,−0.8,−0.7)
Obliczane są średnie gradientów w tej mini-partii, wynoszą one(1.35,0.15,0,−0.2,−0.8)
Zaletą uśrednienia dla kilku przykładów jest to, że zmienność gradientu jest mniejsza, więc uczenie się jest bardziej spójne i mniej zależne od specyfiki jednego przykładu. Zauważ, że średni gradient dla trzeciej wagi wynosi , ta waga nie zmieni tej aktualizacji wagi, ale prawdopodobnie będzie różna od zera dla kolejnych wybranych przykładów, które zostaną obliczone z różnymi wagami.0
edytuj w odpowiedzi na komentarze:
W moim przykładzie powyżej obliczana jest średnia gradientów. Dla wielkości mini partii której obliczamy stratę dla każdego przykładu, dążymy do uzyskania średniego gradientu straty w stosunku do wagi .L i w jkLiwj
Sposób, w jaki napisałem to w moim przykładzie, uśredniłem każdy gradient, np .:∂L∂wj=1k∑ki=1∂Li∂wj
Kod samouczka, do którego prowadzisz link w komentarzach, wykorzystuje Tensorflow w celu zminimalizowania średniej straty.
Tensorflow ma na celu zminimalizowanie1k∑ki=1Li
Aby to zminimalizować, oblicza gradienty średniej straty w odniesieniu do każdej masy i wykorzystuje gradient opadający do aktualizacji wag:
∂L∂wj=∂∂wj1k∑ki=1Li
Zróżnicowanie można wprowadzić do sumy, więc jest takie samo jak wyrażenie z podejścia w moim przykładzie.
∂∂wj1k∑ki=1Li=1k∑ki=1∂Li∂wj
code line 170
?Powodem używania mini-partii jest dobry przykład szkolenia, tak aby ewentualny hałas został zmniejszony przez uśrednienie ich efektów, ale nie jest to również pełna partia, która dla wielu zestawów danych może wymagać dużej ilości pamięci. Jednym ważnym faktem jest to, że błąd, który oceniasz, jest zawsze odległościąmiędzy przewidywaną wydajnością a rzeczywistą wydajnością: oznacza to, że nie może być ona ujemna, więc nie można, jak powiedziano, błędu 2 i -2, który się anuluje, ale zamiast tego stałby się błędem 4 Następnie oceniasz gradient błędu w odniesieniu do wszystkich wag, abyś mógł obliczyć, która zmiana wag zmniejszyłaby go najbardziej. Kiedy to zrobisz, zrobisz „krok” w tym kierunku, w zależności od wielkości twojego współczynnika uczenia się alfa. (To są podstawowe pojęcia, nie będę szczegółowo omawiał propagacji wstecznej dla głębokiego NN) Po uruchomieniu tego szkolenia w zbiorze danych dla pewnej liczby epok, możesz oczekiwać, że twoja sieć zbiegnie się, jeśli twój krok nauki nie jest zbyt duży spraw, by się rozchodził. Nadal możesz skończyć w lokalnym minimummożna tego uniknąć, inicjując różne wagi w inny sposób, używając optymalizatorów różnic i próbując uregulować.
źródło