Czytałem książkę Yoshua Bengio o głębokim uczeniu się i na stronie 224 napisano:
Sieci splotowe to po prostu sieci neuronowe, które używają splotu zamiast ogólnego mnożenia macierzy w co najmniej jednej z ich warstw.
nie byłem jednak w 100% pewien, jak „zastąpić mnożenie macierzy splotem” w matematycznie precyzyjnym sensie.
To, co naprawdę mnie interesuje, to zdefiniowanie tego dla wektorów wejściowych w 1D (jak w ), więc nie będę mieć danych wejściowych jako obrazów i staram się unikać splotu w 2D.
Na przykład w „normalnych” sieciach neuronowych operacje i wzór totemów żywieniowych można zwięźle wyrazić, jak w notatkach Andrew Ng:
f ( z ( l + 1 ) ) = a ( l + 1 )
gdzie jest wektorem obliczonym przed przepuszczeniem go przez nieliniowość . Nieliniowość działa na wejście wektora a jest wyjściem / aktywacją ukrytych jednostek dla danej warstwy. f z ( l ) a ( l + 1 )
To obliczenie jest dla mnie jasne, ponieważ mnożenie macierzy jest dla mnie jasno określone, jednak samo zastąpienie mnożenia macierzy przez splot wydaje mi się niejasne. to znaczy
f ( z ( l + 1 ) ) = a ( l + 1 )
Chcę się upewnić, że dokładnie rozumiem powyższe równanie matematycznie.
Pierwszym problemem, jaki mam po prostu zastępując mnożenie macierzy splotem, jest to, że zwykle jeden wiersz jest iloczynem kropkowym. Tak więc wyraźnie wiadomo, jak całość odnosi się do wag, a to odwzorowuje na wektor wymiaru, jak wskazano przez . Kiedy jednak zamienia się go na zwoje, nie jest dla mnie jasne, który wiersz lub wagi odpowiada, które wpisy w . Nie jest nawet dla mnie jasne, czy sensowne jest już przedstawianie wag jako macierzy (podam przykład, aby wyjaśnić ten punkt później) a ( l ) z ( l + 1 ) W ( l ) a ( l )
W przypadku, gdy wszystkie wejścia i wyjścia są w 1D, czy po prostu oblicza się splot zgodnie z jego definicją, a następnie przepuszcza go przez osobliwość?
Na przykład, jeśli jako dane wejściowe mieliśmy następujący wektor:
i mieliśmy następujące wagi (być może nauczyliśmy się tego z backprop):
to splot jest:
czy poprawne byłoby po prostu przejście przez nieliniowość i potraktowanie wyniku jako ukrytej warstwy / reprezentacji (zakładając, że na chwilę obecną nie ma puli )? tj. w następujący sposób:
( myślę, że samouczek UDLF Stanforda przycina krawędzie, w których splot konwertuje się z zer z jakiegoś powodu, czy musimy to przycinać?)
Czy tak to powinno działać? Przynajmniej dla wektora wejściowego w 1D? Czy nie jest już wektorem?
Narysowałem nawet sieć neuronową, jak to ma wyglądać, jak sądzę:
źródło
xcorr(x, y) = conv(x, fliplr(y))
. Społeczność NN ma tendencję do mówienia o konwolucji, kiedy faktycznie dokonuje korelacji krzyżowej, ale jest całkiem podobna.