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 , do wejścia o wyższym wymiarze, wektora w dla . W przypadku wielowarstwowych sieci neuronowych inną alternatywą byłoby zastosowanie funkcji jądra na każdym poziomie sieci neuronowej).
Odpowiedzi:
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.
źródło
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,…,xn∈Rd być 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ćxi⋅xj dla 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ϕ:Rd→Rm (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ścixi⋅xj (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.
źródło
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.
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.
źródło