• トップ
  • ブログ一覧
  • 【機械学習】過学習を防ぐ「正則化」
  • 【機械学習】過学習を防ぐ「正則化」

    メディアチームメディアチーム
    2020.01.28

    IT技術

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

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

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

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

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

    過学習が起きる原因

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

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

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

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

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

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

    重みを小さい値に保つ

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

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

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

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

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

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

    Ew=E+f(W)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 と表現します。)

    a1=a1+a2+an=k=1nak||a||_{1}=|a_{1}|+|a_{2}|+ \dots |a_{n}|= \sum_{k=1}^{n} a_{k}

    L2ノルム

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

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

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

    52+42=41\sqrt{5^{2} + 4^{2}} = \sqrt{41}

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

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

    a2=a12+a22++an2=k=1nak2||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ノルムに係数をかけた項

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

    を用います。

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

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

    の意味

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

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

    L1正則化の式

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

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

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

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

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

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

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

    さいごに

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

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

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

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

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

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

    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background