Próbuję trenować sieć neuronową, aby sklasyfikować słowa w różnych kategoriach. Zauważam dwie rzeczy:

Kiedy używam mniejszego {X0}} (np. 8,16,32) strata nie zmniejsza się, ale raczej sporadycznie zmienna. Kiedy używam większego batch_size (jak 128, 256), strata idzie w dół, ale bardzo powoli.

Co ważniejsze, gdy używam większej wartości {x0}}, mój model wykonuje dobrą robotę przy zmniejszeniu straty. Jednak używam naprawdę dużej wartości ({x1}}).

Pytanie : Jak uzyskać optymalne wartości {x0}} i batch_size?

2
newbieprogrammer 23 październik 2020, 07:11

1 odpowiedź

Najlepsza odpowiedź

Nie ma możliwości podjęcia decyzji o tych wartościach opartych na niektórych zasadach. Niestety, najlepsze wybory zależą od problemu i zadania. Jednak mogę dać ci kilka spostrzeżeń.

Po szkoleniu sieci, obliczysz gradient, który zmniejszyłby stratę. Aby to zrobić, musisz backpropagować stratę. Teraz, najlepiej obliczyć straty oparte na wszystkich próbkach w swoich danych, ponieważ wtedy rozważasz zasadniczo każdą próbkę i wymyślasz gradient, który uchwyciłby wszystkie swoje próbki. W praktyce nie jest to możliwe ze względu na złożoność obliczania gradientu na wszystkich próbkach. Ponieważ dla każdej aktualizacji musisz obliczyć przejście do wszystkich próbek. Ta sprawa byłaby batch_size = n, gdzie n jest całkowitą liczbą masz punktów danych.

Dlatego używamy małych batch_size jako przybliżenia! Pomysł jest zamiast biorąc pod uwagę wszystkie próbki, mówimy, że obliczam gradient oparty na małym zestawie próbek, ale rzeczą jest tracę informacje na temat gradientu.

zasada: Mniejsze rozmiary partii zapewniają gradienty hałasu, ale łączą się szybciej, ponieważ na epokę masz więcej aktualizacji. Jeśli twój rozmiar partii jest 1, będziesz mieć n aktualizacji na epoki. Jeśli jest n, będziesz mieć tylko 1 aktualizację na epokę. Z drugiej strony, większe rozmiary partii nadają bardziej konstrukcyjne gradient, ale konwergencja wolniej.

To jest powód, dla którego dla mniejszych rozmiarów partii obserwujesz różne straty, ponieważ gradient jest hałaśliwy. I dla większych rozmiarów partii, gradient jest informacyjny, ale potrzebujesz wielu epok, ponieważ aktualizujesz rzadziej.

Idealny rozmiar partii powinien być tym, który daje gradienty informacyjne, ale także wystarczająco małe, abyś mógł ćwiczyć sieć. Możesz go znaleźć tylko próbując właściwie.

2
berkay berabi 26 październik 2020, 09:01