Rozumiem, że sieci neuronowe (NN) można uznać za uniwersalne aproksymatory zarówno funkcji, jak i ich pochodnych, pod pewnymi założeniami (zarówno w sieci, jak i funkcji do aproksymacji). W rzeczywistości przeprowadziłem szereg testów prostych, ale nietrywialnych funkcji (np. Wielomianów) i wydaje się, że rzeczywiście potrafię je dobrze przybliżyć i ich pierwsze pochodne (przykład pokazano poniżej).
Nie jest dla mnie jednak jasne, czy twierdzenia, które prowadzą do powyższego, rozciągają się (a może mogłyby być rozszerzone) na funkcjonały i ich funkcjonalne pochodne. Rozważmy na przykład funkcjonalną:
z pochodną funkcjonalną:
gdzie zależy całkowicie i nie trywialnie od . Czy NN może nauczyć się powyższego mapowania i jego funkcjonalnej pochodnej? Mówiąc dokładniej, jeśli dyskretyzujemy domenę nad i podamy (w dyskretnych punktach) jako dane wejściowe i
Zrobiłem szereg testów i wydaje się, że NN może rzeczywiście nauczyć się mapowania , do pewnego stopnia. Jednak chociaż dokładność tego mapowania jest OK, nie jest wielka; i kłopotliwe jest to, że obliczona pochodna funkcjonalna jest kompletnym śmieciem (chociaż oba mogą być związane z problemami ze szkoleniem itp.). Przykład jest pokazany poniżej.
Jeśli NN nie nadaje się do uczenia funkcjonalnego i jego pochodnej funkcjonalnej, czy istnieje inna metoda uczenia maszynowego?
Przykłady:
(1) Poniżej podano przykład przybliżenia funkcji i jej pochodnej: NN został przeszkolony, aby nauczyć się funkcji w zakresie [-3,2]: z którego rozsądna uzyskuje się aproksymację do : Należy zauważyć, że zgodnie z oczekiwaniami aproksymacja NN do i jej pierwszej pochodnej poprawia się wraz z liczbą punktów treningowych, architekturą NN, ponieważ lepsze minima znajdują się podczas treningu itp.d f ( x ) / d x f ( x )
(2) Poniżej znajduje się przykład aproksymacji funkcjonalnej i jej pochodnej funkcjonalnej: NN został przeszkolony, aby nauczyć się funkcjonalnej . Dane treningowe uzyskano za pomocą funkcji postaci , gdzie i zostały wygenerowane losowo. Poniższy wykres ilustruje, że NN rzeczywiście jest w stanie dość dobrze przybliżać : Obliczone pochodne funkcjonalne są jednak kompletnym śmieciem; przykład (dla konkretnego ) pokazano poniżej: Jako ciekawą uwagę aproksymacja NN dof ( x ) F [ f ( x ) ] wydaje się poprawiać wraz z liczbą punktów treningowych itp. (jak w przykładzie (1)), ale pochodna funkcjonalna nie.
Odpowiedzi:
To dobre pytanie. Myślę, że obejmuje to teoretyczny dowód matematyczny. Od dłuższego czasu (około roku) pracuję z Deep Learning (w zasadzie siecią neuronową) i na podstawie mojej wiedzy ze wszystkich artykułów, które czytam, nie widziałem jeszcze na to dowodów. Jednak jeśli chodzi o dowody eksperymentalne, myślę, że mogę wyrazić opinię.
Rozważmy ten przykład poniżej:
W tym przykładzie uważam, że poprzez wielowarstwową sieć neuronową powinna ona być w stanie nauczyć się zarówno f (x), jak i F [f (x)] poprzez propagację wsteczną. Jednak niezależnie od tego, czy dotyczy to bardziej skomplikowanych funkcji, czy wszystkich funkcji we wszechświecie, wymaga to więcej dowodów. Jednakże, gdy weźmiemy pod uwagę przykład konkurencji Imagenet --- do sklasyfikowania 1000 obiektów, często stosuje się bardzo głęboką sieć neuronową; najlepszy model może osiągnąć niesamowity poziom błędu do ~ 5%. Tak głęboki NN zawiera ponad 10 warstw nieliniowych i jest to eksperymentalny dowód, że skomplikowana relacja może być reprezentowana przez głęboką sieć [w oparciu o fakt, że wiemy, że NN z 1 ukrytą warstwą może rozdzielać dane nieliniowo].
Ale to, czy WSZYSTKICH pochodnych można się nauczyć, wymagało dalszych badań.
Nie jestem pewien, czy istnieją metody uczenia maszynowego, które mogą w pełni poznać funkcję i jej pochodną. Przepraszam za to.
źródło
Sieci neuronowe mogą aproksymować ciągłe odwzorowania między euklidesowymi przestrzeniami wektorowymi gdy ukryta warstwa staje się nieskończona. To powiedziawszy, bardziej efektywne jest dodawanie głębi niż szerokości. Funkcjonalność to po prostu mapa, w której zakres wynosi tj. . Tak więc, sieci neuronowe mogą uczyć się funkcjonałów, o ile dane wejściowe są skończonymi wymiarowymi przestrzeniami wektorowymi, a pochodną można łatwo znaleźć poprzez różnicowanie w trybie odwrotnym, czyli propagację wsteczną. Ponadto, kwantyzacja danych wejściowych jest rzeczywiście dobrym sposobem na rozszerzenie sieci na wejścia funkcji ciągłych.f:RM→RN R N=1
źródło
Jeśli funkcja ma postać to można nauczyć się z regresją liniową przy wystarczającej funkcji szkoleniowych i wartości docelowe . Odbywa się to w przybliżeniu całki za pomocą reguły trapezoidalnej: czyli gdzieF[f(x)]=∫abf(x)g(x)dx g(x) fi(x), i=0,…,M F[fi(x)] F[f(x)]=Δx[f0g02+f1g1+...+fN−1gN−1+fNgN2] F[f(x)]Δx=y=f0g02+f1g1+...+fN−1gN−1+fNgN2 f0=a, f1=f(x1), ..., fN−1=f(xN−1), fN=b,
a<x1<...<xN−1<b, Δx=xj+1−xj
Załóżmy, że mamy FUNKCJE szkoleniowych . Dla każdego mamyM fi(x), i=1,…,M i F[fi(x)]Δx=yi=fi0g02+fi1g1+...+fi,N−1gN−1+fiNgN2
Wartości znajdują się następnie jako rozwiązanie problemu regresji liniowej z macierzą zmiennych objaśniających i cel wektor .g0,…,gN X=⎡⎣⎢⎢⎢⎢f00/2f10/2…fM0/2f01f11…fM1…………f0,N−1f1,N−1…fM,N−1f0N/2f1N/2…fMN/2⎤⎦⎥⎥⎥⎥ y=[y0,…,yM]
Przetestujmy to na prostym przykładzie. Załóżmy, że jest gaussowskim.g(x)
Zdyskretuj domenęx∈[a,b]
Weźmy sinus i cosinus o różnych częstotliwościach jako nasze funkcje treningowe. Obliczanie wektora docelowego:
Teraz macierz regresora:
Regresja liniowa:
Funkcja Gaussa została pomyślnie wyuczona, chociaż dane są nieco rozłożone wokół prawdziwej funkcji. Spread jest większy, gdy jest bliskie zeru. Ten spread można wygładzić za pomocą filtra Savitzky-Golayg(x)
Ogólnie rzecz biorąc, nie zależy liniowo od , to znaczy Nadal można go zapisać jako funkcję po dyskretyzacji co jest również prawdziwe dla funkcjonałów postaci ponieważ można aproksymować skończonymi różnicami . Ponieważ jest nieliniową funkcjąF[f(x)] f(x) F[f(x)]=∫abL(f(x))dx f0,f1…,fN x F[f(x)]=∫abL(f(x),f′(x))dx f′ f0,f1…,fN L f0,f1…,fN , można próbować nauczyć się go za pomocą metody nieliniowej, np. sieci neuronowych lub SVM, chociaż prawdopodobnie nie będzie to tak łatwe, jak w przypadku liniowym.
źródło