Próbuję więc nauczyć się sieci neuronowych (do zastosowań regresji, nie klasyfikując zdjęć kotów).
Moje pierwsze eksperymenty polegały na uczeniu sieci implementacji filtra FIR i dyskretnej transformaty Fouriera (trening sygnałów „przed” i „po”), ponieważ są to operacje liniowe, które mogą być realizowane przez pojedynczą warstwę bez funkcji aktywacji. Oba działały dobrze.
Chciałem więc sprawdzić, czy mogę dodać abs()
i nauczyć się widma amplitudy. Najpierw pomyślałem o tym, ile węzłów będzie potrzebował w warstwie ukrytej, i zdałem sobie sprawę, że 3 ReLU są wystarczające do przybliżonego przybliżenia abs(x+jy) = sqrt(x² + y²)
, więc przetestowałem tę operację samodzielnie na pojedynczych liczbach zespolonych (2 wejścia → 3 ukryte warstwy węzłów ReLU → 1 wynik). Czasami działa:
Ale przez większość czasu, gdy próbuję, utknie w lokalnym minimum i nie znajduje odpowiedniego kształtu:
Wypróbowałem wszystkie optymalizatory i warianty ReLU w Keras, ale nie mają one większego znaczenia. Czy jest coś innego, co mogę zrobić, aby proste sieci takie jak ta niezawodnie zbiegały się? A może po prostu podchodzę do tego z niewłaściwym podejściem, a ty powinieneś rzucić o wiele więcej węzłów niż to konieczne w przypadku problemu, a jeśli połowa z nich umrze, nie jest to wielka sprawa?