docstr: Update weights ws of some function, given the derivatives of some
  cost c with respect to ws, [dc/dw for w in ws], by applying LAMB
  method.
  
  Parameters
  ----------
  self
      Weights of the function to be updated.
  dcdw
      Derivates of the cost c with respect to the weights ws, [dc/dw for w in ws].
  lr
      Learning rate(s), the rate(s) at which the weights should be updated
      relative to the gradient.
  mw_tm1
      running average of the gradients, from the previous time-step.
  vw_tm1
      running average of second moments of the gradients, from the previous
      time-step.
  step
      training step.
  beta1
      gradient forgetting factor (Default value = 0.9).
  beta2
      second moment of gradient forgetting factor (Default value = 0.999).
  epsilon
      divisor during adam update, preventing division by zero
      (Default value = 1e-7).
  max_trust_ratio
      The maximum value for the trust ratio. Default is 10.
  decay_lambda
      The factor used for weight decay. Default is zero.
  stop_gradients
      Whether to stop the gradients of the variables after each gradient step.
      Default is ``True``.
  out
      optional output array, for writing the result to. It must have a shape
      that the inputs broadcast to.
  
  Returns
  -------
  ret
      The new function weights ws_new, following the LAMB updates.
  
  Examples
  --------
  With one :class:`ivy.Container` inputs:
  
  >>> w = ivy.Container(a=ivy.array([1., 2., 3.]), b=ivy.array([4., 5., 6.]))
  >>> dcdw = ivy.array([3., 4., 5.])
  >>> mw_tm1 = ivy.array([0., 0., 0.])
  >>> vw_tm1 = ivy.array([0.])
  >>> lr = ivy.array(1.)
  >>> step = ivy.array([2])
  >>> new_weights = w.lamb_update(dcdw, mw_tm1, vw_tm1, lr, step)
  >>> print(new_weights)
  ({
      a: ivy.array([1., 2., 3.]),
      b: ivy.array([4., 5., 6.])
  }, ivy.array([0.3, 0.4, 0.5]), ivy.array([1.01, 1.01, 1.02]))
  
  With multiple :class:`ivy.Container` inputs:
  
  >>> w = ivy.Container(a=ivy.array([1.,3.,5.]),
  ...                      b=ivy.array([3.,4.,2.]))
  >>> dcdw = ivy.Container(a=ivy.array([0.2,0.3,0.6]),
  ...                         b=ivy.array([0.6,0.4,0.7]))
  >>> mw_tm1 = ivy.Container(a=ivy.array([0.,0.,0.]),
  ...                           b=ivy.array([0.,0.,0.]))
  
  >>> vw_tm1 = ivy.Container(a=ivy.array([0.,]),
  ...                           b=ivy.array([0.,]))
  >>> step = ivy.array([3.4])
  >>> beta1 = 0.9
  >>> beta2 = 0.999
  >>> epsilon = 1e-7
  >>> max_trust_ratio = 10
  >>> decay_lambda = 0
  >>> stop_gradients = True
  >>> lr = ivy.array(0.5)
  >>> new_weights = w.lamb_update(dcdw, lr, mw_tm1, vw_tm1, step, beta1=beta1,
  ...                                beta2=beta2, epsilon=epsilon,
  ...                                max_trust_ratio=max_trust_ratio,
  ...                                decay_lambda=decay_lambda,
  ...                                stop_gradients=stop_gradients)
  >>> print(new_weights)
  ({
      a: ivy.array([-0.708, 1.29, 3.29]),
      b: ivy.array([1.45, 2.45, 0.445])
  }, {
      a: ivy.array([0.02, 0.03, 0.06]),
      b: ivy.array([0.06, 0.04, 0.07])
  }, {
      a: ivy.array([4.0e-05, 9.0e-05, 3.6e-04]),
      b: ivy.array([0.00036, 0.00016, 0.00049])
  })
