Debugowanie sieci neuronowych zwykle obejmuje modyfikowanie hiperparametrów, wizualizację wyuczonych filtrów i wykreślanie ważnych metryk. Czy możesz udostępnić jakich hiperparametrów używałeś?
- Jaki jest twój rozmiar partii?
- Jaki jest twój wskaźnik uczenia się?
- Jakiego rodzaju autoencodera używasz?
- Czy próbowałeś użyć Denoising Autoencoder? (Jakie wartości korupcji próbowałeś?)
- Ile ukrytych warstw i jakiego rozmiaru?
- Jakie są wymiary twoich obrazów wejściowych?
Przydatna jest także analiza dzienników treningowych. Narysuj wykres utraty rekonstrukcji (oś Y) jako funkcję epoki (oś X). Czy Twoja utrata rekonstrukcji jest zbieżna czy rozbieżna?
Oto przykład autoencodera do klasyfikacji płci ludzkiej, który był rozbieżny, został zatrzymany po 1500 epokach, dostrojony hiperparametrami (w tym przypadku zmniejszenie szybkości uczenia się) i ponownie uruchomiony z tymi samymi wagami, które były rozbieżne i ostatecznie zbiegły się.
Oto jeden, który jest zbieżny: (chcemy tego)
Waniliowy „nieograniczony” może napotkać problem, w którym po prostu uczy się mapowania tożsamości. To jeden z powodów, dla których społeczność stworzyła smaki denoisingowe, rzadkie i skurczowe.
Czy możesz tutaj opublikować niewielki podzbiór swoich danych? Byłbym bardziej niż chętny, aby pokazać wam wyniki jednego z moich autoencoderów.
Na marginesie: możesz zadać sobie pytanie, dlaczego używasz obrazów wykresów, skoro wykresy te można łatwo przedstawić jako wektor danych. To znaczy,
[0, 13, 15, 11, 2, 9, 6, 5]
Jeśli jesteś w stanie przeformułować problem jak wyżej, zasadniczo ułatwiasz życie auto-enkodera. Najpierw nie musi nauczyć się widzieć obrazów, zanim będzie mógł spróbować nauczyć się generowania rozkładu.
Odpowiedź uzupełniająca (biorąc pod uwagę dane).
Oto filtry z 1000 ukrytych jednostek, jednowarstwowego autokodera odszumiającego. Zauważ, że niektóre filtry są pozornie losowe. To dlatego, że tak wcześnie przestałem trenować, a sieć nie miała czasu na naukę tych filtrów.
Oto hiperparametry, z którymi trenowałem:
batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2
Po 58. epoce przestałem ćwiczyć przed treningiem, ponieważ filtry były wystarczająco dobre, aby opublikować tutaj. Gdybym był tobą, na początek wyszkoliłbym pełny 3-warstwowy skumulowany autoencoder denoisingowy o architekturze 1000 x 1000 x 1000.
Oto wyniki z kroku dostrajającego:
validation error 24.15 percent
test error 24.15 percent
Na pierwszy rzut oka wydaje się to lepsze niż przypadek, jednak gdy przyjrzymy się podziałowi danych między dwiema etykietami, widzimy, że ma on dokładnie taki sam procent (75,85% rentowności i 24,15% nierentowności). Oznacza to, że sieć nauczyła się po prostu reagować „opłacalnie”, niezależnie od sygnału. Prawdopodobnie trenowałbym to przez dłuższy czas z większą siecią, aby zobaczyć, co się stanie. Wygląda również na to, że dane te są generowane z pewnego rodzaju bazowego zestawu danych finansowych. Polecam zajrzeć do Rekurencyjnych Sieci Neuronowych po przeformułowaniu problemu na wektory, jak opisano powyżej. RNN mogą pomóc uchwycić niektóre zależności czasowe występujące w danych typu timeseries, takich jak ten. Mam nadzieję że to pomoże.