Jak połączyć funkcje jakościowego i ciągłego wprowadzania danych do szkolenia w sieci neuronowej

16

Załóżmy, że mamy dwa rodzaje funkcji wprowadzania danych, kategoryczne i ciągłe. Dane kategoryczne mogą być reprezentowane jako jeden kod A, natomiast dane ciągłe to po prostu wektor B w przestrzeni N-wymiarowej. Wydaje się, że samo użycie concat (A, B) nie jest dobrym wyborem, ponieważ A, B to zupełnie różne rodzaje danych. Na przykład, w przeciwieństwie do B, nie ma kolejności numerycznej w A. A zatem moje pytanie brzmi, jak połączyć takie dwa rodzaje danych lub czy istnieje jakaś konwencjonalna metoda ich obsługi.

W rzeczywistości proponuję naiwną strukturę przedstawioną na zdjęciu

wprowadź opis zdjęcia tutaj

Jak widać, kilka pierwszych warstw służy do zmiany (lub odwzorowania) danych A na jakieś środkowe dane wyjściowe w ciągłej przestrzeni, a następnie są one łączone z danymi B, które tworzą nową funkcję wprowadzania w ciągłej przestrzeni dla późniejszych warstw. Zastanawiam się, czy jest to rozsądne, czy to tylko gra typu „próbuj i popełniaj błędy”. Dziękuję Ci.

JunjieChen
źródło

Odpowiedzi:

5

Istnieją trzy główne podejścia do rozwiązania tego:

  1. Budowanie dwóch modeli osobno, a następnie szkolenie algorytmu zestawu, który odbiera dane wyjściowe z dwóch modeli jako dane wejściowe
  2. Łączenie wszystkich danych w pojedynczy wektor / tensor jako krok przetwarzania wstępnego, a następnie trenowanie prostego pojedynczego wejścia NN
  3. Zaproponowana architektura wielokrotnego wejścia NN

Podejście zespołowe jest najprostszą opcją i przyniesie przyzwoite wyniki, jednak nie będzie działać tak dobrze, jak proponowana opcja, ponieważ sieć zespołów odbiera tylko prawdopodobieństwa klasowe z dwóch sieci jako dane wejściowe i będzie w porównaniu do twojego podejście pomija bardziej złożone relacje między typami danych.

Drugie podejście teoretycznie nie różni się tak bardzo od proponowanego podejścia, z tą różnicą, że zakłada ono, że sieć sama zorientuje się, że dane wejściowe składają się z dwóch rodzajów danych (ponieważ oba są w tym samym wektorze / tensorze ). Nauczenie się sieci zajmie dużo czasu, a zanim się zdarzy, możesz utknąć w lokalnych minimach.

W oparciu o moje osobiste doświadczenia, zaproponowana przez ciebie sieć jest najlepszą opcją, ponieważ może ona mieć najkrótszy czas pociągu, a gdy już zdobędziesz odpowiednią architekturę, bardzo łatwo wyszkolisz i utrzymasz (ponownie przeszkolę) sieć w produkcji, a także będziesz musiał przekwalifikować tylko jeden model.

Tadej Magajna
źródło
0

Od dłuższego czasu korzystam z zaproponowanej przez ciebie naiwnej struktury. W przypadku dobrze sformułowanego problemu i wystarczającej ilości danych architektura tego typu działa całkiem dobrze. Oto kilka rzeczy, których się nauczyłem:

  1. Algorytmy oparte na drzewach (RF, XGB) na ogół działają dobrze z klasami mieszanymi, chyba że masz określone wymagania wyjściowe lub funkcję straty, którą łatwiej wdrożyć za pośrednictwem sieci neuronowych.
  2. Jeśli zdecydowano się na użycie sieci neuronowej, wówczas architektura ta działa lepiej w porównaniu do innych metod kodowania łańcuchów.
  3. To podejście działa również z mieszanymi wejściowymi szeregami czasowymi - znacznie lepiej niż jakiekolwiek klasyczne podejście z szeregami czasowymi.

Kluczowym projektem byłaby warstwa konkatenacji i gdzie chciałbyś umieścić ją w architekturze. Korzystanie z warstw osadzania daje dodatkowe korzyści z używania wyuczonych osadzeń w niektórych innych zadaniach / wizualizacjach.

Tego typu architektura była wykorzystywana w konkursach Kaggle [1], a także jest nauczana na kursie Fast.ai przez prof. Jeremy'ego Howarda [2].

  1. https://yashuseth.blog/2018/07/22/pytorch-neural-network-for-tabular-data-with-categorical-embeddings/
  2. https://www.fast.ai/2019/01/24/course-v3/
Soumyajit
źródło