code: def DecoderLayer(feature_depth,
                   feedforward_depth,
                   num_heads,
                   dropout,
                   mode):
    
    return layers.Serial(
        layers.Residual(  # Self-attention block.
            layers.LayerNorm(),
            layers.Branch(),
            layers.Parallel(layers.Identity(),  # activation for (q, k, v)
                            layers.CausalMask(axis=-2)),  # attention mask
            layers.MultiHeadedAttention(feature_depth, num_heads=num_heads,
                                        dropout=dropout, mode=mode),
            layers.Dropout(rate=dropout, mode=mode)
        ),
        ResidualFeedForward(feature_depth, feedforward_depth, dropout, mode=mode)
    )
docs: Transformer decoder layer.
  
    Args:
      feature_depth: int:  depth of embedding
      feedforward_depth: int: depth of feed-forward layer
      num_heads: int: number of attention heads
      dropout: float: dropout rate (how much to drop out)
      mode: str: 'train' or 'eval'
  
    Returns:
      the layer.