class_docstr: Implements functionality common to all transformer decoder layer variants. Subclass
  this if you'd like to modify the behavior of any layer in a transformer decoder.
  
  While this code is functional, it is not intended to be instantiated directly. If
  this functionality is desired as-is, use TransformerDecoderOnlyLayer instead to gain
  the ability to swap self-attention and feedforward classes at instantiation.
code: def build_feedforward(
      self,
      dim: int = None,
      dim_hidden: int = None,
      relu_dropout: float = 0,
      activation: str = "relu",
  ) -> TransformerFFN:
      return TransformerFFN(
          opt=self.opt,
          dim=dim,
          dim_hidden=dim_hidden,
          relu_dropout=relu_dropout,
          activation=activation,
      )
  
imports: from __future__ import annotations
  from abc import ABC
  from typing import Dict, Optional, Tuple
  import numpy
  import torch
  import torch.nn
  from parlai.agents.transformer.modules import create_position_codes, get_n_positions_from_options, LAYER_NORM_EPS, MultiHeadAttention, TransformerFFN
  from parlai.agents.transformer.modules.modular import swappable
  from parlai.core.opt import Opt
  from parlai.core.params import default
  from parlai.core.torch_agent import DictionaryAgent
  from parlai.utils.misc import warn_once
  from parlai.utils.torch import PipelineHelper
  from parlai.utils.fsdp import fsdp_wrap
  from parlai.nn.checkpoint import checkpoint_wrapper
label_desc: Use image node_id 3 for calling the BaseTransformerDecoderLayer obj's underlying member method code with example usage: obj.build_feedforward(dim, dim_hidden, relu_dropout, activation) and returns: TransformerFFN