ロス関数とは何か:情報量からクロスエントロピー誤差までを順を追って理解する

こんにちは。ゆうせいです。

ニューラルネットワークが学習するとき、その裏側では必ずロス関数というものが働いています。しかし、代表的なロス関数であるクロスエントロピー誤差の式を初めて見ると、対数が並んでいて、なぜこの形なのかが分かりません。実は、この式は情報量という概念から段階的に組み立てられたものです。情報量、エントロピー、クロスエントロピーという順にたどっていけば、なぜこの形が損失として使われるのかが、無理なく理解できます。本記事では、ロス関数に求められる性質から出発し、情報量の定義を経て、クロスエントロピー誤差にたどり着くまでを解説します。

ロス関数とは何か

学習とは何をしているのか

まず、ニューラルネットワークの学習とは何かを確認します。

学習とは、ネットワークを構成するパラメータを調整して、最も正解が得られやすい状態にすることです。

ここでいうパラメータとは、たとえば全結合層であれば、入力ノードと出力ノードを結ぶ重み行列の、一つひとつの値です。

尺度がなければ最適化できない

ここで、一つ問題が生じます。

「最も正解が得られやすいようにする」ためには、「今どれくらい正解が得られているか」を測る尺度が必要です。

尺度がなければ、パラメータをどちらに動かせばよいかも判断できません。

この尺度を提供するのが、ロス関数です。損失関数、誤差関数とも呼ばれます。

ロス関数の役割

ロス関数は、ニューラルネットワークが入力に対して予測した出力を、正解と比較します。

そして、どれだけ損をしたか、どれだけまずい予測だったかを、一つの数値として弾き出します。

学習とは、このロス関数の値がより小さくなるように、パラメータを調整していく処理です。

ロス関数に望まれる二つの性質

どんな関数でもロス関数として使えるわけではありません。次の二つの性質が求められます。

性質1:常に正であること

ロス関数の値は、常に0以上でなければなりません。

理由は、最適化の処理を起動するためです。

常に正であれば、「この値をできるだけ0に近づける」という、明確な目標が立てられます。

もし負の値も取り得るなら、どこまで小さくすればよいのかが定まりません。無限にマイナスへ向かってしまいます。

性質2:正解から遠いほど大きく、近いほど小さいこと

出力が正解から遠いときは、損の度合いが大きいということですから、ロス関数の値も大きくなるべきです。

逆に、出力が正解に近いときは、値が小さくなるべきです。

この対応があって初めて、「値を小さくする」という操作が「正解に近づける」という意味を持ちます。

この二つの性質を満たす関数が、ロス関数の候補になります。

情報量という考え方

ここから、クロスエントロピー誤差を理解するための道具立てを整えます。まず、情報量から始めます。

定義

ある事象が起こる確率をPとするとき、その事象が持つ情報量は、次のように定義されます。

I = -\log_2 P

Pの対数を取って、マイナスをつけたものです。

高校数学で習った対数を思い出してください。底が2の対数は、「2を何乗したらその数になるか」を表します。

コインの例で確認する

コインを投げたとき、表が出る確率は \frac{1}{2} です。

情報量を計算します。

I = -\log_2 \frac{1}{2} = -(-1) = 1

情報量は1になりました。

なぜこれが「情報量」なのか

ここで、興味深い対応があります。

コインの裏表は、1ビットで表現できます。0を表、1を裏と決めれば、1ビットで裏表が特定できるからです。

計算した情報量も1でした。

つまり、情報量とは、何ビットあればその事象を特定したり表現したりできるか、という量なのです。

他の例で確認する

いくつか計算してみます。

トランプのマークは、スペード、ハート、ダイヤ、クラブの4種類です。特定のマークが出る確率は \frac{1}{4} です。

I = -\log_2 \frac{1}{4} = 2

情報量は2ビットです。4種類を区別するには、2ビット必要です。00、01、10、11の4通りで表せます。

方角を8つに分けた場合、特定の方角の確率は \frac{1}{8} です。

I = -\log_2 \frac{1}{8} = 3

情報量は3ビットです。8種類を区別するには、3ビット必要です。

情報量が表す意味

これらの例から、次の関係が読み取れます。

起こる確率が低い事象ほど、情報量が大きくなります。

直感的にも理解できます。「明日は晴れです」という、よくある出来事の知らせより、「明日は雪が降ります」という、めったにない出来事の知らせのほうが、多くの情報を含んでいると感じられます。

より詳しい情報であるほど、情報量が多い。この対応が、定義に組み込まれています。

エントロピー:情報量の平均

平均を考える理由

ここまでは、一つの事象について情報量を考えてきました。

次に、ある確率分布に含まれる、すべての事象についての情報量の平均を考えます。

