Könnte nicht die Antwort sein, die Sie suchen, aber ich werde es trotzdem versuchen:
Nehmen wir zunächst eine kurze Überprüfung von word2Vec an. Nehmen wir an, wir verwenden das Sprunggramm.
Ein typisches trainierbares Word2Vec-Modell besteht aus 1 Eingabeschicht (z. B. 10 000 langer One-Hot-Vektor), einer verborgenen Schicht (z. B. 300 Neuronen) und einer Ausgabe (10 000 langen One-Hot-Vektor).
- Eingabe: 10 000
- Versteckt: 300
- Ausgabe: 10 000
Zwischen Input-Hidden befindet sich eine Matrix E , die die Gewichte beschreibt, mit denen Sie Ihre Einbettung in eine Einbettung verwandeln können. Die Matrix ist etwas Besonderes, da jede Spalte (oder Zeile, abhängig von Ihrer bevorzugten Notation) Voraktivierungen in diesen 300 Neuronen darstellt - eine Antwort auf einen entsprechenden eingehenden 1-Hot-Vektor.
Sie müssen diese 300 Neuronen nicht aktivieren und können ihre Werte sofort als Einbettung in zukünftige Aufgaben verwenden.
Es reicht jedoch nicht aus, ein One-Hot in eine 300-dimensionale Darstellung zu quetschen - es muss eine Bedeutung haben. Und wir stellen sicher, dass diese Bedeutung korrekt ist, indem wir eine zusätzliche zweite Matrix verwenden, die Hidden mit Output verbindet
Wir möchten keine versteckte Ebene aktivieren, da die Aktivierungsfunktion zur Laufzeit nicht benötigt wird. In diesem Fall benötigen wir jedoch eine zweite Matrix, die von Versteckt zu Ausgabe wechselt.
Diese zweite Matrix macht eine ganz andere Matrix als Ihre Einbettung. Solch ein One-Hot stellt ein wahrscheinlichstes Wort dar, das sich (kontextuell) in der Nähe Ihres ursprünglichen One-Hot befindet. Mit anderen Worten, diese Ausgabe ist nicht Ihre ursprüngliche Ausgabe.
Deshalb wird eine zweite Matrix benötigt. Am Ausgang führen wir einen Softmax durch, wie bei einem Klassifizierungsproblem.
Dies ermöglicht es uns, eine Beziehung "Wort" -> Einbetten -> "Kontext-Nachbar-Wort" auszudrücken.
Jetzt kann eine Backpropagation durchgeführt werden, um die eingegebenen verborgenen Gewichte (Ihre erste Matrix E) zu korrigieren - dies sind die Gewichte, die uns wirklich wichtig sind. Das liegt daran, dass Matrix E während der Laufzeit verwendet werden kann (glaube ich) und möglicherweise als erste vollständig verbundene Schicht in ein wiederkehrendes neuronales Netz eingesteckt wird.
In diesem Fall würden Sie dies nicht verwenden:
Sie müssen diese 300 Neuronen nicht aktivieren und können ihre Werte sofort als Einbettung in zukünftige Aufgaben verwenden
Stattdessen würden Sie während der Laufzeit einfach die entsprechende Spalte (oder Zeile, abhängig von Ihrer bevorzugten Notation) aus dieser Matrix abrufen. Der Vorteil ist, dass Sie auf diese Weise eine sehr kostengünstige, vorab trainierte, vollständig verbundene Schicht erhalten, die für die Arbeit mit One-Hots ausgelegt ist. Normalerweise sind die ersten Schichten aufgrund des Problems des verschwindenden Gradienten am längsten zu trainieren.
Warum während des Trainings eine zweite Matrix benötigt wird:
Denken Sie noch einmal daran, dass auf der verborgenen Ebene keine Aktivierung erfolgt.
Wir können dem Netzwerk vorschreiben, was "one-hot" als Antwort auf Ihre ursprüngliche "Eingabe one-hot" erstellt worden sein muss, und das Netzwerk bestrafen, wenn es keine korrekte Antwort generiert.
Wir können Softmax nicht direkt nach der verborgenen Ebene einfügen, da wir daran interessiert sind, einen Mechanismus zur Umwandlung in eine Einbettung zu beschwören. Das liegt bereits in der Verantwortung einer ersten Matrix E. Daher benötigen wir einen zusätzlichen Schritt (eine zusätzliche Matrix), der uns genügend Raum gibt, um jetzt auf der Ausgabeschicht eine Schlussfolgerung über ein anderes, aber ähnliches (kontextbezogenes) Nachbarwort zu ziehen
Während der Laufzeit werfen Sie die zweite Matrix weg. Löschen Sie es jedoch nicht dauerhaft, falls Sie zurückkommen und Ihr Modell weiter trainieren müssen.