はじめに
2025年7月現在、私が把握している限り最も性能が良い Optimizer である Scion を紹介します。
情報源
まず公式の実装へのリンクを記します
次に論文へのリンクを記します
簡単な処理の説明
リンク先に全部書いてあるのですが、一応簡単な説明を行います。
誤解を恐れずに言えば Scion は隠れ層の重みの更新量を直交化する optimizer の一種です。
隠れ層の重み更新量を直交化する optimizer と言えば Muon が先行して発表/実装されています。
ただし、Muon は隠れ層の重みの更新のみを行い、その他のバイアスや出力層の更新には Adam を使うことを想定しています。
それに対して Scion では LMO(the linear minimization oracle)という概念を使い、バイアスや出力層の更新に対しても、隠れ層と同じ概念で更新を可能にしています。
Scion の更新式は以下の通りです。
$$
\begin{align}
m_{t+1} &= \beta m_t + (1 - \beta) g_t \\
w_{t+1} &= w_t - \mu LMO(m_{t+1})
\end{align}
$$
$w_t$はパラメータ、$g_t$は勾配、$\mu$は学習率です。LMOは層毎に異なる関数となります。
それぞれの層の具体的なLMOの処理と、その LMO を利用した場合の Optimizer の名称を記します。
| 層 | LMO | Optimzier の名称 |
|---|---|---|
| 隠れ層 | 直交化 | Muon |
| 出力層 | 符号関数 | Signum |
| バイアス | 正規化 | Momentum Normalized SGD |
入力層については入力やモデルによって異なります。
| 入力層 | LMO | Optimzier の名称 |
|---|---|---|
| 画像など入力が連続値 | 直交化 | Muon |
| 言語処理のような離散値(Embbeding) | 出力ベクトル単位の正規化 | Momentum Normalized SGD(ColNorm) |
| 入力層の重みを出力層と共有している場合 | 符号関数 | Signum |
LayerNormのリスケールパラメーター等については具体的な記載はありませんが、おそらくNormalied SGDを利用すればよいでしょう。
一点注意点として、Scion の実装ではそれぞれのパラメータについての更新処理とセットになった初期化方法が定義されています。
1次元のベクトルであるバイアス用に定義された処理ではパラメータを0に初期化します。LayerNorm等のリスケールパラメータを0に初期化すると入力が出力に伝播しなくなります。
そのため、リスケールパラメータについては自分で初期化処理を記述した方がよいでしょう
Momentum Normalized SGD について
さらっと前述の表で Momentum Normalized SGD と書きましたが、あまりメジャーではないため一応説明します。
更新量を正規化する Momentum SGD となります。
更新式は以下の通りです。
$$
\begin{align}
m_t &= \beta m_{t-1} + (1 - \beta) g_t \\
w_{t+1} &= w_t - \mu \frac{m_t}{\lVert m_t\rVert}
\end{align}
$$
$w_t$はパラメータ、$g_t$は勾配、$\mu$は学習率です。
なお、入力が離散値の場合の入力層(Embbeding)では出力ベクトル単位で正規化します。
性能について
性能については公式の実装にベンチマークが含まれています。
この実験によると Cifar-10の正答率は以下のようになっています。
| 手法 | 正答率 |
|---|---|
| Momentum SGD | 94.01% |
| Muon | 94.04% |
| Scion | 94.07% |
メリットとデメリット
メリットとして性能がよいことは当然として、学習を通して保持する状態(state)が Adam に比べて半分とい点があります。(Momentum SGDと同じ)
デメリットとして、現時点では学習率などのハイパーパラメータの指定方法についてあまり基準がない点があります。また、出力層の Signum については隠れ層と別の学習率が必要となり、やはりハイパーパラメータの指定が面倒です。
終わりに
Optimizer は日進月歩のようで、デファクトスタンダードについては Momentum SGD から AdamW(2017) へ変わったぐらいしか変化していないように思います。
その中で更新量の直交化を行う Optimizer が次のデファクトスタンダードになりそうな気配を感じています。
ということで、みなさんも機会があれば Scion を利用してはいかがでしょうか?
以上です。