Sztuczka jądra dla sieci neuronowych


9

Uczyłem się o sieciach neuronowych i SVM. Samouczki, które przeczytałem, podkreślają, jak ważne jest jądro dla SVM. Bez funkcji jądra maszyny SVM są tylko liniowym klasyfikatorem. Dzięki kernelizacji SVM mogą również zawierać funkcje nieliniowe, co czyni je bardziej zaawansowanym klasyfikatorem.

Wydaje mi się, że można również zastosować jądro do sieci neuronowych, ale żaden z samouczków na temat sieci neuronowych, o których widziałem, nie wspominał o tym. Czy ludzie często używają sztuczki jądra w sieciach neuronowych? Przypuszczam, że ktoś musiał z nim eksperymentować, aby zobaczyć, czy to robi dużą różnicę. Czy jądro pomaga sieciom neuronowym tak samo jak SVM? Dlaczego lub dlaczego nie?

(Potrafię sobie wyobrazić kilka sposobów włączenia sztuczki jądra do sieci neuronowych. Jednym ze sposobów byłoby użycie odpowiedniej funkcji jądra do wstępnego przetworzenia danych wejściowych, wektora w Rn, do wejścia o wyższym wymiarze, wektora w Rm dla mn. W przypadku wielowarstwowych sieci neuronowych inną alternatywą byłoby zastosowanie funkcji jądra na każdym poziomie sieci neuronowej).


2
Sztuczka jądra działa, gdy twój dostęp obliczeniowy do twoich punktów danych składa się z obliczania produktów wewnętrznych. Nie jestem pewien, czy tak jest w przypadku sieci neuronowych.
Yuval Filmus,

Odpowiedzi:


6

Myślę, że możesz mylić terminologię w sposób, który sprawia, że ​​problem jest mylący. SVM działają poprzez zdefiniowanie liniowej granicy decyzji, tj. Hiperpłaszczyzny. Możemy zdefiniować tę hiperpłaszczyznę w kategoriach produktów wewnętrznych między punktami. Dlatego, jeśli zdefiniujemy ten wewnętrzny produkt jako znajdujący się w jakiejś wielowymiarowej, a nawet nieskończonej przestrzeni wymiarowej, to coś, co wygląda na hiperpłaszczyznę w tej nowej przestrzeni, nie jest konieczne liniowe w pierwotnej przestrzeni cech. Więc wszystko jest nadal liniowe, jedyne, co zrobiliśmy, to niejawnie (poprzez nowy produkt wewnętrzny) osadzić punkty w jakiejś przestrzeni o wyższych wymiarach. Może już to wszystko wiesz.

Istnieją 2 kwestie do rozważenia w odniesieniu do sieci neuronowych. Pierwszy został poruszony przez @Yuval Filmus, ponieważ sieci neuronowe z ukrytą warstwą zależą nie tylko od wewnętrznych produktów między punktami. Jeśli usuniesz ukrytą warstwę, masz po prostu coś w rodzaju regresji logistycznej, której są wersje jądra . Może jest jakiś sposób na obejście tego, ale nie widzę tego.

Po drugie, wspominasz o wstępnym przetwarzaniu danych wejściowych poprzez rzutowanie na wyższą, ale nieskończoną przestrzeń wymiarową. Sieci neuronowe definiują powierzchnię decyzyjną i ta powierzchnia nie jest ograniczona do liniowej. Oznacza to, że zysk z rzutowania punktów w przestrzeń o wyższych wymiarach będzie różny, tj. Może ułatwić znalezienie dobrego zestawu wag, ale niekoniecznie zwiększyliśmy moc naszego modelu. Wynika to z uniwersalnego twierdzenia aproksymacyjnego, które mówi, że biorąc pod uwagę wystarczająco dużą liczbę ukrytych jednostek, możemy aproksymować dowolną funkcję (pod pewnymi ograniczeniami). To ostatnie stwierdzenie jest raczej próżne i nienawidzę o tym mówić. Nie mówiąc ci nic o tym, jak znaleźć odpowiednie ciężary, nie wnosi to wiele do stołu z perspektywy aplikacji.


Dziękuję Ci. Tak. Wiem, że możemy myśleć o SVM jako mapowaniu oryginalnych danych wejściowych na jakąś wyższą (lub nawet nieskończoną) przestrzeń wymiarową, a następnie podejmowanie liniowej granicy decyzji w tej wyższej przestrzeni wymiarowej. Czy możemy to zrobić również z sieciami neuronowymi? Czy możemy zmapować dane wejściowe do przestrzeni o wyższych wymiarach, a następnie potraktować to jako rzeczywisty sygnał wejściowy do sieci neuronowej? Zakładam, że możemy (i przypuszczam, że moglibyśmy to zrobić również na każdej warstwie, gdybyśmy chcieli). I jeśli możemy, moje prawdziwe pytanie brzmi: czy oferuje to tak samo duże ulepszenie sieci neuronowych (w praktyce), jak w przypadku SVM? Dlaczego lub dlaczego nie?
DW

