ich unten an this sample code
im Code-Schnipsel am referreing:tensorflow basic word2vec Beispiel: Sollten wir keine Gewichte [nce_weight Transpose] für die Darstellung und nicht die Einbettungsmatrix verwenden?
embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_inputs)
# Construct the variables for the NCE loss
nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size],stddev=1.0/math.sqrt(embedding_size)))
nce_biases = tf.Variable(tf.zeros([vocabulary_size]))
loss = tf.reduce_mean(
tf.nn.nce_loss(weights=nce_weights,
biases=nce_biases,
labels=train_labels,
inputs=embed,
num_sampled=num_sampled,
num_classes=vocabulary_size))
optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss)
Jetzt NCE_Loss Funktion ist nichts anderes als eine einzelne verborgene Schicht neuronales Netz mit softmax an der optput Schicht [zu wissen, ist dauert nur wenige negative Probe]
Dieser Teil des Diagramms wird nur die Gewichte des Netzwerks aktualisieren, es tut nichts zur "embeddings" Matrix/Tensor.
also ideal sobald das Netzwerk trainiert ist, müssen wir es wieder einmal durch die embeddings_matrix durchlaufen und dann mit der Transponierung der "nce_weights" multiplizieren [bedenkt es als den gleichen Gewicht Auto-Encoder, am Eingang & Ausgabeschichten] zu erreichen Sie die verborgene Layer-Darstellung jedes Wortes, das wir nennen word2vec (?)
Aber wenn Sie auf den späteren Teil des Codes schauen, wird der Wert der embeddings
Matrix eine Wortdarstellung verwendet. This
Auch die tensorflow doc for NCE loss erwähnt Eingang (auf die wir embed
, sind vorbei, die embeddings
verwendet) Aktivierungswerte als nur die erste Schicht Eingang.
inputs: A Tensor of shape [batch_size, dim]. The forward activations of the input network.
Eine normale Backpropagation stoppt an der ersten Schicht des Netzes, diese Implementierung von NCE Verlust der Fall ist, geht darüber hinaus und breitet sich um den Verlust an die Eingangswerte (und damit zu dem Einbettungs)?
Dies scheint ein zusätzlicher Schritt? Refer this für warum ich es einen zusätzlichen Schritt nenne, hat er die gleiche Erklärung.