Wie die Einbettungsschicht in der Keras-Einbettungsschicht trainiert wird

8

Wie wird die Einbettungsschicht in der Keras-Einbettungsschicht trainiert? (Sagen wir, wir verwenden das Tensorflow-Backend, was bedeutet, dass es word2vec, Glove oder Fasttext ähnelt.)

Angenommen, wir verwenden keine vorab trainierte Einbettung.

william007
quelle

Antworten:

6

Beide Antworten sind falsch.

Eine Einbettungsschicht ist eine trainierbare Schicht, die eine zweidimensionale Einbettungsmatrix enthält, in einer Achse die Anzahl der eindeutigen Werte, die die kategoriale Eingabe annehmen kann (z. B. 26 im Fall eines Kleinbuchstabenalphabets), und auf der anderen Achse die Dimensionalität Ihres Einbettungsraums. Die Rolle der Einbettungsschicht besteht darin, eine Kategorie in einem dichten Raum so zuzuordnen, dass sie für die jeweilige Aufgabe nützlich ist, zumindest für eine überwachte Aufgabe. Dies bedeutet normalerweise, dass die Einbettungsvektoren einen gewissen semantischen Wert haben und dass Kategorien, die sich in diesem Bereich befinden, eine enge Bedeutung für die Aufgabe haben.

Dies hängt mit der One-Hot-Codierung in dem Sinne zusammen, dass eine diskrete Kategorie einer Vektormerkmalsdarstellung zugeordnet wird. Sie könnten dies immer noch für ein neuronales Netzwerk tun, aber wenn Sie dies in einer dichten Schicht verwenden, würden Sie eine enorme Menge an Gewichten erstellen, von denen die meisten nicht regelmäßig verwendet werden. Wenn Sie eine Einbettungsebene dazwischen legen, wird die Anzahl der lernbaren Gewichte reduziert, bevor Sie sie füttern, um mit anderen Teilen Ihrer Eingabe zu interagieren. Ein weiterer Vorteil besteht darin, dass die Einbettungsmatrix im Wesentlichen als Nachschlagetabelle fungiert, sodass Sie die Sparsamkeit des Index Ihrer Kategorie wirklich nutzen können, um den aktuellen Wert der Einbettung zu ermitteln und beim Anwenden von Backpropagating nur diesen Eintrag der Gewichtsmatrix anzupassen .

http://colah.github.io/posts/2014-07-NLP-RNNs-Representations -> In diesem Blogbeitrag wird klar erläutert, wie die Einbettungsebene in der Keras-Einbettungsebene trainiert wird. Hoffe das hilft.

Jan van der Vegt
quelle
Endlich eine gute Antwort, danke. Wir könnten hinzufügen, dass Word2Vec als Sprachmodellierungsziel trainiert wurde, was es von Einbettungen unterscheidet, die für eine bestimmte Aufgabe trainiert wurden, wie Sie sagten.
Elliot
0

Soweit ich weiß, handelt es sich um einen einfachen Autoencoder, was bedeutet, dass nur versucht wird, die Eingabe in einen anderen Raum abzubilden, also kein ausgefallenes Training, sondern nur ein einfaches Feed-Forward und Backprop. Deshalb ist es ziemlich schnell zu trainieren.

Wenn Sie vorab trainierte Einbettungen verwenden möchten, können Sie dies auf diese Weise tun

Valentin Calomme
quelle
Ein Autoencoder ist ein Modell, das sich selbst vorhersagt. Ist es das, was du meintest?
Kbrose
In der Tat, damit Sie es als neuronales Netz mit einer einzigen verborgenen Schicht betrachten können und wo die Eingabe und Ausgabe identisch sind, bin ich nicht sicher, ob Keras es verwendet, aber angesichts der Geschwindigkeit und der Dokumentation würde ich das eher denken Weg
Valentin Calomme
Die Einbettungsschicht selbst macht das nicht. Es wird nur jedem eindeutigen Integer-Eingang ein Vektor zugewiesen. Sie können ein Modell für die automatische Codierung erstellen, um die Einbettungen zu trainieren, aber es ist nicht Teil der Einbettungsebene.
Kbrose
Ich war verwirrt, weil Ihre Antwort meinem Verständnis der Funktionsweise der Einbettungsschicht entspricht, abgesehen davon, dass sie als "Autoencoder" bezeichnet wird.
Kbrose
0

Die Einbettungsschicht verwendet eine Einbettungsmatrix zum Zuordnen von Daten und wird während des Trainings niemals aktualisiert . In der Ebene "Keras-Einbettung" sind keine trainierbaren Parameter vorhanden. Sie können die verweisen Keras Einbettungsschicht docs für ein detailliertes Verständnis.

thanatoz
quelle