Shifted target IDs
×tensortargets
The target tokens one position to the right, after a padding position.
- shape
- [B batch, T target positions]
Sources
Contextual evidence from Shift right
shift_left_3d pads one position at the start and drops the last: the targets shifted right by one.
shift · tensorflow/tensor2tensor / tensor2tensor/models/common_layers.py
Pinned revision 0c66117d4297 ↗ · lines 209–215
Read code excerpt
def shift_left_3d(x, pad_value=None):
"""Shift the second dimension of x right by one."""
if pad_value is None:
shifted_targets = tf.pad(x, [[0, 0], [1, 0], [0, 0]])[:, :-1, :]
else:
shifted_targets = tf.concat([pad_value, x], axis=1)[:, :-1, :]
return shifted_targetsContextual evidence from Shift right
The decoder input is the embedded targets shifted right by one position, plus the timing signal; its self-attention bias is lower-triangular.
prepare-decoder · tensorflow/tensor2tensor / tensor2tensor/models/transformer.py
Pinned revision 0c66117d4297 ↗ · lines 109–126
Read code excerpt
def transformer_prepare_decoder(targets, hparams):
"""Prepare one shard of the model for the decoder.
Args:
targets: a Tensor.
hparams: run hyperparameters
Returns:
decoder_input: a Tensor, bottom of decoder stack
decoder_self_attention_bias: a Tensor, containing large negative values
to implement masked attention and possibly baises for diagonal alignments
"""
decoder_self_attention_bias = (
common_attention.attention_bias_lower_triangle(tf.shape(targets)[1]))
decoder_input = common_layers.shift_left_3d(targets)
if hparams.pos == "timing":
decoder_input = common_attention.add_timing_signal_1d(decoder_input)
return (decoder_input, decoder_self_attention_bias)Contextual evidence from Token embedding
Embedding: gather rows of the table, multiply by √depth, zero the padding id 0; with shared weights, inputs and targets read the same table.
symbol-bottom · tensorflow/tensor2tensor / tensor2tensor/models/modalities.py
Pinned revision 0c66117d4297 ↗ · lines 75–96
Read code excerpt
def bottom_simple(self, x, name, reuse):
with tf.variable_scope(name, reuse=reuse):
# Squeeze out the channels dimension.
x = tf.squeeze(x, axis=3)
var = self._get_weights()
ret = tf.gather(var, x)
if self._model_hparams.multiply_embedding_mode == "sqrt_depth":
ret *= self._body_input_depth**0.5
ret *= tf.expand_dims(tf.to_float(tf.not_equal(x, 0)), -1)
return ret
def bottom(self, x):
if self._model_hparams.shared_embedding_and_softmax_weights:
return self.bottom_simple(x, "shared", reuse=None)
else:
return self.bottom_simple(x, "input_emb", reuse=None)
def targets_bottom(self, x):
if self._model_hparams.shared_embedding_and_softmax_weights:
return self.bottom_simple(x, "shared", reuse=True)
else:
return self.bottom_simple(x, "target_emb", reuse=None)Contextual evidence from Token embedding
The symbol table: vocab_size × depth, built from num_shards shards and concatenated.
symbol-weights · tensorflow/tensor2tensor / tensor2tensor/models/modalities.py
Pinned revision 0c66117d4297 ↗ · lines 51–73
Read code excerpt
def _get_weights(self):
"""Create or get concatenated embedding or softmax variable.
Returns:
a list of self._num_shards Tensors.
"""
num_shards = self._model_hparams.symbol_modality_num_shards
shards = []
for i in xrange(num_shards):
shard_size = (self._vocab_size // num_shards) + (
1 if i < self._vocab_size % num_shards else 0)
var_name = "weights_%d" % i
shards.append(
tf.get_variable(
var_name, [shard_size, self._body_input_depth],
initializer=tf.random_normal_initializer(
0.0, self._body_input_depth**-0.5)))
if num_shards == 1:
ret = shards[0]
else:
ret = tf.concat(shards, 0)
ret = eu.ConvertGradientToTensor(ret)
return retContextual evidence from Token embedding
Defaults the models inherit: embeddings are multiplied by √depth; the symbol table is stored in 16 shards.
hparams-common · tensorflow/tensor2tensor / tensor2tensor/models/common_hparams.py
Pinned revision 0c66117d4297 ↗ · lines 68–71
Read code excerpt
multiply_embedding_mode="sqrt_depth",
norm_type="none", # "batch", layer", "noam", "none".
layer_norm_epsilon=1e-6,
symbol_modality_num_shards=16,