Witam,
- Mam prostą sieć neuronową, z jedną warstwą ukrytą oraz z zaimplementowanym algorytmem wstecznej propagacji.
W jaki sposób wyświetlić które krawędzie dany neuron w warstwie ukrytej rozpoznaje (chce to zwizualizować aby wiedzieć jakich cech się uczą), dokładnie tak jak jest w artykule podanym poniżej, na stronie 17:
http://web.stanford.edu/class/cs294a/sparseAutoencoder.pdf
Nie do końca rozumiem ten wzór dobrze zaimplementowałem, aktualnie rozumiem że jeden piksel w danym neuronie ukrytym jest to dana waga wejścia podzielona przez pierwiastek sumy kwadratów wszystkich wejść do tego neurony. Jednak piksele te prezentują u mnie losowo rozmieszczone piksele na obrazku.
-
Kolejny problem z jakim się borykam jest to zrozumienie wzoru na "pi" w Sparse Autoencoder na stronie 14 w tym samym artykule.
Implementowałem to na różne sposoby jednak nie jestem pewien czy którykolwiek był dobry, nie dokładnie rozumiem co oznacza wartość "m" oraz część zawierająca się w nawiasach kwadratowych. -
Ostatnimi problemami jest określanie wag oraz błędów w Autoencoder, aktualnie mam sieć w postaci 784x500x784,
jest to sieć rozpoznająca liczby z bazy MNIST pierwsza część jest to encoder a druga decoder, sieć uczy się zwykłym wzorem wstecznej propagacji błędu na wyjściach otrzymuje ładne zrekonstruowane zdjęcia jednak nie jestem do końca pewien czy warstwa ukryta poprawnie się uczy. Dodając elementy wzorów z podanego artykułu nie do końca jest już tak pięknie, zdjęcia się krzaczą. I tutaj tez mam kilka pytań:
a. czy wagi w warstwie dekodera są transformacją wag z warstwy encodera tylko raz na początku sieci czy w każdym cyklu nauczania? (gdy ustawiam mapowanie wag z pierwszej warstwy na każdy cykl nauczania sieć dziwnie się zachowuje)
b. czy błąd w ostatniej może być to różnica wartości oczekiwanej między wartością wyjściowa danego neuronu? Czy w przypadku Autoencodera musi to być specjalny wzór?
c. Czy błąd w warstwie ukrytej obliczamy stosując drugi wzór na stronie 16. czy ten z logarytmami?
(Ja to odbieram tak, że ten z logarytmami jest do obliczenia całkowitego kosztu sieci a ten bez do obliczenia blędu dla neuronow w warstwie ukrytej jednak tak czy inaczej nie wiem czy poprawnie to działa)
Jak mówie testowałem sieć na różne sposoby z rożnymi wzorami. Jednak mam w głowie za dużo niewiadomych, po części rozumiem sieci jednak mam problem z autoencoderem. Stosując zwykłe backpropagation bez żadnych dodatkowych wzorów, boję się o to że warstwa ukryta nie uczy się poprawnie, a jedynie na wyjściach otrzymuje ładne rekonstrukcje zdjęć. Wizualizacja krawędzi warstwy ukrytej według artykułu w moim przypadku nie działa w żaden sposób i nie wiem co robię źle.
Z góry dziękuje za każdą choćby najmniejszą pomoc ;)