FOBOS
- 劣勾配法の問題点
- 収束が遅い
- L1正則化に適用してみても,0になる重みの数があまり多くならない
概要
- 勾配法に似たオンライン学習アルゴリズム
-
各データについてのパラメーター更新を,勾配法では一気にしていたが,FOBOSでは2ステップに分けている
- 損失項の劣勾配法による処理
- 正則化項の閉じた形での最適解の計算
-
更新式について
- 更新前のパラメータを$w_t$とおく
- 損失項の劣勾配法による処理を終えたときに得たパラメータを$v$をおく
- 第2ステップの更新式は $w_{t+1} = \arg \min_{\bold{w}} \frac{1}{2} || \bold{w} – \bold{v} || ^2 + \hat{\lambda} R(\bold{w}) $
- $\hat{\lambda}$は学習率
- $R()$は正則化関数
- RがL1正則化関数なら,$\bold{w}_{t+1}$の$i$番目の値は$sign(v_i) \max(0, |v_i| - \hat{\lambda})$と計算できる.つまり,「パラメータの各値を定数分だけ$0$に近づけ,符号が変わったら$0$で打ち止め(クリッピング)にする」という更新になる
実装上の工夫
- 正則化の計算の遅延
- 愚直に毎回,正則化パラメータの全ての次元の値を計算する(定数をひく)のをやめる
- 損失項の計算に必要になったときにまとめてその次元を計算する(「定数かける更新をサボった回数」をひく)