{ "

AMSGrad

\n

This is a PyTorch implementation of the paper On the Convergence of Adam and Beyond.

\n

We implement this as an extension to our Adam optimizer implementation. The implementation it self is really small since it's very similar to Adam.

\n

We also have an implementation of the synthetic example described in the paper where Adam fails to converge.

\n": "

AMSGrad

\n

\u0db8\u0dd9\u0dba\u0d85 PyTorch \u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2 \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0d86\u0daf\u0db8\u0dca \u0dc3\u0dc4 \u0d89\u0db1\u0dca \u0d94\u0db6\u0dca\u0db6\u0da7 \u0d85\u0db7\u0dd2\u0dc3\u0dcf\u0dbb\u0dd3 \u0dc0\u0dd3\u0db8 .

\n

\u0d85\u0db4\u0d9c\u0dda \u0d86\u0daf\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dda \u0daf\u0dd2\u0d9c\u0dd4\u0dc0\u0d9a\u0dca \u0dbd\u0dd9\u0dc3 \u0d85\u0db4\u0dd2 \u0db8\u0dd9\u0dba \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a\u0d9a\u0dbb\u0db8\u0dd4. \u0d91\u0dba \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0d86\u0daf\u0db8\u0dca\u0da7 \u0db6\u0dd9\u0dc4\u0dd9\u0dc0\u0dd2\u0db1\u0dca \u0dc3\u0db8\u0dcf\u0db1 \u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dca \u0d91\u0dba \u0dc3\u0dca\u0dc0\u0dba\u0d82\u0d9a\u0dca\u0dbb\u0dd3\u0dba\u0dc0 \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0d87\u0dad\u0dca\u0dad\u0dd9\u0db1\u0dca\u0db8 \u0d9a\u0dd4\u0da9\u0dcf \u0dc0\u0dda.

\n

\u0d86\u0daf\u0db8\u0dca\u0d85\u0db7\u0dd2\u0dc3\u0dcf\u0dbb\u0dd3 \u0dc0\u0dd3\u0db8\u0da7 \u0d85\u0db4\u0ddc\u0dc4\u0ddc\u0dc3\u0dad\u0dca \u0dc0\u0db1 \u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2 \u0dc0\u0dbd \u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb \u0d9a\u0dbb \u0d87\u0dad\u0dd2 \u0d9a\u0dd8\u0dad\u0dd2\u0db8 \u0d8b\u0daf\u0dcf\u0dc4\u0dbb\u0dab\u0dba \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0d9a\u0dca \u0daf \u0d85\u0db4 \u0dc3\u0dad\u0dd4\u0dc0 \u0d87\u0dad.

\n", "

AMSGrad Optimizer

\n

This class extends from Adam optimizer defined in _^_0_^_. Adam optimizer is extending the class _^_1_^_ defined in _^_2_^_.

\n": "

AMSGrad\u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba

\n

\u0db8\u0dd9\u0db8\u0db4\u0db1\u0dca\u0dad\u0dd2\u0dba \u0d85\u0dbb\u0dca\u0dae \u0daf\u0d9a\u0dca\u0dc0\u0dcf \u0d87\u0dad\u0dd2 \u0d86\u0daf\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba\u0dd9\u0db1\u0dca \u0dc0\u0dd2\u0dc4\u0dd2\u0daf\u0dda _^_0_^_. \u0d86\u0daf\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba _^_1_^_ \u0d85\u0dbb\u0dca\u0dae \u0daf\u0d9a\u0dca\u0dc0\u0dcf \u0d87\u0dad\u0dd2 \u0db4\u0db1\u0dca\u0dad\u0dd2\u0dba \u0daf\u0dd3\u0dbb\u0dca ing _^_2_^_\u0d9a\u0dbb\u0dba\u0dd2.

\n", "

Synthetic Experiment

\n

This is the synthetic experiment described in the paper, that shows a scenario where Adam fails.

\n

The paper (and Adam) formulates the problem of optimizing as minimizing the expected value of a function, _^_0_^_ with respect to the parameters _^_1_^_. In the stochastic training setting we do not get hold of the function _^_2_^_ it self; that is, when you are optimizing a NN _^_3_^_ would be the function on entire batch of data. What we actually evaluate is a mini-batch so the actual function is realization of the stochastic _^_4_^_. This is why we are talking about an expected value. So let the function realizations be _^_5_^_ for each time step of training.

\n

We measure the performance of the optimizer as the regret, _^_6_^_ where _^_7_^_ is the parameters at time step _^_8_^_, and _^_9_^_ is the optimal parameters that minimize _^_10_^_.

\n

Now lets define the synthetic problem,

\n_^_11_^_

where _^_12_^_. The optimal solution is _^_13_^_.

\n

This code will try running Adam and AMSGrad on this problem.

\n": "

\u0d9a\u0dd8\u0dad\u0dd2\u0db8\u0d85\u0dad\u0dca\u0dc4\u0daf\u0dcf \u0db6\u0dd0\u0dbd\u0dd3\u0db8

\n

\u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2\u0dc0\u0dbd \u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb \u0d9a\u0dbb \u0d87\u0dad\u0dd2 \u0d9a\u0dd8\u0dad\u0dd2\u0db8 \u0d85\u0dad\u0dca\u0dc4\u0daf\u0dcf \u0db6\u0dd0\u0dbd\u0dd3\u0db8 \u0db8\u0dd9\u0dba\u0dba\u0dd2, \u0d91\u0dba \u0d86\u0daf\u0db8\u0dca \u0d85\u0dc3\u0db8\u0dad\u0dca \u0dc0\u0db1 \u0d85\u0dc0\u0dc3\u0dca\u0dae\u0dcf\u0dc0\u0d9a\u0dca \u0db4\u0dd9\u0db1\u0dca\u0dc0\u0dba\u0dd2.

\n

\u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2(\u0dc3\u0dc4 \u0d86\u0daf\u0db8\u0dca) \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca \u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0dba\u0dd9\u0db1\u0dca \u0dc1\u0dca\u0dbb\u0dd2\u0dad\u0dba\u0d9a \u0d85\u0db4\u0dda\u0d9a\u0dca\u0dc2\u0dd2\u0dad \u0d85\u0d9c\u0dba \u0d85\u0dc0\u0db8 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dbd\u0dd9\u0dc3 \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dda \u0d9c\u0dd0\u0da7\u0dc5\u0dd4\u0dc0 \u0dc3\u0d9a\u0dc3\u0dca \u0d9a\u0dbb\u0dba\u0dd2 _^_1_^_. _^_0_^_ \u0dc3\u0dca\u0dae\u0dd2\u0dad\u0dd2\u0d9a \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4 \u0dc3\u0dd0\u0d9a\u0dc3\u0dd4\u0db8 \u0dad\u0dd4\u0dc5 \u0d85\u0db4\u0da7 _^_2_^_ \u0d91\u0dba \u0dc3\u0dca\u0dc0\u0dba\u0d82\u0d9a\u0dca\u0dbb\u0dd3\u0dba\u0dc0 \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0db1\u0ddc\u0dc0\u0dda; \u0d91\u0db1\u0db8\u0dca, \u0d94\u0db6 \u0d91\u0db1\u0dca\u0d91\u0db1\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1 \u0dc0\u0dd2\u0da7 \u0dc3\u0db8\u0dc3\u0dca\u0dad \u0daf\u0dad\u0dca\u0dad \u0d9a\u0dcf\u0dab\u0dca\u0da9\u0dba\u0dda\u0db8 \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0d9a\u0dcf\u0dbb\u0dd2\u0dad\u0dca\u0dc0\u0dba _^_3_^_ \u0dc0\u0db1\u0dd4 \u0d87\u0dad. \u0d85\u0db4 \u0d87\u0dad\u0dca\u0dad \u0dc0\u0dc1\u0dba\u0dd9\u0db1\u0dca\u0db8 \u0d87\u0d9c\u0dba\u0dd3\u0db8\u0da7 \u0dbd\u0d9a\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1\u0dda \u0d9a\u0dd4\u0da9\u0dcf \u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8\u0d9a\u0dd2, \u0d91\u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dca \u0dc3\u0dd0\u0db6\u0dd1 \u0d9a\u0dcf\u0dbb\u0dca\u0dba\u0dba \u0dc0\u0db1\u0dca\u0db1\u0dda \u0dc3\u0dca\u0da7\u0ddd\u0da0\u0dcf\u0dc3\u0dca\u0da7\u0dd2\u0d9a\u0dca \u0dc3\u0dcf\u0d9a\u0dca\u0dc2\u0dcf\u0dad\u0dca \u0d9a\u0dbb _^_4_^_\u0d9c\u0dd0\u0db1\u0dd3\u0db8\u0dba\u0dd2. \u0db8\u0dda \u0db1\u0dd2\u0dc3\u0dcf \u0d85\u0db4\u0dd2 \u0d9a\u0dad\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1\u0dda \u0d85\u0db4\u0dda\u0d9a\u0dca\u0dc2\u0dd2\u0dad \u0dc0\u0da7\u0dd2\u0db1\u0dcf\u0d9a\u0db8\u0d9a\u0dca \u0d9c\u0dd0\u0db1 \u0dba. \u0d91\u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dca \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4\u0dc0\u0dd3\u0db8\u0dda \u0d91\u0d9a\u0dca \u0d91\u0d9a\u0dca \u0d9a\u0dcf\u0dbd \u0db4\u0dd2\u0dba\u0dc0\u0dbb _^_5_^_ \u0dc3\u0db3\u0dc4\u0dcf \u0dc1\u0dca\u0dbb\u0dd2\u0dad\u0dba \u0d85\u0dc0\u0db6\u0ddd\u0db0 \u0d9a\u0dbb \u0d9c\u0dd0\u0db1\u0dd3\u0db8 \u0d89\u0da9 \u0daf\u0dd9\u0db1\u0dca\u0db1.

\n

\u0d85\u0db4\u0dd2\u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab\u0dba\u0dda \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0d9a\u0dcf\u0dbb\u0dd2\u0dad\u0dca\u0dc0\u0dba \u0d9a\u0db1\u0d9c\u0dcf\u0da7\u0dd4\u0dc0 \u0dbd\u0dd9\u0dc3 \u0db8\u0db1\u0dd2\u0db1\u0dca\u0db1\u0dd9\u0db8\u0dd4, \u0d9a\u0dcf\u0dbd \u0db4\u0dd2\u0dba\u0dc0\u0dbb\u0dda\u0daf\u0dd3 \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca _^_6_^_ _^_7_^_ \u0d9a\u0ddc\u0dad\u0dd0\u0db1\u0daf _^_8_^_, \u0dc3\u0dc4 \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad _^_9_^_ \u0dc0\u0dda \u0d85\u0dc0\u0db8 \u0d9a\u0dbb\u0db1 \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca _^_10_^_.

\n

\u0daf\u0dd0\u0db1\u0dca\u0d9a\u0dd8\u0dad\u0dd2\u0db8 \u0d9c\u0dd0\u0da7\u0dc5\u0dd4\u0dc0 \u0db1\u0dd2\u0dbb\u0dca\u0dc0\u0da0\u0db1\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0da7 \u0d89\u0da9 \u0daf\u0dd9\u0dba\u0dd2,

\n_^_11_^_

\u0d9a\u0ddc\u0dc4\u0dd9\u0daf _^_12_^_. \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad \u0dc0\u0dd2\u0dc3\u0db3\u0dd4\u0db8 \u0dc0\u0dda _^_13_^_.

\n

\u0db8\u0dd9\u0db8\u0d9a\u0dda\u0dad\u0dba \u0db8\u0dd9\u0db8 \u0d9c\u0dd0\u0da7\u0dbd\u0dd4\u0dc0 \u0db8\u0dad \u0d86\u0daf\u0db8\u0dca \u0dc3\u0dc4 AMSGrad \u0db0\u0dcf\u0dc0\u0db1\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0da7 \u0d8b\u0dad\u0dca\u0dc3\u0dcf\u0dc4 \u0d9a\u0dbb\u0db1\u0dd4 \u0d87\u0dad.

\n", "

_^_0_^_

\n": "

_^_0_^_

\n", "

Calculate _^_0_^_ and and _^_1_^_ or _^_2_^_

\n\n": "

\u0d9c\u0dab\u0db1\u0dba\u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_ \u0dc3\u0dc4 _^_1_^_ \u0dc4\u0ddd _^_2_^_

\n
  • _^_5_^_ \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dba _^_6_^_ \u0dc3\u0db3\u0dc4\u0dcf \u0dc0\u0dad\u0dca\u0db8\u0db1\u0dca \u0db5\u0dbd\u0dba \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a tensor \u0dc0\u0dda _^_7_^_
  • \n", "

    Initialize a parameter state

    \n\n": "

    \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dad\u0dad\u0dca\u0dc0\u0dba\u0d9a\u0dca \u0d86\u0dbb\u0db8\u0dca\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n
  • _^_2_^_ \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dba tensor \u0dc0\u0dda _^_3_^_
  • \n", "

    Initialize the optimizer

    \n\n": "

    \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba\u0d86\u0dbb\u0db8\u0dca\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n\n", "

    _^_0_^_

    \n": "

    _^_0_^_

    \n", "

    Calculate _^_0_^_.

    \n

    \ud83e\udd14 I feel you should be taking / maintaining the max of the bias corrected second exponential average of squared gradient. But this is how it's implemented in PyTorch also. I guess it doesn't really matter since bias correction only increases the value and it only makes an actual difference during the early few steps of the training.

    \n": "

    \u0d9c\u0dab\u0db1\u0dba\u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_.

    \n

    \ud83e\udd14\u0db8\u0db8 \u0d94\u0db6 \u0dc0\u0dbb\u0dca\u0d9c \u0db5\u0dbd\u0dba \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a \u0daf\u0dd9\u0dc0\u0db1 \u0d9d\u0dcf\u0dad\u0dd3\u0dba \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba \u0db1\u0dd2\u0dc0\u0dd0\u0dbb\u0daf\u0dd2 \u0db1\u0dd0\u0db9\u0dd4\u0dbb\u0dd4\u0dc0 \u0d8b\u0db4\u0dbb\u0dd2\u0db8 \u0d9c\u0dd0\u0db1\u0dd3\u0db8/\u0db4\u0dc0\u0dad\u0dca\u0dc0\u0dcf \u0d9c\u0dad \u0dba\u0dd4\u0dad\u0dd4 \u0daf\u0dd0\u0db1\u0dd9\u0db1\u0dc0\u0dcf. \u0db1\u0db8\u0dd4\u0dad\u0dca \u0d91\u0dba PyTorch \u0dc4\u0dd2 \u0daf \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0dc0\u0db1\u0dca\u0db1\u0dda \u0d91\u0dbd\u0dd9\u0dc3\u0dd2\u0db1\u0dd2. \u0db4\u0d9a\u0dca\u0dc2\u0d9c\u0dca\u0dbb\u0dcf\u0dc4\u0dd3 \u0db1\u0dd2\u0dc0\u0dd0\u0dbb\u0daf\u0dd2 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0db4\u0db8\u0dab\u0d9a\u0dca \u0dc0\u0da7\u0dd2\u0db1\u0dcf\u0d9a\u0db8 \u0dc0\u0dd0\u0da9\u0dd2 \u0d9a\u0dbb\u0db1 \u0d85\u0dad\u0dbb \u0d91\u0dba \u0dc3\u0dd0\u0db6\u0dd1 \u0dc0\u0dd9\u0db1\u0dc3\u0d9a\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1\u0dda \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4\u0dc0\u0dda \u0db8\u0dd4\u0dbd\u0dca \u0db4\u0dd2\u0dba\u0dc0\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba \u0dad\u0dd4\u0dc5 \u0db4\u0db8\u0dab\u0d9a\u0dca \u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dca \u0d91\u0dba \u0dc3\u0dd0\u0db6\u0dc0\u0dd2\u0db1\u0dca\u0db8 \u0dc0\u0dd0\u0daf\u0d9c\u0dad\u0dca \u0db1\u0ddc\u0dc0\u0db1 \u0db6\u0dc0 \u0db8\u0db8 \u0dc3\u0dd2\u0dad\u0db8\u0dd2.

    \n", "

    Calculate gradients

    \n": "

    \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a\u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Call _^_0_^_ of Adam optimizer which we are extending

    \n": "

    \u0d85\u0db4\u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dcf\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1 \u0d86\u0daf\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab\u0dba\u0dda _^_0_^_ \u0d87\u0db8\u0dad\u0dd4\u0db8

    \n", "

    Clear gradients

    \n": "

    \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a\u0db4\u0dd0\u0dc4\u0dd0\u0daf\u0dd2\u0dbd\u0dd2 \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Create experiment to record results

    \n": "

    \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0db5\u0dbd\u0dc0\u0dcf\u0dbb\u0dca\u0dad\u0dcf \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0da7 \u0d85\u0dad\u0dca\u0dc4\u0daf\u0dcf \u0db1\u0dd2\u0dbb\u0dca\u0db8\u0dcf\u0dab\u0dba

    \n", "

    Define _^_0_^_ parameter

    \n": "

    _^_0_^_ \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dba \u0db1\u0dd2\u0dbb\u0dca\u0dc0\u0da0\u0db1\u0dba

    \n", "

    Fall back to Adam if the parameter group is not using _^_0_^_

    \n": "

    \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0db1\u0ddc\u0d9a\u0dbb\u0db1\u0dca\u0db1\u0dda \u0db1\u0db8\u0dca \u0d86\u0daf\u0db8\u0dca \u0dc0\u0dd9\u0dad \u0d86\u0db4\u0dc3\u0dd4 \u0dba\u0db1\u0dca\u0db1 _^_0_^_

    \n", "

    Get _^_0_^_ and _^_1_^_ from Adam

    \n": "

    _^_1_^_ \u0d86\u0daf\u0db8\u0dca\u0d9c\u0dd9\u0db1\u0dca _^_0_^_ \u0dc3\u0dc4 \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1

    \n", "

    Get _^_0_^_.

    \n

    \ud83d\uddd2 The paper uses the notation _^_1_^_ for this, which we don't use that here because it confuses with the Adam's usage of the same notation for bias corrected exponential moving average.

    \n": "

    \u0dbd\u0db6\u0dcf\u0d9c\u0db1\u0dca\u0db1 _^_0_^_.

    \n

    \ud83d\uddd2\u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2 \u0db8\u0dda _^_1_^_ \u0dc3\u0db3\u0dc4\u0dcf \u0d85\u0d82\u0d9a\u0db1\u0dba \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0dba\u0dd2, \u0d91\u0dba \u0db1\u0dd0\u0db9\u0dd4\u0dbb\u0dd4\u0dc0 \u0db1\u0dd2\u0dc0\u0dd0\u0dbb\u0daf\u0dd2 \u0d9d\u0dcf\u0dad\u0dd3\u0dba \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0dc0\u0db1 \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0dba \u0dc3\u0db3\u0dc4\u0dcf \u0d91\u0db8 \u0d85\u0d82\u0d9a\u0db1\u0dba \u0d86\u0daf\u0db8\u0dca\u0d9c\u0dda \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dba \u0dc3\u0db8\u0d9c \u0db4\u0da7\u0dbd\u0dc0\u0dcf \u0db1\u0dd2\u0dc3\u0dcf \u0d85\u0db4\u0dd2 \u0db8\u0dd9\u0dad\u0db1 \u0db6\u0dc0 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1\u0dda \u0db1\u0dd0\u0dc4\u0dd0.

    \n", "

    If _^_0_^_ flag is _^_1_^_ for this parameter group, we maintain the maximum of exponential moving average of squared gradient

    \n": "

    _^_0_^_ \u0db0\u0da2\u0dba \u0db8\u0dd9\u0db8 \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dba \u0db4\u0dd2\u0dbb\u0dd2\u0dc3\u0d9a\u0dca _^_1_^_ \u0dc3\u0db3\u0dc4\u0dcf \u0db1\u0db8\u0dca, \u0d85\u0db4\u0dd2 \u0dc0\u0dbb\u0dca\u0d9c \u0db5\u0dbd\u0dba \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a \u0d9a \u0d9d\u0dcf\u0dad\u0dd3\u0dba \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0dc0\u0db1 \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba \u0d8b\u0db4\u0dbb\u0dd2\u0db8 \u0db4\u0dc0\u0dad\u0dca\u0dc0\u0dcf

    \n", "

    If this parameter group is using _^_0_^_

    \n": "

    \u0db8\u0dd9\u0db8\u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2 \u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1\u0dda \u0db1\u0db8\u0dca _^_0_^_

    \n", "

    Initialize the relevant optimizer

    \n": "

    \u0d85\u0daf\u0dcf\u0dc5\u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba \u0d86\u0dbb\u0db8\u0dca\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Make sure _^_0_^_

    \n": "

    \u0dc0\u0d9c\u0db6\u0dbd\u0dcf \u0d9c\u0db1\u0dca\u0db1 _^_0_^_

    \n", "

    Optimal, _^_0_^_

    \n": "

    \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad, _^_0_^_

    \n", "

    Optimize

    \n": "

    \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Run for _^_0_^_ steps

    \n": "

    _^_0_^_ \u0db4\u0dd2\u0dba\u0dc0\u0dbb \u0dc3\u0db3\u0dc4\u0dcf \u0db0\u0dcf\u0dc0\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Run the synthetic experiment is AMSGrad Here are the results. You can see that AMSGrad converges to true optimal _^_0_^_

    \n": "

    \u0d9a\u0dd8\u0dad\u0dd2\u0db8\u0d85\u0dad\u0dca\u0dc4\u0daf\u0dcf \u0db6\u0dd0\u0dbd\u0dd3\u0db8 \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dbb\u0db1\u0dca\u0db1 AMSGrad \u0db8\u0dd9\u0db1\u0dca\u0db1 \u0db4\u0dca\u0dbb\u0dad\u0dd2. \u0dbd. AMSGrad \u0dc3\u0dd0\u0db6\u0dd1 \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad \u0db6\u0dc0\u0da7 \u0d85\u0db7\u0dd2\u0dc3\u0dcf\u0dbb\u0dd3 \u0dc0\u0db1 \u0db6\u0dc0 \u0d94\u0db6\u0da7 \u0daf\u0dd0\u0d9a \u0d9c\u0dad \u0dc4\u0dd0\u0d9a\u0dd2\u0dba _^_0_^_

    \n", "

    Run the synthetic experiment is Adam. Here are the results. You can see that Adam converges at _^_0_^_

    \n": "

    \u0d9a\u0dd8\u0dad\u0dd2\u0db8\u0d85\u0dad\u0dca\u0dc4\u0daf\u0dcf \u0db6\u0dd0\u0dbd\u0dd3\u0db8 \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dbb\u0db1\u0dca\u0db1 \u0d86\u0daf\u0db8\u0dca. \u0db8\u0dd9\u0db1\u0dca\u0db1 \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0db5\u0dbd. \u0d86\u0daf\u0db8\u0dca \u0d85\u0db7\u0dd2\u0dc3\u0dcf\u0dbb\u0dd3 \u0dc0\u0db1 \u0db6\u0dc0 \u0d94\u0db6\u0da7 \u0db4\u0dd9\u0db1\u0dda _^_0_^_

    \n", "

    Track results every 1,000 steps

    \n": "

    \u0dc3\u0dd1\u0db8\u0db4\u0dd2\u0dba\u0dc0\u0dbb 1,000 \u0d9a\u0da7 \u0dc0\u0dbb\u0d9a\u0dca \u0db4\u0dca\u0dbb\u0dad\u0dd2 results \u0dbd

    \n", "A simple PyTorch implementation/tutorial of AMSGrad optimizer.": "AMSGrad \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dcf\u0dbb\u0d9a\u0dba\u0dda \u0dc3\u0dbb\u0dbd PyTorch \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0db1\u0dd2\u0db6\u0db1\u0dca\u0db0\u0db1\u0dba.", "AMSGrad Optimizer": "AMSGrad \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba" }