3.8 Lassoへの別道 — ステップ・グループ・効率的計算

Lassoは強力な正則化手法だが、その解の求め方や改良版には深い世界がある。 小さな一歩を繰り返すだけでLassoと同じ経路が得られること、グループ単位でゼロになれる拡張、 Lassoのバイアス問題を修正する工夫、そして一変数ずつ最適化する効率的なアルゴリズム—— これらを視覚的・直感的に理解していこう。

前章で学んだLasso(L₁正則化)の応用と改良版。 「なぜLassoはうまくいくのか」「もっとうまくできないか」という問いへの答えがここにある。

小さな一歩がLassoを生む — 前向きステージワイズ回帰

Lassoの解を求めるアルゴリズムには、複数の道がある。 そのうち一つが、前向きステージワイズ回帰(Forward Stagewise Regression)と呼ばれる、 驚くほどシンプルな手順だ。

やることはただ一つ:今の残差と最も相関が高い変数を選び、その係数をほんの少しだけ動かす。 これをひたすら繰り返す。

前向きステージワイズ回帰で係数が小さなステップを積み重ねてLassoの経路と一致する様子

上のアニメーションを見てほしい。3つの係数(青・黄・緑)がゼロから始まり、 小さなステップを繰り返しながら、徐々に折れ線状の経路を形成していく。 これが前向きステージワイズ回帰の「生の動き」だ。

具体的な手順はこうだ:

  1. 全ての係数をゼロから始める
  2. 残差 $r = y - \hat{y}$ を計算する
  3. 残差と最も強く相関する変数 $x_j$ を選ぶ
  4. 係数 $\beta_j$ をほんの少しだけ更新する
  5. 残差を更新し、2に戻る

更新式は次の通りだ:

$$\beta_j \leftarrow \beta_j + \varepsilon \cdot \text{sign}\langle x_j, r \rangle$$

ここで $\varepsilon$ はステップサイズ(小さな正の数)、$\langle x_j, r \rangle$ は変数と残差の内積(一致度)を表す。$\text{sign}(\cdot)$ は符号を返す関数で、 内積が正なら $\beta_j$ を増やし、負なら減らす。

この $\varepsilon$ を限りなくゼロに近づけた極限の手続きをFS₀(インフィニテシマル前向きステージワイズ)と呼ぶ。 「インフィニテシマル」とは「無限小」の意味で、ステップが無限に小さくなる極限を指す。

驚くべき事実がある。FS₀ が生成する係数の経路は、Lassoの経路とまったく同じになる。 (厳密には係数のパスが単調に変化する場合だが、多くの実際の問題ではこれが成り立つ。)

「Lasso = 最適化問題を一気に解く」という視点と、「FS₀ = 小さな一歩の無限の積み重ね」という視点。 どちらも同じ答えに到達する。これは機械学習における深い数学的事実の一つだ。

変数のグループを丸ごと選ぶ — グループLasso

Lassoは「どの変数を使うか」を自動で選ぶ。 しかし現実のデータには、変数が自然にグループを形成するケースが多い。

例えば:

通常のLassoでは、グループ内の一部の変数だけが選ばれ、残りが捨てられることがある。カテゴリ変数のダミーなら、グループ全体を使うか全体を捨てるかが自然なはずだ

グループLassoで係数のグループが一斉にゼロになる様子

上のアニメーションを見てほしい。青・黄・緑の3つのグループがある。 正則化パラメータ λ が増加するにつれ、黄色いグループの棒が全て同時に縮んでいく。 そして一斉にゼロになる——グループが丸ごと消えるのだ。一方、青と緑のグループは影響を受けない。

グループLassoはこの問題を解決する。 グループ $\ell$ の係数ベクトル$\beta_\ell$ に対して、 通常の絶対値ではなくL2ノルム $\|\beta_\ell\|_2$ でペナルティを課す:

$$\min_\beta \left\| y - \sum_{\ell=1}^L X_\ell \beta_\ell \right\|^2 + \lambda \sum_{\ell=1}^L \sqrt{p_\ell} \|\beta_\ell\|_2$$

ここで $p_\ell$ はグループ $\ell$ の変数の数、$\sqrt{p_\ell}$ はグループサイズを調整する重みだ。

なぜL2ノルムを使うと「グループ全体がゼロになる」のか?

$\|\beta_\ell\|_2 = \sqrt{\beta_{\ell,1}^2 + \beta_{\ell,2}^2 + \cdots}$——これは係数ベクトルの長さ(原点からの距離)だ。 グループ内の係数が全て小さいほど、このノルムは小さくなる。

幾何学的に言えば:通常のLasso(L1ノルム)の等ペナルティ面は正方形(ひし形)だ。 L2ノルムの等ペナルティ面はだ。 球の場合、係数を「どれかだけ残す」より「全部同じ方向に縮める」ほうが球面上の一点に対応しやすく、 最適化がグループ全体をゼロにする方向に働く。

通常のLassoでは、グループ内の一部だけがゼロになることが可能だ。 グループLassoでは、グループを1単位として扱うため、全体が残るか全体が消えるかという「グループ単位の選択」が自然に起きる。

Lassoのバイアス問題 — 重要な変数も縮小されすぎる

Lassoには一つの根本的な問題がある:重要な変数の係数まで、小さく縮小されすぎる

なぜか?Lassoのペナルティは $\lambda|\beta_j|$ で、 係数の絶対値に比例する。小さい係数には適度なペナルティがかかるが、大きい係数にも同じ比率でペナルティがかかる。 本当に重要な変数(真の係数が大きい)でも、推定値が真の値より小さくなってしまう。

