Właśnie przeczytałem artykuł Geoffa Hintona na temat transformacji autoencoderów
Hinton, Krizhevsky i Wang: Transforming Auto- encoders . W sztucznych sieciach neuronowych i uczeniu maszynowym, 2011.
i chciałbym się bawić z czymś takim. Ale po przeczytaniu nie mogłem uzyskać wystarczającej ilości szczegółów z gazety na temat tego, jak mogę to w rzeczywistości wdrożyć.
- Czy ktoś wie, jak powinno działać mapowanie między pikselami wejściowymi a kapsułkami?
- Co dokładnie powinno się dziać w jednostkach rozpoznających?
- Jak należy go szkolić? Czy to tylko standardowa tylna podpora między każdym połączeniem?
Jeszcze lepszy byłby link do jakiegoś kodu źródłowego dla tego lub czegoś podobnego.
neural-network
deep-learning
autoencoder
Daniel Slater
źródło
źródło
Odpowiedzi:
I już ułożyła jakiś kod przykład tensorflow aby pomóc wyjaśnić (pełny kod pracy jest w tym GIST ). Ten kod implementuje sieć kapsuł z pierwszej części sekcji 2 w dokumencie, który połączyłeś:
To zależy od struktury sieci. W pierwszym eksperymencie w tym artykule (i powyższym kodzie) każda kapsułka ma pole odbiorcze, które obejmuje cały obraz wejściowy. To najprostszy układ. W takim przypadku jest to w pełni połączona warstwa między obrazem wejściowym a pierwszą ukrytą warstwą w każdej kapsułce.
Alternatywnie, pola recepcyjne kapsułki można ułożyć bardziej jak jądra CNN z krokami, jak w późniejszych eksperymentach w tym artykule.
Jednostki rozpoznające są wewnętrzną reprezentacją każdej kapsułki. Każda kapsułka wykorzystuje tę wewnętrzną reprezentację do obliczenia
p
, prawdopodobieństwa obecności funkcji kapsułki ixy
wywnioskowanych wartości translacji. Ryc. 2 w tym dokumencie to sprawdzenie, czy sieć uczy się obsługiwaćxy
poprawnie (tak jest).W szczególności powinieneś trenować go jako autoencoder, używając straty, która wymusza podobieństwo między generowanym wyjściem a oryginałem. Średni błąd kwadratowy działa tutaj dobrze. Poza tym tak, musisz propagować opadanie gradientu za pomocą backprop.
źródło