なぜ平均を考えるのでしょうか。

それぞれの事象は、それぞれ異なる確率を持っているかもしれないからです。天気であれば、晴れの確率が高く、雪の確率が低い、といった具合です。

このような場合、単純に情報量を足して個数で割るのでは、実態を表しません。

確率で重み付けする

そこで、それぞれの情報量を、その事象が起こる確率で重み付けして足し合わせます。

H = -\sum_k P_k \log_2 P_k

これを平均情報量、別名エントロピーと呼びます。

起こりやすい事象の情報量には大きな重みがかかり、起こりにくい事象の情報量には小さな重みがかかります。

具体例で確認する

コインの裏表について計算します。表も裏も確率は \frac{1}{2} です。

H = -\left(\frac{1}{2}\log_2\frac{1}{2} + \frac{1}{2}\log_2\frac{1}{2}\right) = -\left(\frac{1}{2}\times(-1) + \frac{1}{2}\times(-1)\right) = 1

エントロピーは1です。

トランプのマークであれば、4つの事象それぞれが確率 \frac{1}{4} ですから、エントロピーは2になります。

8つの方角であれば、エントロピーは3です。

いずれも、情報量と同じ値になりました。すべての事象が同じ確率を持つ場合、平均を取っても値は変わらないためです。

クロスエントロピー:二つの分布を比べる

エントロピーとの違い

エントロピーは、一つの確率分布について、情報量の平均を取ったものでした。

ここからが、クロスエントロピーの発想です。

今度は、二つの確率分布を考えます。

そして、平均を取るときの重み付けは、一方の分布から取ってきます。

一方、情報量の計算に使う確率は、もう一方の分布から取ってきます。

定義

式で書くと、次のようになります。

H(t, y) = -\sum_k t_k \log y_k

t_k が重み付けに使う確率、y_k が情報量の計算に使う確率です。

これを交差平均情報量、あるいはクロスエントロピーと呼びます。

「交差」という言葉は、二つの分布が交差して使われていることを表しています。

二つの分布の違いを測る尺度になる

クロスエントロピーは、二つの確率分布がどれだけ違うかを測る尺度としても機能します。

二つの分布が一致していれば、クロスエントロピーは小さくなります。

大きく異なっていれば、クロスエントロピーは大きくなります。

ロス関数としてのクロスエントロピー

何を代入するか

ここで、機械学習の話に戻ります。

重み付けに使う確率として、正解ラベルを代入します。

情報量の計算に使う確率として、ニューラルネットワークの予測結果を代入します。

この組み合わせにより、次のことが言えます。

クロスエントロピーは、常に正になります。

予測結果の確率が正解と異なるほど、クロスエントロピーは大きくなります。

予測結果が正解に近いほど、クロスエントロピーは小さくなります。

ロス関数に求められた性質と一致する

冒頭で挙げた、ロス関数に望まれる二つの性質を思い出してください。

常に正であること。正解から遠いほど大きく、近いほど小さいこと。

クロスエントロピーは、この両方を満たしています。

つまり、クロスエントロピーは、まさにロス関数として望まれる性質を持っているのです。

これが、クロスエントロピー誤差が損失関数として広く使われている理由です。

二値問題で具体的に見る

ここまでの内容を、より具体的に確認します。話を単純にするため、二値問題に限定します。

正解ラベルは1か0

二値問題では、正解ラベルは1か0のどちらかです。

式の t_k は、1か0の値しか取りません。

式が単純になる

E = -\sum_k t_k \log y_k

t_k が0であれば、その項は0になり、消えてしまいます。

したがって、実際に残るのは、正解ラベルが1である項だけです。

E = -\log y_{正解}

つまり、クロスエントロピー誤差とは、正解ラベルが1のときの予測出力値の対数を足し込むだけの、単純な形になります。

グラフで確認する

-\log y のグラフを考えます。

横軸が予測出力 y 、縦軸がロス E です。

まず、値が常に正であることが確認できます。y が0から1の範囲にある限り、-\log y は必ず0以上になります。

次に、y が正解である1に近いほど、値が小さくなります。y = 1 のとき、-\log 1 = 0 となり、ロスはちょうど0です。

そして、y が正解から遠いほど、値が大きくなります。

数値で確認する

具体的な値を見てみます。

予測出力 yロス −log y状態
0.99約0.010ほぼ正解
0.9約0.105自信を持って正解
0.5約0.693迷っている
0.1約2.303外している
0.01約4.605自信を持って誤り
0.001約6.908確信を持って大きく誤り

この形が優れている理由

この数値の並びには、学習を進めるうえで、二つの重要な意味があります。

意味1:間違えたときは大いに学習させる

予測出力が正解から遠ければ遠いほど、ロスの値はとても大きくなります。

