Dla celów edukacyjnych zaimplementowałem prostą strukturę sieci neuronowej, która obsługuje tylko wielowarstwowe perceptrony i prostą propagację wsteczną. Działa dobrze w przypadku klasyfikacji liniowej i zwykle problemu XOR, ale w przypadku aproksymacji funkcji sinusa wyniki nie są zadowalające.Przybliżenie funkcji sinusoidalnej za pomocą sieci neuronowej
Zasadniczo próbuję zbliżyć się do jednego okresu funkcji sinusoidalnej z jedną ukrytą warstwą składającą się z 6-10 neuronów. Sieć wykorzystuje styczną hiperboliczną jako funkcję aktywacji ukrytej warstwy i liniową funkcję wyjścia. Wynik pozostaje dość przybliżoną oceną fali sinusoidalnej i wymaga dużo czasu, aby ją obliczyć.
Spojrzałem na encog odsyłającego ale nawet, że nie uda mi się dostać pracę z prostego wstecznej propagacji błędów (poprzez włączenie do sprężystego rozmnażania zaczyna się lepiej, ale nadal jest gorszy niż super śliskiego skryptu R przewidzianego in this similar question). Czy naprawdę próbuję zrobić coś, co nie jest możliwe? Czy nie jest możliwe przybliżenie sinusa za pomocą prostej propagacji wstecznej (bez pędu, bez dynamicznej szybkości uczenia się)? Jaka jest rzeczywista metoda używana przez bibliotekę sieci neuronowej w R?
EDIT: Wiem, że jest to zdecydowanie możliwe znaleźć dobre-wystarczająco zbliżenia nawet z prostego wstecznej propagacji błędów (jeśli jesteś bardzo szczęśliwy ze swoimi początkowymi ciężarami), ale faktycznie był bardziej zainteresowany, aby wiedzieć, czy jest to podejście jest możliwe. Skrypt R, do którego się połączyłem, wydaje się zbiegać tak niesamowicie szybko i niezawodnie (w 40 epokach z zaledwie kilkoma próbkami do nauki) w porównaniu do mojej implementacji lub nawet do propagacji sprężystości encog. Zastanawiam się tylko, czy jest coś, co mogę zrobić, aby poprawić algorytm wstecznej propagacji, aby uzyskać taką samą wydajność, czy muszę zajrzeć do bardziej zaawansowanej metody uczenia?
Czy zdarzyło Ci się, że to działa? Wobec tego samego problemu. –
Nie sądzę, ale nie pamiętam już wszystkich szczegółów, ponieważ to było 4 lata temu. Wspomniany wyżej pakiet nnet jest zaimplementowany w C i ma tylko 700 linii kodu, a następnie trochę zawijania R na nim. Być może zaglądanie w to da ci kilka pomysłów. – Muton