Wiem o uniwersalnym twierdzeniu o aproksymacji, ale tak naprawdę nie odpowiada na pytanie (jak wskazałeś). To, na czym mi zależy, to to, jak dobrze prace neuronowe zwykle działają w praktyce. Zastanawiam się, czy wstępne przetwarzanie danych wejściowych za pomocą sztuczki jądra może sprawić, że sieci neuronowe będą działały lepiej w praktyce. Oczywiście nie ma gwarancji i zawsze będą sytuacje, w których wszystko, co zrobisz, może pogorszyć sytuację, ale zastanawiam się nad typowym zachowaniem, w praktyce (w tym samym sensie, w którym mówimy, że jądro sprawia, że ​​SVM są znacznie bardziej skuteczne, w ćwiczyć).
DW

2
@DW Powodem, dla którego jądro czyni SVM bardziej efektywnymi, jest to, że pozwala im definiować nieliniowe granice decyzyjne. Sieci neuronowe mogą już określać nieliniowe granice decyzyjne, więc jedyną korzyścią z wyświetlania danych w przestrzeni o wyższym wymiarze byłoby ułatwienie problemu optymalizacji.
alt

1

Sztuczka jądra jest możliwa dla SVM ze względu na specjalną właściwość procesu uczenia się dla SVM. Sieci neuronowe wydają się nie mieć tej właściwości (o ile mogę powiedzieć).

Pozwolić x1,,xnRdbyć punktami w zestawie treningowym. Zwykle można oczekiwać, że algorytm uczenia maszynowego przyjrzy się wartościom parametruxi„s. Proces uczenia się SVM ma jednak dość niezwykłą właściwość. Nie musi znać wartościxi„s. Wystarczy umieć obliczyćxixjdla dowolnej pożądanej pary punktów wejściowych (tj. do obliczenia iloczynu kropkowego dla dowolnej pary wybranych wektorów wejściowych); to wszystko, czego potrzebuje proces uczenia się SVM.

Ta specjalna właściwość procesu uczenia się SVM pozwala nam korzystać ze sztuczki jądra. Możemy zdefiniować funkcję jądraK po to aby K(xi,xj)jest iloczynem kropkowym pewnej nieliniowej transformacji danych wejściowych. Jeśli przekształcamy wektory wejściowe za pomocą transformacji nieliniowejϕ:RdRm (dla niektórych m>d), a następnie definiujemy K(xi,xj)=ϕ(xi)ϕ(xj). Kolejną fajną właściwością jest to, że w przypadku niektórych transformacji nieliniowychϕ, możesz obliczyć K(xi,xj) wydajniej niż komputer ϕ(xi),ϕ(xj)jawnie, a następnie obliczając iloczyn skalarny; możesz obliczyćK(xi,xj) w O(d) czas (powiedzmy) zamiast O(m) czas.

Niestety sieci neuronowe nie wydają się mieć możliwości skorzystania z tej fajnej sztuczki, ponieważ proces uczenia się sieci neuronowych wydaje się zależeć od czegoś więcej niż tylko wartości xixj (lub K(xi,xj)); wymaga pełnej wartości wszystkichxi„s. Tak więc, chociaż możemy rzeczywiście wstępnie przetworzyć dane wejściowe do sieci nieliniowej za pomocą jakiejś funkcji nieliniowej, jeśli chcemy, nie wydaje się, aby można było użyć sztuczki jądra, aby uczynić to bardziej wydajnym, tak jak w przypadku SVM.


1

Chciałbym podzielić się kilkoma spostrzeżeniami. Wymiar wejściowy: 144. Przeszkoliłem sieć neuronową, a podczas treningu dane wyjściowe z ukrytych warstw podano jako dane wejściowe dla regresji logistycznej i wykreślono średnią wartość funkcji straty po dopasowaniu modelu.wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Widzimy, że wraz ze wzrostem rozmiaru warstwy cechy lub wynik ukrytych warstw stają się liniowo rozdzielalne. Podczas gdy jest to celem uczenia się kernelizowanego wektora cech , wydaje się, że sieć neuronowa robi to wewnętrznie. wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.