これを「バイアス」と呼ぶ。 統計的には「一致性がない」(サンプルサイズが増えても推定値が真の値に収束しない)とも言う。

Lasso・SCAD・適応Lassoの3種類のペナルティ関数の形状比較

上のアニメーションを見てほしい。3つの曲線が重なって描かれる:

赤い矢印が示す部分——大きな $|\beta|$ での差がポイントだ。

SCAD(滑らかにクリップされた絶対偏差)ペナルティ

SCADペナルティは3段階で変化する:

つまり「小さな係数は強く縮小してゼロに近づける(スパース性)」、 「大きな係数は縮小しない(バイアスなし)」という理想的な性質を両立させる。 V字型のLassoペナルティを、先端だけ平らにしたような形だと思えばよい。

適応Lasso(Adaptive Lasso)

各変数に個別の重みを持つペナルティを使う:

$$\sum_j w_j |\beta_j|, \quad w_j = \frac{1}{|\hat{\beta}_j|^\nu}$$

$\hat{\beta}_j$ は最小二乗推定値、$\nu > 0$ はハイパーパラメータ(通常 $\nu = 1$$\nu = 2$ を使う)。

重要な変数($|\hat{\beta}_j|$ が大きい)は分母が大きくなり、$w_j$ が小さくなる → 罰則が軽くなる。 重要でない変数は $|\hat{\beta}_j|$ が小さく、$w_j$ が大きくなる → 強く縮小される。

直感的に言えば「重要そうな変数は優しく扱い、重要でなさそうな変数は厳しく扱う」。 最初に最小二乗で変数の重要度を把握し、その知識を使ってペナルティを個別に調整する賢いやり方だ。

座標降下法 — 一つずつ、確実に最適化する

Lassoの解を求める別のアプローチが座標降下法(Coordinate Descent)だ。 LARSアルゴリズムが全変数を同時に考慮するのに対し、座標降下法は一度に一つの変数だけを最適化する

座標降下法が2次元等高線図上で交互に水平・垂直移動しながら最小値に向かう様子

上のアニメーションを見てほしい。楕円形の等高線(損失関数の等値曲線)上で、 赤い点が水平→垂直→水平→垂直……とジグザグに動いている。 これが座標降下法の本質だ。

水平移動 = 「$\beta_1$ を固定して $\beta_2$ を最適化」、 垂直移動 = 「$\beta_2$ を固定して $\beta_1$ を最適化」。 このジグザグを繰り返すことで、最小点(黄色い点)に向かって収束していく。

やり方はシンプルだ:

  1. 変数 $\beta_j$ 以外の係数を固定する
  2. 固定された他の係数を使って部分的な残差を求める:
    $$\tilde{y}_i^{(j)} = y_i - \sum_{k \neq j} x_{ik}\hat{\beta}_k(\lambda)$$
  3. この残差に対して $\beta_j$ のLasso問題を解く
  4. 次の変数に移り、繰り返す

ステップ3の解は、閉じた形で書ける:

$$\tilde{\beta}_j(\lambda) \leftarrow S\!\left(\sum_{i=1}^N x_{ij} \tilde{y}_i^{(j)},\; \lambda\right)$$

ここで $S(t, \lambda) = \text{sign}(t)(|t| - \lambda)_+$ソフト閾値化演算子だ。$(\cdot)_+$ は「正なら値をそのまま、負なら0にする」演算子。つまり:

$$S(t, \lambda) = \text{sign}(t)(|t| - \lambda)_+$$

簡単に言えば「内積の絶対値がλより小さければ無視し、大きければλだけ縮小する」。 これがLassoの本質そのものだ。

なぜ効率的か?

一変数のLasso問題は即座に解ける。全変数をサイクルして繰り返すと、全体のLasso解に収束する。

さらに温かい始点(warm start)が使える:$\lambda$ を少しずつ小さくしながら解を求めるとき、 前の $\lambda$ での解を初期値として使える。 また、係数がゼロのままのことが多いので計算をスキップできる。

LARSよりもシンプルで、特に高次元(変数が多い)問題で高速になることが多い。リッジ回帰、 グループLasso、Fused Lassoなど、様々な拡張にも適用できる。

まとめ — Lassoの深い世界

Lassoを中心に、その変種・拡張が放射状に広がるファミリーツリー

この章を通じて、Lassoという一つの正則化手法の「奥深さ」が見えてきた。 上のアニメーションのように、Lassoを中心に4つのアイデアが放射状に広がっている。

手法核心のアイデア何を解決するか
FS₀(前向きステージワイズ)小さな一歩の無限の積み重ねLassoの別の見方を提供
グループLassoグループごとにL2ノルムでペナルティグループ単位の変数選択
SCAD / 適応Lasso大きな係数への罰則を軽減Lassoのバイアス問題を修正
座標降下法一変数ずつ最適化を繰り返す高次元での効率的な計算

Lassoは「基本形」だが、その周辺には多くの変種と改良がある。 状況(グループ構造があるか、バイアスが問題か、計算速度が必要か)に応じて 最適な手法を選ぶのが実践的なアプローチだ。

統計学習における一つの深い教訓がここにある:単純なアイデアを徹底的に理解することで、多くの問題に対応できる豊かな手法群が生まれる

前向きステージワイズ回帰の「小さな一歩」も、グループLassoの「L2ノルム」も、 SCADの「ペナルティの勾配を下げる」も——すべては「Lassoをより賢くする」という一つの問いから出発している。 この姿勢こそ、統計学習を深く学ぶための根本だ。