docstr_tok: ["Update","weights","ws","of","some","function",",","given","the","derivatives","of","some","cost","c","with","respect","to","ws",",","[","dc\/dw","for","w","in","ws","]",",","by","applying","LAMB","method",".","Parameters","--","--","--","--","--","self","Weights","of","the","function","to","be","updated",".","dcdw","Derivates","of","the","cost","c","with","respect","to","the","weights","ws",",","[","dc\/dw","for","w","in","ws","]",".","lr","Learning","rate","(","s",")",",","the","rate","(","s",")","at","which","the","weights","should","be","updated","relative","to","the","gradient",".","mw_tm1","running","average","of","the","gradients",",","from","the","previous","time-step",".","vw_tm1","running","average","of","second","moments","of","the","gradients",",","from","the","previous","time-step",".","step","training","step",".","beta1","gradient","forgetting","factor","(","Default","value","=","0.9",")",".","beta2","second","moment","of","gradient","forgetting","factor","(","Default","value","=","0.999",")",".","epsilon","divisor","during","adam","update",",","preventing","division","by","zero","(","Default","value","=","1e-7",")",".","max_trust_ratio","The","maximum","value","for","the","trust","ratio",".","Default","is","10.","decay_lambda","The","factor","used","for","weight","decay",".","Default","is","zero",".","stop_gradients","Whether","to","stop","the","gradients","of","the","variables","after","each","gradient","step",".","Default","is","``","True","``",".","out","optional","output","array",",","for","writing","the","result","to",".","It","must","have","a","shape","that","the","inputs","broadcast","to",".","Returns","--","--","--","-","ret","The","new","function","weights","ws_new",",","following","the","LAMB","updates",".","Examples","--","--","--","--","With","one",":","class",":","`","ivy.Container","`","inputs",":",">",">",">","w","=","ivy.Container","(","a=ivy.array","(","[","1.",",","2.",",","3",".","]",")",",","b=ivy.array","(","[","4.",",","5.",",","6",".","]",")",")",">",">",">","dcdw","=","ivy.array","(","[","3.",",","4.",",","5",".","]",")",">",">",">","mw_tm1","=","ivy.array","(","[","0.",",","0.",",","0",".","]",")",">",">",">","vw_tm1","=","ivy.array","(","[","0",".","]",")",">",">",">","lr","=","ivy.array","(","1",".",")",">",">",">","step","=","ivy.array","(","[","2","]",")",">",">",">","new_weights","=","w.lamb_update","(","dcdw",",","mw_tm1",",","vw_tm1",",","lr",",","step",")",">",">",">","print","(","new_weights",")","(","{","a",":","ivy.array","(","[","1.",",","2.",",","3",".","]",")",",","b",":","ivy.array","(","[","4.",",","5.",",","6",".","]",")","}",",","ivy.array","(","[","0.3",",","0.4",",","0.5","]",")",",","ivy.array","(","[","1.01",",","1.01",",","1.02","]",")",")","With","multiple",":","class",":","`","ivy.Container","`","inputs",":",">",">",">","w","=","ivy.Container","(","a=ivy.array","(","[","1.,3.,5",".","]",")",",","...","b=ivy.array","(","[","3.,4.,2",".","]",")",")",">",">",">","dcdw","=","ivy.Container","(","a=ivy.array","(","[","0.2,0.3,0.6","]",")",",","...","b=ivy.array","(","[","0.6,0.4,0.7","]",")",")",">",">",">","mw_tm1","=","ivy.Container","(","a=ivy.array","(","[","0.,0.,0",".","]",")",",","...","b=ivy.array","(","[","0.,0.,0",".","]",")",")",">",">",">","vw_tm1","=","ivy.Container","(","a=ivy.array","(","[","0.",",","]",")",",","...","b=ivy.array","(","[","0.",",","]",")",")",">",">",">","step","=","ivy.array","(","[","3.4","]",")",">",">",">","beta1","=","0.9",">",">",">","beta2","=","0.999",">",">",">","epsilon","=","1e-7",">",">",">","max_trust_ratio","=","10",">",">",">","decay_lambda","=","0",">",">",">","stop_gradients","=","True",">",">",">","lr","=","ivy.array","(","0.5",")",">",">",">","new_weights","=","w.lamb_update","(","dcdw",",","lr",",","mw_tm1",",","vw_tm1",",","step",",","beta1=beta1",",","...","beta2=beta2",",","epsilon=epsilon",",","...","max_trust_ratio=max_trust_ratio",",","...","decay_lambda=decay_lambda",",","...","stop_gradients=stop_gradients",")",">",">",">","print","(","new_weights",")","(","{","a",":","ivy.array","(","[","-0.708",",","1.29",",","3.29","]",")",",","b",":","ivy.array","(","[","1.45",",","2.45",",","0.445","]",")","}",",","{","a",":","ivy.array","(","[","0.02",",","0.03",",","0.06","]",")",",","b",":","ivy.array","(","[","0.06",",","0.04",",","0.07","]",")","}",",","{","a",":","ivy.array","(","[","4.0e-05",",","9.0e-05",",","3.6e-04","]",")",",","b",":","ivy.array","(","[","0.00036",",","0.00016",",","0.00049","]",")","}",")"]
code: def lamb_update(
      self: ivy.Container,
      dcdw: Union[ivy.Array, ivy.NativeArray, ivy.Container],
      lr: Union[float, ivy.Array, ivy.NativeArray, ivy.Container],
      mw_tm1: Union[ivy.Array, ivy.NativeArray, ivy.Container],
      vw_tm1: Union[ivy.Array, ivy.NativeArray, ivy.Container],
      step: Union[int, ivy.Container],
      /,
      *,
      beta1: Union[float, ivy.Container] = 0.9,
      beta2: Union[float, ivy.Container] = 0.999,
      epsilon: Union[float, ivy.Container] = 1e-7,
      max_trust_ratio: Union[int, float, ivy.Container] = 10,
      decay_lambda: Union[float, ivy.Container] = 0,
      stop_gradients: Union[bool, ivy.Container] = True,
      out: Optional[ivy.Container] = None,
  ) -> ivy.Container:
      """Update weights ws of some function, given the derivatives of some
      cost c with respect to ws, [dc/dw for w in ws], by applying LAMB
      method.
  
      Parameters
      ----------
      self
          Weights of the function to be updated.
      dcdw
          Derivates of the cost c with respect to the weights ws, [dc/dw for w in ws].
      lr
          Learning rate(s), the rate(s) at which the weights should be updated
          relative to the gradient.
      mw_tm1
          running average of the gradients, from the previous time-step.
      vw_tm1
          running average of second moments of the gradients, from the previous
          time-step.
      step
          training step.
      beta1
          gradient forgetting factor (Default value = 0.9).
      beta2
          second moment of gradient forgetting factor (Default value = 0.999).
      epsilon
          divisor during adam update, preventing division by zero
          (Default value = 1e-7).
      max_trust_ratio
          The maximum value for the trust ratio. Default is 10.
      decay_lambda
          The factor used for weight decay. Default is zero.
      stop_gradients
          Whether to stop the gradients of the variables after each gradient step.
          Default is ``True``.
      out
          optional output array, for writing the result to. It must have a shape
          that the inputs broadcast to.
  
      Returns
      -------
      ret
          The new function weights ws_new, following the LAMB updates.
  
      Examples
      --------
      With one :class:`ivy.Container` inputs:
  
      >>> w = ivy.Container(a=ivy.array([1., 2., 3.]), b=ivy.array([4., 5., 6.]))
      >>> dcdw = ivy.array([3., 4., 5.])
      >>> mw_tm1 = ivy.array([0., 0., 0.])
      >>> vw_tm1 = ivy.array([0.])
      >>> lr = ivy.array(1.)
      >>> step = ivy.array([2])
      >>> new_weights = w.lamb_update(dcdw, mw_tm1, vw_tm1, lr, step)
      >>> print(new_weights)
      ({
          a: ivy.array([1., 2., 3.]),
          b: ivy.array([4., 5., 6.])
      }, ivy.array([0.3, 0.4, 0.5]), ivy.array([1.01, 1.01, 1.02]))
  
      With multiple :class:`ivy.Container` inputs:
  
      >>> w = ivy.Container(a=ivy.array([1.,3.,5.]),
      ...                      b=ivy.array([3.,4.,2.]))
      >>> dcdw = ivy.Container(a=ivy.array([0.2,0.3,0.6]),
      ...                         b=ivy.array([0.6,0.4,0.7]))
      >>> mw_tm1 = ivy.Container(a=ivy.array([0.,0.,0.]),
      ...                           b=ivy.array([0.,0.,0.]))
  
      >>> vw_tm1 = ivy.Container(a=ivy.array([0.,]),
      ...                           b=ivy.array([0.,]))
      >>> step = ivy.array([3.4])
      >>> beta1 = 0.9
      >>> beta2 = 0.999
      >>> epsilon = 1e-7
      >>> max_trust_ratio = 10
      >>> decay_lambda = 0
      >>> stop_gradients = True
      >>> lr = ivy.array(0.5)
      >>> new_weights = w.lamb_update(dcdw, lr, mw_tm1, vw_tm1, step, beta1=beta1,
      ...                                beta2=beta2, epsilon=epsilon,
      ...                                max_trust_ratio=max_trust_ratio,
      ...                                decay_lambda=decay_lambda,
      ...                                stop_gradients=stop_gradients)
      >>> print(new_weights)
      ({
          a: ivy.array([-0.708, 1.29, 3.29]),
          b: ivy.array([1.45, 2.45, 0.445])
      }, {
          a: ivy.array([0.02, 0.03, 0.06]),
          b: ivy.array([0.06, 0.04, 0.07])
      }, {
          a: ivy.array([4.0e-05, 9.0e-05, 3.6e-04]),
          b: ivy.array([0.00036, 0.00016, 0.00049])
      })
      """
      return ivy.lamb_update(
          self,
          dcdw,
          lr,
          mw_tm1,
          vw_tm1,
          step,
          beta1=beta1,
          beta2=beta2,
          epsilon=epsilon,
          max_trust_ratio=max_trust_ratio,
          decay_lambda=decay_lambda,
          stop_gradients=stop_gradients,
          out=out,
      )
  
file_path: ivy/ivy/data_classes/container/gradients.py
imports: from typing import Optional, Union, List, Dict
  import ivy
  from ivy.data_classes.container.base import ContainerBase
label_desc: Use image node_id 8 for calling the _ContainerWithGradients obj's underlying member method code with example usage: obj.lamb_update() and returns: ivy