正則化:モデルが複雑になりすぎるのを防ぐ
モデルが訓練データを丸暗記してしまうのを防ぐ正則化を学びます。基礎層では、正則化が「複雑さに罰則を与えて、ちょうどよい複雑さに保つ」ことをつかみます。深掘り層では、L0正則化・L1正則化・L2正則化のちがい、ラッソ回帰とリッジ回帰の対応、そしてドロップアウトの仕組みを数式も交えて説明できるようになります。
ねらい
このレッスンでは、モデルが訓練データを丸暗記してしまうのを防ぐ正則化(せいそくか)を学びます。
基礎
「正則化は、モデルの複雑さに罰則を与えて、ちょうどよい複雑さに保つ工夫である」という全体像をつかみます。
1. 正則化は、複雑さに罰則を与えます
モデルが、訓練データの細かい特徴やたまたまの偶然まで覚え込んでしまい、新しいデータに当たらなくなることがあります。この、訓練データに合わせすぎて新しいデータに弱くなる現象を過学習(かがくしゅう)といいます。過学習と、その裏返しである汎化のくわしい話は、汎化性能を学ぶレッスンで扱います。ここでは、丸暗記に走ると新しい問題に弱くなる、と押さえてください。
過学習は、モデルが必要以上に複雑になったときに起こりやすくなります。複雑なモデルは、データのこまかな凹凸にまで無理に合わせようとするからです。そこで、学習のときに「複雑になりすぎたら罰を与える」という仕掛けを加えます。これが正則化です。
正則化を入れると、モデルは「ずれを小さくしたい」という目標と、「複雑になりすぎたくない」という目標の両方を同時に満たそうとします。二つのつり合いをとることで、訓練データにほどよく合い、なおかつ新しいデータにも当たる、ちょうどよい複雑さに落ち着きます。
ポイント
正則化は、モデルの複雑さに罰則を与えることで、訓練データへの合わせすぎを防ぎ、新しいデータにも当たるちょうどよい複雑さに保ちます。
ここまでの要点
- モデルが複雑になりすぎると、訓練データに合わせすぎて新しいデータに弱くなります。
- 正則化は、複雑さに罰則を与えて、ちょうどよい複雑さに保つ工夫です。
まずは全体像をつかめれば十分という人は、ここで区切って大丈夫です。「正則化は、複雑さに罰則を与える工夫」と押さえられていれば、この先の深掘りに進む土台はできています。
発展
ここからは、罰則の与え方のちがいと、代表的な手法を数式も交えて見ます。
2. 重みの大きさに罰則を与える
モデルの複雑さは、重みの大きさとして表れます。重みが大きく極端な値をとると、モデルは入力のわずかな違いに敏感に反応し、複雑にふるまいます。そこで、多くの正則化は、重みが大きくなりすぎることに罰則を与えます。
やり方は、誤差関数に罰則の項を足すことです。式で書くと、学習で小さくする目標 = もとの誤差 + 係数 × 罰則 となります。読み下すと、ずれの大きさに複雑さへの罰則を足し合わせ、その合計を小さくする、という意味です。前に付く係数は、罰則をどれだけ重く見るかを決める数で、大きいほど複雑さを強く嫌います。学習では、この合計を小さくするように進むので、ずれを小さくしつつ、重みも大きくなりすぎないように調整されます。罰則をどう作るかによって、いくつかの種類に分かれます。
- L0正則化は、0でない重みの個数そのものを罰則にします。使う重みの数を減らし、多くの重みをちょうど0にしようとします。ただし個数を数える罰則は計算で扱いにくく、そのままでは最適化が難しいという弱点があります。
- L1正則化は、重みの絶対値の和を罰則にします。絶対値とは、符号を外した大きさのことです。L1正則化には、いくつかの重みをちょうど0にしやすいという性質があります。0になった重みは使われなくなるため、結果として必要な重みだけが残る、すっきりしたモデルになります。
- L2正則化は、重みの二乗の和を罰則にします。二乗して足すため、大きな重みほど強く罰せられます。L2正則化は、重みをちょうど0にはしませんが、全体をまんべんなく小さく保ちます。
3つの罰則を式の形で並べると、次のようになります。
L0 の罰則 = 0でない重みの個数 L1 の罰則 = 重みの絶対値の合計 L2 の罰則 = 重みの二乗の合計
名前の数字は、重みを何乗して数えるかに対応しています。0乗は個数を数えることにあたり、1乗はそのままの大きさ、2乗は二乗した大きさです。名前を覚えるのではなく、この対応で思い出せます。
L0正則化は数を数えるので扱いにくく、実際にはL1正則化やL2正則化がよく使われます。
理解の確認
L0正則化は0でない重みの個数、L1正則化は重みの絶対値の和、L2正則化は重みの二乗の和を罰則にします。L1正則化は重みをちょうど0にしやすく、L2正則化は全体をまんべんなく小さく保ちます。
動かして確かめる
罰則をどれだけ重く見るか(正則化の強さ)を、下のトレーナーで実際に動かして確かめてみましょう。 強さを弱くしすぎるとモデルが複雑になりすぎて訓練データを丸暗記し、訓練誤差は低いのに検証誤差だけが 高くなります(過学習)。逆に強くしすぎるとモデルが単純になりすぎて、両方とも高いままになります。
スタディード / G検定 / 動く解説
罰則を強めると、丸暗記と本当の実力の差が縮まる。
正則化の強さを動かすと、モデルの複雑さが抑えられます。訓練誤差(丸暗記の当たり具合)と検証誤差(本当の実力)が、どう動くか確かめてください。
3. ラッソ回帰とリッジ回帰
いま見た正則化を数値を当てる回帰にあてはめたものに、それぞれ名前が付いています。
ラッソ回帰は、回帰にL1正則化を組み合わせたものです。L1正則化の性質を受けつぎ、多くの重みを0にして、影響の大きい要素だけを残します。どの要素が効いているのかを選び出したいときに向きます。
リッジ回帰は、回帰にL2正則化を組み合わせたものです。L2正則化の性質を受けつぎ、重みを0にはせず、全体をまんべんなく小さく保ちます。要素どうしが関連し合っているときに、値が極端になるのを抑えられます。
対応を整理すると、ラッソ回帰がL1正則化、リッジ回帰がL2正則化に対応します。名前とL1・L2の結び付きを取り違えないようにしましょう。
ポイント
ラッソ回帰はL1正則化、リッジ回帰はL2正則化に対応します。ラッソは重みを0にして要素を選び、リッジは全体を小さく保ちます。
理解の確認
ラッソ回帰は回帰にL1正則化を組み合わせたもので、重みを0にして影響の大きい要素を選びます。リッジ回帰は回帰にL2正則化を組み合わせたもので、重みを0にはせず全体を小さく保ちます。
4. ニューラルネットワーク向けのドロップアウト
ニューラルネットワークで特によく使われる正則化に、ドロップアウトがあります。これは重みに罰則を足すのではなく、学習のやり方に手を加える方法です。
ドロップアウトは、学習のたびに、隠れ層の神経細胞の一部をランダムに選んで、一時的に使わないようにします。休ませる細胞は学習のたびに変わります。すると、ネットワークは特定の細胞だけに頼れなくなり、いろいろな細胞が協力して判断するようになります。一部が欠けても答えを出せる、粘り強いネットワークになるわけです。
たとえるなら、いつも同じ数人だけに頼るチームではなく、誰が休んでも回るように全員が力をつけたチームを育てるようなものです。特定の細胞への偏った依存が減るため、過学習が起こりにくくなります。なお、細胞を休ませるのは学習のときだけで、実際に予測を行うときはすべての細胞を使います。
理解の確認
ドロップアウトは、学習のたびに隠れ層の神経細胞の一部をランダムに休ませる方法です。特定の細胞への依存を減らし、過学習を起こりにくくします。休ませるのは学習のときだけで、予測のときはすべての細胞を使います。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。