1. HOME
  2. ブログ
  3. IT技術
  4. 【機械学習】過学習を防ぐ「正則化」

【機械学習】過学習を防ぐ「正則化」

「過学習」は問題になるテーマの1つ

機械学習の分野では様々な困難があります。

中でも、「過学習」は特に問題になることが多いテーマの1つです。

【過学習】
学習の際に訓練データに過度に対応してしまい、新たな未知のデータに対する予測がうまくできなくなった状態のこと

さて、この過学習が起きてしまう原因は一体何なのでしょうか?

こちらの記事もオススメ!

過学習が起きる原因

過学習が起きる主な原因は、以下の3つです。

(1)重みの値が大きいこと
(2)ニューロンの数が多いこと(=重みパラメータの数が多いこと)
(3)訓練データが少ないこと

この中で今回お話する正則化は(1)に対する解決策となります。

ちなみに、(2)は各層のニューロンの数を手動で調節すること。

(3)は訓練データを増やすことで解決できます。

補足ですが、手動で調節する値のことを「ハイパーパラメータ」と呼びます。

重みを小さい値に保つ

「(1)重みの値が大きいこと」の問題を解決するためには、機械学習で使用する重みを小さい値に保てば良いことがわかるかと思います。

その「重みを小さい値に保つ方法」が正則化です。

正式には『機械学習で過学習に陥るのを防ぐために、損失関数に特定の項を足す手法のこと』を正則化と呼びます。

機械学習では、「損失関数が最小値を取るように重みの値を決定する」ため、損失関数に新たに項が足されれば、その項自体も小さい値を取るように調整され、それが結果的に重みを小さい値に保つことへ繋がるというわけです。

損失関数に特定の項を足した式

損失関数に特定の項を足した式は、次のようになります。

$$Ew = E + f(W)$$
Ew : 新たに定義する損失関数
E : 元々の損失関数
f(W) : 重みを小さくするための項

正則化の種類

正則化では普通、「L1正則化」もしくは、「L2正則化」が用いられます。

L1 や L2 とは、ノルム(移動距離)の種類のことです。

それでは、L1ノルムと、L2ノルムについて説明します。

L1ノルム

まず、L1ノルムについて説明するために、ベクトルa=(5,4) を考えてみます。

勘違いされる方が多いので補足しておきますが、ベクトルとは本来、複数個の要素を1列に並べたもののことを指します。

そのベクトルが2次元や3次元であれば、たまたま矢印として視覚的に表現可能ということであって、ベクトル=矢印は必ずしも成り立たないので注意してください。

このベクトルは、図のように右に「5」、上に「4」移動することを表していると考えることができるため、合計で「9」移動したと解釈できます。

このように、マス目上で考える距離のことを L1ノルムと呼びます。

3次元以上についても考え方を拡張し、ベクトルa の L1ノルムは一般的に次のように表すことができます。

(ベクトルa の L1ノルムは ||、||a||1 と表現します。)

$$||a||_{1}=|a_{1}|+|a_{2}|+ \dots |a_{n}|= \sum_{k=1}^{n} a_{k}$$

L2ノルム

一方でL2ノルムは、L1ノルムよりもシンプルです。

L2ノルムは、単純に始点と終点を結んだ時の距離を表します。

先ほどのベクトルaの例で言うと、L2ノルムは以下のようになります。

$$\sqrt{5^{2} + 4^{2}} = \sqrt{41}$$

3次元以上についても考え方を拡張し、ベクトルa の L2ノルムは一般的に次のように表すことができます。

(ベクトルa の L2ノルムは、||a||2 と表現します。)

$$||a||_{2} = \sqrt{a_{1} ^{2} + a_{2} ^{2} + \dots + a_{n}^{2}} = \sqrt{\sum_{k=1}^{n}a_{k} ^{2}}$$

L1正則化とL2正則化

L1正則化とL2正則化では、先ほどのL1ノルムやL2ノルムを用いた項を損失関数に加算していきます。

正則化の際に用いる項のことをペナルティ項と読んだりもします。

これは、大きな重みの値を取ることに対してペナルティを課すためです。

L1正則化の式

L1正則化では、L1ノルムに係数をかけた項

$$\lambda \sum_{k=1}^{n}|w_{k} |$$
(\(w_{k}\)は各々の重みを表す)

を用います。

これがL1正則化の式です。

この値を最小化することで、各重みが大きくなりすぎてしまうのを防ぐわけです。

\(\lambda\) の意味

また 、\(\lambda\) の意味についてですが、 \(\lambda\) は正則化の効果の強さをコントロールするための値です。

\(\lambda\) が大きければ大きいほど、損失関数の値が大きくなってしまうため、その分重みは小さくなろうとすることで整合性を保とうとします。

L1正則化の式

一方、L2正則化の項は次のようになります。

$$\lambda \sum_{k=1}^{n}w_{k}^{2} $$
(\(w_{k}\)は各々の重みを表す)

L2正則化では、L1正則化のように絶対値が出てこないので、扱いやすい数式となります。

そのため、普通はL2正則化の方が好まれます

実際の現場で過学習の抑制に使われるのは、L2正則化であることが多いです。

L2正則化についてもλの役割は同様です。

※L2正則化では、ペナルティ項にAではなくBを用いる場合もあります。
これは、誤差逆伝播法を用いて誤差を求める際に、微分しても分数が出ないようにするためです。しかし、この数値自体は本質的な問題ではありません。

さいごに

いかがでしたでしょうか?

正則化は、機械学習において非常に重要な概念です。

L1ノルム や L2ノルムという、高校数学では聞かないような用語が登場するため、なんとなく難しそうだと感じ、今まで敬遠していた方も少なくないでしょう。

しかし、項目を1つずつ着実に理解していけばそれほど難しい概念ではありません。

今回の記事で正則化の仕組みについてしっかりと理解して、人工知能スペシャリストとしてスキルアップを目指しましょう!

(株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
機械学習でのシステム開発依頼・お見積もりはこちらまでお願いします。
また、機械学習系エンジニアを積極採用中です!詳しくはこちらをご覧ください。

※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事