Почему вложение вектора умножается на константу в модели трансформатора? - PullRequest
3 голосов
/ 08 июля 2019

Я учусь применять Модель преобразования , предложенная Внимание - это все, что вам нужно из официального документа tenorflow Модель трансформера для понимания языка .

Как раздел Позиционное кодирование говорит:

Поскольку эта модель не содержит повторений или сверток, добавлено позиционное кодирование, чтобы дать модели некоторую информацию о Относительное положение слов в предложении.

Вектор позиционного кодирования добавляется к вектору внедрения .

Насколько я понимаю, нужно добавить positional encoding vector непосредственно к embedding vector. Но я нашел embedding vector, умноженное на константу, когда посмотрел на код.

Код в разделе Кодер следующим образом:

class Encoder(tf.keras.layers.Layer):
  def __init__(self, num_layers, d_model, num_heads, dff, input_vocab_size, 
               rate=0.1):
    super(Encoder, self).__init__()

    self.d_model = d_model
    self.num_layers = num_layers

    self.embedding = tf.keras.layers.Embedding(input_vocab_size, d_model)
    self.pos_encoding = positional_encoding(input_vocab_size, self.d_model)


    self.enc_layers = [EncoderLayer(d_model, num_heads, dff, rate) 
                       for _ in range(num_layers)]

    self.dropout = tf.keras.layers.Dropout(rate)

  def call(self, x, training, mask):

    seq_len = tf.shape(x)[1]

    # adding embedding and position encoding.
    x = self.embedding(x)  # (batch_size, input_seq_len, d_model)
    x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32))
    x += self.pos_encoding[:, :seq_len, :]

    x = self.dropout(x, training=training)

    for i in range(self.num_layers):
      x = self.enc_layers[i](x, training, mask)

    return x  # (batch_size, input_seq_len, d_model)

Мы можем видеть x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32)) до x += self.pos_encoding[:, :seq_len, :].

Так почему же вектор вложения умножается на константу перед добавлением позиционного кодирования в модели Transformer?

...