<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def DecoderLayer(feature_depth, feedforward_depth, num_heads, dropout, mode):
 """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. """

  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)
  )