&\hspace{5mm}if \: \lambda \neq 0
      \      &\hspace{10mm} g_t \leftarrow g_t + \lambda
      \theta_{t-1}                            \      &\hspace{5mm}m_t
      \leftarrow   \beta_1 m_{t-1} + (1 - \beta_1) g_t
      \      &\hspace{5mm}u_t      \leftarrow   \mathrm{max}(\beta_2
      u_{t-1}, |g_{t}|+\epsilon)   \      &\hspace{5mm}\theta_t
      \leftarrow \theta_{t-1} - \frac{\gamma m_t}{(1-\beta^t_1) u_t}
      \      &\rule{110mm}{0.4pt}
      \[-1.ex]      &\bf{return} \:  \theta_t
      \[-1.ex]      &\rule{110mm}{0.4pt}
      \[-1.ex] \end{aligned}
For further details regarding the algorithm we refer to Adam: A
   Method for Stochastic Optimization.
Parameters:
      * params (iterable) -- iterable of parameters to optimize
        or dicts defining parameter groups
  * **lr** (*float**, **optional*) -- learning rate (default:
    2e-3)

  * **betas** (*Tuple**[**float**, **float**]**, **optional*) --
