ひとことで言うと
陰的正則化(implicit regularization)は、損失関数に のような項を明示的に足していなくても、初期値、ミニバッチの順序、確率的勾配法、学習率、停止時点などの学習手続きそのものが、同じ訓練損失を達成する解の中から到達しやすいものを選ぶという見方です。ここで はモデルのパラメータ、 は明示的に指定する罰則、 はその強さです。
同じ目的地へ行ける道が何本もあるとき、地図に「短い道を選べ」と書かなくても、出発地点と交通ルールによって実際に通る道は限られます。陰的正則化は、その「交通ルール」にあたる学習手続きです。短い道を選ぶと決めた、という意味ではありません。
なぜ必要か
明示的正則化では、たとえば目的関数を
と書き、損失 とは別にパラメータの大きさや関数の複雑さへの好みを指定します。これは「何を罰するか」と強さ がコード上に現れるので、設計と比較がしやすい方法です。一方、正則化項がない実装でも、初期化からの更新、勾配のノイズ、学習率の変化、早期終了までを含めれば、最適化は単に「損失が最小の点をどれでも返す」手続きではありません。
この見方が必要になった大きな理由が、モデル容量だけでは説明しにくい観察です。Zhang らは、画像分類の大規模な畳み込みネットワークが、正しいラベルだけでなく訓練データのランダムなラベルにも容易に適合することを実験で示しました。入力を構造のないランダムノイズに置き換えてもこの現象は起こり、明示的正則化を入れても質的には変わりません。さらに、パラメータ数がデータ数を上回れば、単純な2層ネットワークにも有限個の訓練例を完全に表現できる構成があると示しています。
つまり「表現できる関数が多いから汎化できない」という容量だけの説明は不十分です。同じように訓練データへ適合できる解が多数あるなら、実際にどの解へ進むかを決める最適化の手続きが論点になります。ただし、この論文が示したのは容量に基づく説明への反例であり、SGD のノイズや初期化が汎化を生む機構の証明ではありません。
仕組み
訓練データに対する経験損失を 、更新回数を 、学習率を 、ミニバッチ で計算した勾配を とすると、典型的な更新は
です。 は時点 のパラメータ、 はその時点の学習率、 はミニバッチ、 はそのバッチの損失です。明示的な は式にありませんが、初期値 、バッチの揺らぎ、学習率列、停止時点 が最終値 を決めます。したがって、同じ訓練損失を持つ解が複数ある問題では、手続きは解の候補を狭める制約として働きます。
線形モデルの過剰な未知数を例にすると、方程式 の解が無数にある場合でも、ゼロから勾配降下を始めれば更新はデータ行列の張る方向に積み重なります。この性質は「 を小さくせよ」という項を書いたこととは違います。実際の深層ネットワークでは、ノルム、マージン、特徴の滑らかさのどれが選ばれるかを一般に一つの式で言えるわけではありません。
SGD のノイズは、各更新を完全な全データ勾配からずらします。早期終了は、同じ目的関数を最小化し続ける前に軌道を切ります。初期化は、最初にどの方向へ進めるかを変えます。これらは「解を選ぶ手続き」の要素として整理できますが、どの条件で、どの量を最小化する等価な明示的正則化になるかはモデルや設定に依存します。特に、ランダムラベルを記憶できる事実から、汎化する解を選ぶ具体的な機構が証明されたとは言えません。
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけ |
|---|---|---|
| 明示的正則化との対比 | 明示的正則化は目的関数へ罰則・制約を加え、陰的正則化は学習手続きが解の選択に影響する | 「正則化項がないので正則化はない」 |
| 大規模モデルの汎化を説明 | ランダムラベルにも適合できる観察は、容量だけの説明が足りないことを示す | 「パラメータ数が多いほど必ず汎化する」 |
| 1611.03530 の位置づけ | 実験と有限標本の表現力の構成による反例・再考の要求 | SGD のノイズが汎化を証明した論文だとする |
| 手続き由来の要素 | 初期値、SGD の確率性、学習率、早期終了を解の選択に関わる要素として扱う | それぞれが常に同じ明示的罰則と等価だとする |
実装で確かめる
明示的な正則化項を入れず、解が無数にある1本の線形回帰をゼロ初期値から勾配降下します。ここでは「手続きが選ぶ解」を見るため、更新式に はありません。
import numpy as np
X = np.array([[1.0, 1.0]])
y = np.array([1.0])
w = np.zeros(2)
for _ in range(1000):
grad = 2 * X.T @ (X @ w - y)
w -= 0.1 * grad
print("w:", w)
print("loss:", ((X @ w - y) ** 2).mean())
実行結果は w: [0.5 0.5]、loss: 1.232595164407831e-32 です。 を満たす解は無数にありますが、この初期値と更新では対称な解へ到達します。これは深層学習の汎化機構を再現するコードではなく、目的関数に書かれた条件だけでは最終解が一意に決まらないことを確認する最小例です。初期値や更新手続きを変えれば、到達する解も変わり得ます。
取り違えやすいもの
| 用語 | 陰的正則化との切り分け |
|---|---|
| L2正則化・weight decay | パラメータの大きさへの項や更新則を明示的に入れる方法。陰的正則化は項を書かない手続きの効果を指す |
| ドロップアウト | 学習中に確率的なマスクを入れる明示的な設計。結果として制約が生じても、陰的正則化と同義ではない |
| 早期終了 | 更新を途中で止める具体的な手続き。陰的正則化を生む要素の一つとして整理できるが、単独で一般理論を意味しない |
| 過剰パラメータ化 | パラメータ数がデータ数を上回る状態。記憶できる容量を示すが、どの解を学習するかまでは決めない |
| 汎化 | 未見データでの性能という結果。陰的正則化はその結果を説明する候補の見方で、汎化そのものではない |
想起チェック
明示的正則化と陰的正則化は、目的関数のどこが違うか
明示的正則化は のように罰則や制約を明示します。陰的正則化は、初期値や更新則などの学習手続きが解の選択に影響する見方です。
ランダムラベルを記憶できる実験が、何に対する反例なのか
大規模モデルがランダムラベルやランダムノイズにも適合できる観察は、モデル容量だけで実データの汎化を説明する考えへの反例です。
SGDのノイズや初期化について、論文の観察から断定してはいけないことは何か
それらが汎化を生む具体的な機構まで証明された、と断定してはいけません。観察が示すのは、容量以外に学習手続きと解の選択を調べる必要があるという点です。
実装で陰的正則化を確認するとき、コード上で探すものは何か
正則化項の有無だけでなく、初期値、ミニバッチ、学習率の列、更新回数と停止条件を確認します。これらが到達する解を変える手続きです。