code: def backward(self, loss):
      scheduled_lr, _ = optimization(
          loss=loss,
          warmup_steps=int(
              self.run_config.max_steps
              * self.hparam["warmup_proportion"]
          ),
          num_train_steps=self.run_config.max_steps,
          learning_rate=self.hparam["learning_rate"],
          train_program=F.default_main_program(),
          startup_prog=F.default_startup_program(),
          weight_decay=self.hparam["weight_decay"],
          scheduler="linear_warmup_decay",
          use_fp16=self.hparam.get("use_fp16", 0),
          use_dynamic_loss_scaling=True,
          layer_decay_rate=self.hparam.get("layer_decay_rate", 0.0),
          n_layers=self.hparam.ernie_config["num_hidden_layers"],
      )
  
      propeller.summary.scalar("lr", scheduled_lr)
  
imports: import os
  import argparse
  import traceback
  import re
  import io
  import yaml
  import numpy
  from easydict import EasyDict
  from pgl.utils import paddle_helper
  from pgl.graph_wrapper import BatchGraphWrapper
  import propeller.paddle
  from propeller.paddle.data import Dataset
  import paddle.fluid
  import paddle.fluid.layers
  import logging
  from propeller import log
  from ernie.tokenizing_ernie import ErnieTokenizer
  from ernie.tokenizing_ernie import ErnieTinyTokenizer
  from dataset.graph_reader import BatchGraphGenerator
  from models.encoder import Encoder
  from models.pretrain_model_loader import PretrainedModelLoader
  from models.loss import Loss
  from optimization import optimization
label_desc: Use image node_id 4 for calling the ERNIESageLinkPredictModel obj's underlying member method code with example usage: obj.backward(loss) without return types