class_docstr: ## Clipped Value Function Loss
  
  Similarly we clip the value function update also.
  
  egin{align}
  V^{\pi_     heta}_{CLIP}(s_t)
   &= clip\Bigl(V^{\pi_       heta}(s_t) - \hat{V_t}, -\epsilon, +\epsilon\Bigr)
  \
  \mathcal{L}^{VF}(   heta)
   &= rac{1}{2} \mathbb{E} iggl[
    max\Bigl(igl(V^{\pi_     heta}(s_t) - R_tigr)^2,
        igl(V^{\pi_  heta}_{CLIP}(s_t) - R_tigr)^2\Bigr)
   iggr]
  \end{align}
  
  Clipping makes sure the value function $V_  heta$ doesn't deviate
   significantly from $V_{    heta_{OLD}}$.
code: def forward(
      self,
      value: torch.Tensor,
      sampled_value: torch.Tensor,
      sampled_return: torch.Tensor,
      clip: float,
  ):
      clipped_value = sampled_value + (value - sampled_value).clamp(
          min=-clip, max=clip
      )
      vf_loss = torch.max(
          (value - sampled_return) ** 2,
          (clipped_value - sampled_return) ** 2,
      )
      return 0.5 * vf_loss.mean()
  
file_path: annotated_deep_learning_paper_implementations/labml_nn/rl/ppo/__init__.py
imports: import torch
  from labml_helpers.module import Module
  from labml_nn.rl.ppo.gae import GAE
label_desc: Use image node_id 1 for calling the ClippedValueFunctionLoss obj's underlying member method code with example usage: obj.forward(value, sampled_value, sampled_return, clip) and returns: unknown