Permutationsinvariante neuronale Netze

14

Gegeben ist ein neuronales Netz f , das n Datenpunkte als Eingabe nimmt : x1,,xn . Wir sagen, f ist eine Permutationsinvariante wenn

f(x1...xn)=f(pi(x1...xn))

für jede Permutation pi .

Könnte jemand einen Ausgangspunkt (Artikel, Beispiel oder anderes Papier) für die Permutation invarianter neuronaler Netze empfehlen?

Josef Ondrej
quelle
Interessante Frage. Sie möchten Ihre Eingaben als Menge und nicht als Vektor behandeln. Unter der Annahme, dass Ihre Eingaben skalar oder auf andere Weise vergleichbar sind, haben Sie überlegt, Ihre Eingaben zu sortieren, um eine permutationsinvariante kanonische Darstellung zu erstellen, und diese einem regulären Netzwerk zuzuführen?
4.
@mjul Meine Eingaben sind eine Reihe von Wetten von Kunden (jede Wette wird durch einen Vektor einiger kathegorischer und kontinuierlicher Variablen dargestellt). Ich könnte sie zum Beispiel chronologisch sortieren, aber da der zeitliche Abstand zwischen den Einsätzen für jeden Kunden sehr unterschiedlich ist, würde dies keinen Sinn ergeben. Dies könnte wahrscheinlich durch eine (festgelegte oder erlernte) Zeitfunktion gelöst werden, die die Koeffizienten für jede Wette verringert. Aber ich denke, die Reihenfolge spielt in diesem Fall wirklich keine Rolle, deshalb wollte ich zuerst ungeordnete Daten ausprobieren, was natürlich erfordert, die Wetten für jeden Kunden symmetrisch zu behandeln.
Josef Ondrej
Was ist die Netzwerkausgabe? Wenn das Netzwerk permutationsinvariant ist, ist die Ausgabe für jede Reihenfolge von Eingaben gleich. Ist das was du willst?
BlueMoon93
@ BlueMoon93 Ja, das ist genau das, was ich will. Die Ausgabe kann beliebig sein (Zahl, Vektor), solange dies nicht von der Reihenfolge der Eingaben abhängt.
Josef Ondrej
Warum möchten Sie ein permutationsinvariantes neuronales Netzwerk?
kc sayz 'kc sayz'

Antworten:

2

Soweit ich weiß, hat dies aufgrund der Struktur des Netzwerks noch niemand versucht. Jeder Eingang verfügt über eine Reihe von Gewichten, die mit mehreren Eingängen verbunden sind. Wenn die Eingänge umschalten, wird auch der Ausgang .

Sie können jedoch ein Netzwerk erstellen, das sich diesem Verhalten nähert. Verwenden Sie in Ihrem Trainingssatz Batch-Lernen und geben Sie für jede Trainingsprobe alle möglichen Permutationen an das Netzwerk, sodass es lernt, permutationsinvariant zu sein. Dies wird niemals genau unveränderlich sein, es könnte nur nahe sein .

Eine andere Möglichkeit besteht darin, die Gewichte für alle Eingaben replizieren zu lassen. Angenommen, Sie haben 3 Eingänge (i0, i1, i2) und die nächste ausgeblendete Ebene verfügt über 2 Knoten (hl0, hl1) und die Aktivierungsfunktion F. Bei einer vollständig verbundenen Ebene haben Sie 2 Gewichte w0 und w1. Die Knoten h10 und h11 der verborgenen Schicht sind jeweils gegeben durch

  • hl0 = F (i0w0 + i1w0 + i2w0)

  • hl1 = F (i0w1 + i1w1 + i2w1)

Auf diese Weise erhalten Sie eine ausgeblendete Ebene, deren Werte von der Eingabe nicht abweichen. Von nun an können Sie den Rest des Netzwerks nach Belieben erlernen und aufbauen. Dies ist ein aus Faltungsschichten abgeleiteter Ansatz.


Off-Topic scheint dies ein cooles Projekt zu sein. Wenn Sie an einem Forschungsprojekt mitarbeiten möchten, setzen Sie sich mit mir in Verbindung (siehe mein Profil)

BlueMoon93
quelle
Der erste vorgeschlagene Ansatz wäre in meinem Fall aufgrund des Rechenaufwands nicht durchführbar. Die zweite scheint vielleicht zu restriktiv. Aber es ist sicherlich ein guter Anfang. Bisher habe ich mir einen ähnlichen Ansatz ausgedacht wie in diesem Artikel: arxiv.org/pdf/1612.04530.pdf . Zuerst betrachte ich alle Paare (im Allgemeinen alle k-Tupel) der Eingänge x_i, x_j, i, j in 0 ... n und wende auf alle ein neuronales Netzwerk an (auf jedes Paar das gleiche nn). Dies gibt mir n ** 2 Ausgaben f (x_i, x_j) und dann mittle ich sie (oder nehme ein Maximum) und wende eine Anmerkung nn über das Ergebnis an.
Josef Ondrej
Das habe ich mir bisher ausgedacht : github.com/josefondrej/Symmetric-Layers
Josef Ondrej
3

Ich habe Permutational Layer hier mit Keras implementiert: https://github.com/off99555/superkeras/blob/master/permutational_layer.py

Sie können die PermutationalModuleFunktion aufrufen , um sie zu verwenden.

Implementiert gemäß diesem Dokument: https://arxiv.org/pdf/1612.04530.pdf

Die Idee ist, alle Paare von N ^ 2 Paaren von N Eingängen zu vergleichen, das Modell mit gemeinsamen Gewichten zu verwenden und dann die Pooling-Funktion N- mal für N Eingänge zu verwenden. Die Ausgabe, die Sie wieder zusammenfassen können, aber in der Zeitung erwähnen sie kein anderes Zusammenfassen.

off99555
quelle