Debugowanie sieci neuronowych

10

Zbudowałem sztuczną sieć neuronową w Pythonie za pomocą funkcji optymalizacji scipy.optimize.minimize (gradient sprzężony).

Wdrożyłem sprawdzanie gradientu, podwójnie sprawdziłem wszystko itp. Jestem pewien, że działa poprawnie.

Uruchomiłem go kilka razy i osiąga on „Optymalizacja zakończona pomyślnie”, ale kiedy zwiększę liczbę ukrytych warstw, koszt hipotezy wzrasta (wszystko inne pozostaje takie samo) po pomyślnym zakończeniu.

Intuicyjnie wydaje się, że koszt powinien się zmniejszyć, gdy liczba ukrytych warstw wzrośnie, ponieważ jest w stanie wygenerować bardziej złożoną hipotezę, która lepiej pasuje do danych, jednak wydaje się, że tak nie jest.

Byłbym zainteresowany, aby zrozumieć, co się tutaj dzieje, lub jeśli nieprawidłowo zaimplementowałem sieć neuronową?

użytkownik3726050
źródło

Odpowiedzi:

9

Jest tak wiele sposobów, aby pójść nie tak z siecią neuronową, że trudno będzie ją debugować. Ponadto, aby zaspokoić Twoją intuicję, każda dodatkowa ukryta warstwa znacznie utrudnia naukę. Powiedziawszy to, oto kilka możliwości:

  1. Dodano rozpad masy ciała. Dodanie większej liczby warstw powoduje zwiększenie ciężarów, co zwiększa koszty regularyzacji.
  2. Problem jest na tyle prosty, że wystarczy model z jedną ukrytą warstwą. Dodanie większej ilości ukrytych warstw utrudnia naukę sieci (trudniejszy problem optymalizacji).
  3. Metoda optymalizacji nie robi świetnej roboty (wolę climin niż scipy.optimize).
  4. Używasz funkcji aktywacji sigmoid / tanh. Funkcja sigmoidalna powoduje problem znikającego gradientu, który utrudnia naukę przy większej liczbie warstw. Spróbuj użyć funkcji ReLu.

Trening sieci neuronowych wymaga dużo praktyki, szczęścia i cierpliwości. Powodzenia.

użytkownik1133029
źródło
1
Dobra odpowiedź. Pamiętaj jednak, że 2, 3, 4 mogą oddziaływać na złożone sposoby. Debugowanie można wykonać, sprawdzając wartości aktywacyjne ANN, wielkość wag ANN,
obserwując
3

Zwiększenie liczby ukrytych warstw dla standardowej sieci neuronowej w rzeczywistości nie poprawi wyników w większości przypadków. Zmieni się rozmiar ukrytej warstwy.

Fakt ten (fakt, że liczba ukrytych warstw robi bardzo niewiele) został zauważony w przeszłości i jest motywacją do głębszego uczenia się. Głębokie uczenie się to skutecznie sprytne sposoby szkolenia wielowarstwowych sieci neuronowych, na przykład poprzez izolowanie podzbiorów cech podczas szkolenia różnych warstw.

Dobry film wprowadzający na ten temat na YouTube

eric chiang
źródło
2
Głębokie uczenie się polega na zwiększaniu liczby ukrytych warstw. W przeciwnym razie byłoby to nazywane uczeniem się tłuszczu :)
Emre
@Emre zdecydowanie to oznaczało. Przeklnij moją interpunkcję!
eric chiang