y が0.1から0.01へ、さらに0.001へと小さくなると、ロスは2.3、4.6、6.9と、急激に増えていきます。

これは、間違えたときにペナルティを大きく与えていることに対応します。

ペナルティが大きければ、パラメータの修正も大きくなります。つまり、間違えたときには大いに学習させる、という設計になっているのです。

意味2:正解に近づいたら慎重に探す

一方、正解に近づくにつれて、値の変化はゆるやかになります。

y が0.9から0.99へ変わっても、ロスは0.105から0.010へ、わずかに減るだけです。

これは、慎重に最適点を探していることに対応します。

すでにほぼ正解している状態で、パラメータを大きく動かしてしまえば、かえって悪化します。変化をゆるやかにすることで、細かな調整が可能になります。

二つの意味をまとめると

大きく外しているときは大胆に、正解に近いときは慎重に。

この使い分けが、対数という関数の形によって、自動的に実現されています。

このような性質があるため、クロスエントロピーはロス関数として好まれているのです。

初学者がつまずきやすい点

つまずき1:なぜマイナスがつくのか

情報量の定義には、マイナスがついています。

I = -\log_2 P

理由は、確率が0から1の範囲にあるためです。

この範囲では、対数は必ず0以下になります。\log_2 0.5 = -1\log_2 0.25 = -2 といった具合です。

情報量は、負の値では扱いにくいものです。そこでマイナスをつけて、正の値にしています。

つまずき2:対数の底の違いを気にしすぎる

情報量の説明では、底が2の対数を使いました。ビットという単位に対応するためです。

一方、機械学習の実装では、自然対数がよく使われます。

底が違っても、値が定数倍だけ変わるだけです。損失を最小化するという目的では、最小値を取る位置が変わらないため、影響はありません。

つまずき3:正解以外のクラスの予測値も影響すると思う

二値問題の説明で見たとおり、正解ラベルが0であるクラスの項は、掛け算によって消えてしまいます。

したがって、クロスエントロピー誤差の値そのものには、正解以外のクラスの予測確率は直接影響しません。

ただし、実際には、予測確率はソフトマックス関数などによって合計が1になるよう作られています。したがって、他のクラスの確率が高ければ、正解クラスの確率は自動的に低くなります。間接的には影響している、という理解が正確です。

理解度を確認する問い

次の問いで、理解を確認してみてください。

ロス関数に求められる二つの性質を挙げ、それぞれがなぜ必要なのかを説明してみてください。

サイコロを1回振って特定の目が出る事象の情報量は、何ビットになるでしょうか。

エントロピーとクロスエントロピーの違いを、使われる確率分布の数という観点から説明してみてください。

クロスエントロピー誤差が、間違えたときには大きなペナルティを与え、正解に近いときには変化がゆるやかになるのは、なぜでしょうか。

まとめ

ロス関数とは、ニューラルネットワークの予測を正解と比較し、どれだけまずい予測だったかを一つの数値として表すものです。学習とは、このロス関数の値がより小さくなるよう、パラメータを調整していく処理です。

ロス関数に求められる性質は二つあります。常に正であること。そして、正解から遠いほど大きく、近いほど小さくなることです。

代表的なロス関数であるクロスエントロピー誤差は、情報量という概念から組み立てられています。

情報量とは、ある事象が起こる確率の対数を取ってマイナスにしたものであり、その事象を何ビットで表現できるかという量に対応します。コインの裏表は1ビット、トランプのマークは2ビット、8方角は3ビットです。

ある確率分布に含まれるすべての事象について、確率で重み付けした情報量の平均を取ったものが、エントロピーです。

二つの確率分布を用い、重み付けは一方から、情報量の計算はもう一方から取ってきたものが、クロスエントロピーです。二つの分布の違いを測る尺度としても機能します。

重み付けに正解ラベルを、情報量の計算にニューラルネットワークの予測結果を代入すると、常に正であり、予測が正解から離れるほど大きくなるという、ロス関数に望まれる性質がそのまま得られます。

二値問題では、正解ラベルが1か0であるため、式は正解クラスの予測値の対数を取るだけの単純な形になります。予測が大きく外れているときはロスが急激に大きくなり、間違えたときに大いに学習させる働きをします。一方、正解に近づくと変化がゆるやかになり、慎重に最適点を探す働きをします。

次の学習ステップとして、まずは表計算ソフトや簡単なプログラムで、予測出力を0.001から0.999まで変化させながら、ロスの値がどう変わるかを計算してみてください。そのうえで、そのグラフを描いてみると、間違えたときの急峻さと、正解付近でのゆるやかさが、目で見て理解できるようになります。さらに、多クラス分類の場合について、正解以外の項が消える様子を式の上で追ってみると、二値問題との対応が明確になります。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。