新規最適化手法ADOPTについて

# TL;DR

新規最適化手法ADOPTについての論文を読み、簡単にまとめました。

(補足: まとめてから気が付きましたが、[^3]にて著者の日本語の論文もあるため適宜参考にしていただければと思います)

# 今回読むことになった背景

Xを見ていたところ、NeurIPSの論文をarXivに上げたというポストを見かけました。
特に、ハイパラに依存することなくに収束を保証できるという内容に興味を持ち論文を確認してみたいと考えました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">NeurIPSの論文をarXivに上げました．Adamに軽微な修正を加えることで，ハイパラに依存せずに常に収束を保証できることを示した論文です．提案法のADOPTは，コードを1行変えればすぐに使えるので，ぜひ使って見てください．<a href="https://t.co/dHuo4Z2GMz">https://t.co/dHuo4Z2GMz</a> <a href="https://t.co/CTMNkQmZTg">https://t.co/CTMNkQmZTg</a></p>&mdash; Shohei Taniguchi (@ishohei220) <a href="https://twitter.com/ishohei220/status/1854054927951437953?ref_src=twsrc%5Etfw">November 6, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


# 前提知識

本研究の概要を抑える前に、深層学習においての最適化手法についてある程度理解していたほうが理解が進められると考えているため、
よくまとめられている記事があるため掲載をします。
適宜参考にしていただけると幸いです。

1. ZoneTsuyoshiさん、[深層学習の最適化アルゴリズム #機械学習 - Qiita](https://qiita.com/ZoneTsuyoshi/items/8ef6fa1e154d176e25b8)
1. bilzardさん、[AdamWにおける改善点をきちんと理解する](https://zenn.dev/bilzard/articles/adamw-demistified)
1. Daisuke Okanoharaさん、[オンライン凸最適化と線形識別モデル学習の最前線 - Preferred Networks Research & Development](https://tech.preferred.jp/ja/blog/onlinelearning/)

# 論文[1]

## 要約

1. 背景: Adamの問題点として、$\beta_2$の選択によって収束性能が変わることがあり、AMSGradの改善案があった。ただ、勾配のノイズ自体を有界という強い仮定が必要であった。また、並行してAdaShiftが提案されたが特定の問題に対してのみ有効であった。
1. 提案手法: ADOPTという手法を提案し、Adamの収束性能を保証することができる。
1. 実験結果: 実験として画像データや生成モデル、LLMの事前学習やファインチューニングを行った。全ての組み合わせについての確認はしていないが、Adamの派生（AdamW,Adamax）などと比較しても、ADOPTは最適な収束性能を示すことができた。


# アルゴリズムの比較
上記の提案手法とAdamのアルゴリズムを比較してみると以下のようになります。

| **項目**             | **ADOPT**[^1]                                                             | **Adam**[^2]                                                             |
|----------------------|----------------------------------------------------------------------|----------------------------------------------------------------------|
| **必要なパラメータ** | - 学習率 $\{\alpha_t\}$ <br> - 初期パラメータ $\theta_0$ <br> - $\beta_1$, $\beta_2$, $\epsilon$ | - 学習率 $\alpha$ <br> - 初期パラメータ $\theta_0$ <br> - $\beta_1$, $\beta_2$, $\epsilon$ |
| **初期化**           | - $v_0 \leftarrow g_0 \odot g_0$ <br> - $m_1 \leftarrow g_1 / \max\{\sqrt{v_0}, \epsilon\}$ | - $m_0 \leftarrow 0$ <br> - $v_0 \leftarrow 0$ <br> - $t \leftarrow 0$ |
| **勾配の計算**       | $g_t \leftarrow \nabla_{\theta} f(\theta_{t-1})$                    | $g_t \leftarrow \nabla_{\theta} f(\theta_{t-1})$                    |
| **1次モーメント更新**| $m_{t+1} \leftarrow \beta_1 \cdot m_t + (1 - \beta_1) \frac{g_{t+1}}{\max\{\sqrt{v_t}, \epsilon\}}$ | $m_t \leftarrow \beta_1 \cdot m_{t-1} + (1 - \beta_1) \cdot g_t$    |
| **2次モーメント更新**| $v_t \leftarrow \beta_2 \cdot v_{t-1} + (1 - \beta_2) \odot g_t$    | $v_t \leftarrow \beta_2 \cdot v_{t-1} + (1 - \beta_2) \cdot g_t^2$  |
| **バイアス補正**     | **なし**                                                              | - $\hat{m}_t \leftarrow \frac{m_t}{1 - \beta_1^t}$ <br> - $\hat{v}_t \leftarrow \frac{v_t}{1 - \beta_2^t}$ |
| **パラメータ更新**   | $\theta_t \leftarrow \theta_{t-1} - \alpha_t m_t$                   | $\theta_t \leftarrow \theta_{t-1} - \alpha \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$ |

## 比較ポイント

1. **初期化の違い**:
   - ADOPT は勾配の平方を初期化に使用します。
   - Adam は 1次と 2次モーメントベクトルをゼロから始めます。

2. **モーメント更新**:
   - ADOPT は勾配の平方根と最大値を使用してモーメント更新を行います。
   - Adam はバイアス補正を使用し、勾配の平方を更新します。

3. **パラメータ更新**:
   - ADOPT は単純なモーメント更新で行います。
   - Adam はバイアス補正したモーメントを用いて更新します。

# 感想

実際に論文にある数式はとても難しく、理解はしきれなかったですが、とても興味深い内容であると感じました。

また、著者の方がGitHubに[コード](https://github.com/iShohei220/adopt/tree/main)を公開してくださっています。一方、Transformersのライブラリと併用して学習を場合は別途対応が必要だと考えられるため、こちらについて今後どのように利用すればよいか考えたいと思います。
- [transformers.Trainerクラス](https://huggingface.co/docs/transformers/ja/main_classes/trainer#transformers.Trainer)に`optim`引数を追加することで利用できると考えられますが、[transformers/training_args.py](https://github.com/huggingface/transformers/blob/9f06fb05059a973048f5865e7e385c9db5d6daa4/src/transformers/training_args.py#L145-L187) に 2024/11/17現在はADOPTの実装はないため簡単には利用できないと考えます。

# 参考文献

[^1]: **ADOPT: Modified Adam Can Converge with Any $\beta_2$ with the Optimal Rate**   
*Shohei Taniguchi, Keno Harada, Gouki Minegishi, Yuta Oshima, Seong Cheol Jeong, Go Nagahara, Tomoshi Iiyama, Masahiro Suzuki, Yusuke Iwasawa, Yutaka Matsuo*   
*2024*  
[arXiv:2411.02853](https://arxiv.org/abs/2411.02853)

[^2]: **Adam: A Method for Stochastic Optimization**   
*Diederik P. Kingma, Jimmy Ba*  
*2014*  
[arXiv:1412.6980](https://arxiv.org/abs/1412.6980)

[^3]: **ADOPT: ハイパーパラメータに依存せずに最適レートで収束する適応的最適化アルゴリズムの提案**  
*谷口 尚平, 原田 憲旺, 峰岸 剛基, 大島 佑太, 鄭 晟徹, 長原 豪, 飯山 燈, 鈴木 雅大, 岩澤 有祐, 松尾 豊*  
*2024*  
[人工知能学会全国大会論文集, 2024, JSAI2024 巻, 第38回 (2024), セッションID 4D3-GS-2-01, p. 4D3GS201](https://doi.org/10.11517/pjsai.JSAI2024.0_4D3GS201)