Die Keras-Dokumentation ist nicht klar, was dies tatsächlich ist. Ich verstehe, dass wir dies verwenden können, um den Eingabe-Feature-Bereich in einen kleineren zu komprimieren. Aber wie geht das aus neuronaler Sicht? Ist es ein Autoenocder, RBM?
97
Antworten:
Soweit ich weiß, ist die Einbettungsschicht eine einfache Matrixmultiplikation, die Wörter in ihre entsprechenden Worteinbettungen umwandelt.
Die Gewichte der Einbettungsebene haben die Form (Vokabulargröße, Einbettungsdimension). Für jedes Trainingsmuster sind seine Eingaben Ganzzahlen, die bestimmte Wörter darstellen. Die ganzen Zahlen liegen im Bereich der Vokabulargröße. Die Einbettungsschicht transformiert jede ganze Zahl i in die i-te Zeile der Einbettungsgewichtungsmatrix.
Um dies schnell als Matrixmultiplikation zu tun, werden die Eingabe-Ganzzahlen nicht als Liste von Ganzzahlen, sondern als One-Hot-Matrix gespeichert. Daher ist die Eingabeform (nb_words, vocabulary_size) mit einem Wert ungleich Null pro Zeile. Wenn Sie dies mit den Einbettungsgewichten multiplizieren, erhalten Sie die Ausgabe in der Form
Mit einer einfachen Matrixmultiplikation transformieren Sie also alle Wörter in einem Beispiel in die entsprechenden Worteinbettungen.
quelle
Die
Keras
Embedding
Schicht führt keine Matrixmultiplikation durch, sondern nur:1. Erstellt eine Gewichtsmatrix mit (Vokabulargröße) x (Einbettungsdimension) Dimensionen
2. indiziert diese Gewichtsmatrix
Es ist immer nützlich, einen Blick auf den Quellcode zu werfen, um zu verstehen, was eine Klasse tut. In diesem Fall sehen wir uns die
class
Einbettung an, die von der Basisschichtclass
namens Layer erbt .(1) - Erstellen einer Gewichtsmatrix mit (Vokabulargröße) x (Einbettungsdimension) Dimensionen:
Dies geschieht bei der
build
Funktion des Einbetten :Wenn Sie sich die Basisklasse Layer ansehen, werden Sie sehen, dass die
add_weight
obige Funktion einfach eine Matrix trainierbarer Gewichte erstellt (in diesem Fall von (vocabulary_size) x (embeddedding_dimension) Dimensionen):(2) - Indizierung dieser Gewichtsmatrix
Dies geschieht bei der
call
Funktion des Einbetten :Diese Funktion gibt die Ausgabe der
Embedding
Ebene zurück, die istK.gather(self.embeddings, inputs)
. Was tf.keras.backend.gather genau tut, ist die Indizierung der Gewichtungsmatrixself.embeddings
(siehebuild
Funktion oben) gemäß derinputs
Liste der positiven ganzen Zahlen.Diese Listen können beispielsweise abgerufen werden, wenn Sie Ihre Text- / Worteingaben an die one_hot- Funktion von Keras übergeben, die einen Text in eine Liste von Wortindizes der Größe n codiert (dies ist KEINE Hot-Codierung - siehe auch dieses Beispiel für weitere Informationen: https://machinelearningmastery.com/use-word-embedding-layers-deep-learning-keras/ ).
Das ist also alles. Es gibt keine Matrixmultiplikation.
Im Gegenteil, die
Keras
Embedding
Schicht ist nur deshalb nützlich, weil sie genau die Durchführung einer Matrixmultiplikation vermeidet und daher einige Rechenressourcen spart.Andernfalls können Sie einfach eine
Keras
dichte Ebene verwenden (nachdem Sie Ihre Eingabedaten codiert haben), um eine Matrix trainierbarer Gewichte (mit (Vokabulargröße) x (Einbettungsdimension) Dimensionen zu erhalten) und dann einfach die Multiplikation durchführen, um die Ausgabe zu erhalten, die genau ist das gleiche mit der Ausgabe derEmbedding
Ebene.quelle
Um eine Funktion besser zu verstehen, ist es eine gute Angewohnheit, sich den Quellcode anzusehen. Hier ist für das Einbetten. Im Grunde ist es also ein trainierbarer Nachschlagetisch.
quelle
In Keras ist die
Embedding
Ebene KEINE einfache Matrixmultiplikationsschicht, sondern eine Nachschlagetabellenebene (siehe Aufruffunktion unten oder die ursprüngliche Definition ).Was sie tut , ist jeweils eine bekannte ganze Zahl ist zur Karte
n
ininputs
zu einem trainierbar MerkmalsvektorW[n]
, deren Dimension ist die sogenannte eingebettete Feature - Länge.quelle
Embedding
Schicht ist also tatsächlich eine Matrixmultiplikation.In einfachen Worten (aus Sicht der Funktionalität) handelt es sich um einen One-Hot-Encoder und eine vollständig verbundene Schicht . Die Schichtgewichte sind trainierbar.
quelle