クロスエントロピー誤差とは?AIの「答え合わせ」の仕組みを数式から徹底解説!

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

機械学習、特にディープラーニングの世界に足を踏み入れたばかりのあなたが、おそらく最初に出会うであろう壁の一つが「損失関数」ではないでしょうか?中でも「クロスエントロピー誤差」という言葉と、その数式を見て「うっ…」と固まってしまった経験はありませんか?

E = - \sum_{i} t_i \log(y_i)

なんだか難しそうな記号が並んでいますよね。でも、安心してください!この数式は、AIが賢くなるための「答え合わせ」の仕組みを表す、とても重要で、そして実はとてもシンプルな考え方に基づいているんです。

この記事では、新人エンジニアのあなたに向けて、クロスエントロピーの数式を世界一わかりやすく解説していきます。読み終わる頃には、「なるほど、そういうことか!」と、きっとスッキリしているはずですよ。

クロスエントロピーって、そもそも何?

まず、専門用語からいきましょう。「クロスエントロピー誤差」、これは一体何者なのでしょうか?

一言でいうと、これは「2つの確率分布が、どれだけ違うか」を測るためのモノサシです。

…と言われても、まだピンとこないかもしれませんね。もっと身近な例で考えてみましょう。

あなたは、明日の天気を「晴れが80%、曇りが10%、雨が10%」と予測したとします。これがAIの予測、つまり「予測の確率分布」です。

そして、実際の結果は「晴れ」でした。これが「正解の確率分布」(晴れが100%、他は0%)です。

このとき、あなたの予測と実際の結果、どれくらい「ズレて」いましたか?クロスエントロピーは、この「予測」と「正解」のズレの大きさを、一つの数値として計算してくれる道具なんです。

機械学習の分類問題では、AIが画像を見て「この画像は犬である確率が70%、猫である確率が20%、鳥である確率が10%」といった予測を出します。そして、正解データ(「この画像は猫です」)と見比べて、その「ズレ」を計算します。このズレが「損失」や「誤差」と呼ばれるもので、AIはこの誤差が小さくなるように、何度も学習を繰り返していくわけですね。

クロスエントロピーは、その「答え合わせ」のやり方として、非常に優秀な方法というわけです!

恐怖の数式を解剖しよう!

さて、いよいよ本丸の数式を見ていきましょう。もう一度登場してもらいます。

E = - \sum_{i} t_i \log(y_i)

大丈夫、一つずつ記号を分解すれば怖くありません。一緒に見ていきましょう!

E (Error)

これは単純に「誤差(Error)」の頭文字です。これから計算するクロスエントロピー誤差の全体の値を表しています。

Σ (シグマ)

これは数学でよく見る「合計」を意味する記号ですね。「全部足し合わせなさい!」という命令です。何を足し合わせるかは、この記号の右側を見ていきます。

i

これは「分類の選択肢(クラス)の番号」です。例えば「犬、猫、鳥」の3つのクラスに分類する問題なら、iは「犬」「猫」「鳥」のそれぞれを指します。コンピュータの世界では、1番目が犬、2番目が猫、3番目が鳥、といった具合に番号を振って管理します。Σと組み合わせることで、「全てのクラスについて計算して、最後に合計してね」という意味になります。

t_i (teacher)

tは「教師(teacher)データ」、つまり「正解ラベル」のことです。

先ほどの「犬、猫、鳥」の例で、正解が「猫」だとします。このとき、コンピュータが扱いやすいように「one-hot表現」という形式にします。

  • 犬 (i=1): t_1 = 0
  • 猫 (i=2): t_2 = 1
  • 鳥 (i=3): t_3 = 0

このように、正解のクラスだけが「1」になり、それ以外はすべて「0」になるデータです。t_iは、「i番目のクラスは正解ですか?(Yesなら1, Noなら0)」を示しているんですね。

y_i (yield)

yはAIモデルの「予測結果(yield)」です。具体的には、モデルが出力した「i番目のクラスである確率」を指します。

通常、このy_iは、モデルの最終層で「ソフトマックス関数」という処理を経て出力されます。ソフトマックス関数を通すことで、全てのクラスの確率を合計すると1(100%)になるように調整されるのです。

例えば、AIが画像を見て、

  • 犬である確率 (y_1): 0.1 (10%)
  • 猫である確率 (y_2): 0.7 (70%)
  • 鳥である確率 (y_3): 0.2 (20%)と予測したとします。この0.1, 0.7, 0.2がそれぞれy_iの値になります。

log (対数)

最後にして最大の謎、log(対数)です。なぜここで対数なんてものが出てくるのでしょうか?これには2つの大きな理由があります。

  1. 計算を安定させるため
    確率は0から1の間の小さな値です。たくさんの確率を掛け算していくと、コンピュータの中では数値が小さくなりすぎて「0」になってしまうことがあります(これをアンダーフローと言います)。対数をとると、掛け算を足し算に変換できる性質があるため、こうした問題を避け、計算を安定させることができるのです。
  2. 間違いに大きなペナルティを与えるため
    こちらがもっと重要な理由です!log(x)のグラフを思い出してみてください。xが1のときlog(x)は0ですが、xが0に近づくにつれて、log(x)の値はマイナス無限大へと急降下していきます。数式全体には先頭にマイナス(-)がついていますよね。E = - \log(y_i) ということは、AIの予測y_iが正解から遠ざかり、0に近づくほど、誤差Eはプラスの無限大へと爆発的に大きくなるのです!AIが「正解は猫なのに、猫である確率は0.001%!」なんていう大外れな予測をしたら、「おい!全然違うじゃないか!」と、ものすごく大きな誤差(ペナルティ)を突きつける。これがlogを使う最大の目的なのです。

具体的な計算で体感してみよう!

理屈がわかったところで、実際に数字を入れて計算してみましょう。「犬、猫、鳥」の3クラス分類で、正解は「猫」とします。

正解ラベルtは、t_犬=0, t_猫=1, t_鳥=0 ですね。

ケース1:AIの予測がかなり正確だった場合

AIが「これは猫っぽいぞ」と、かなり自信のある予測をしたとします。

  • y_犬 = 0.1 (10%)
  • y_猫 = 0.8 (80%)
  • y_鳥 = 0.1 (10%)

このときのクロスエントロピー誤差を計算してみましょう。

E = - (0 \times \log(0.1) + 1 \times \log(0.8) + 0 \times \log(0.1))

tが0の部分は、何を掛けても0になって消えてしまいます。残るのは正解である「猫」の部分だけです。

E = - (1 \times \log(0.8)) = - \log(0.8) \approx 0.223

誤差は「約0.223」と、比較的小さな値になりました。

ケース2:AIの予測が大きく外れた場合

今度は、AIが「これは犬だ!」と、見当違いな予測をしたとします。

  • y_犬 = 0.7 (70%)
  • y_猫 = 0.1 (10%)
  • y_鳥 = 0.2 (20%)

さあ、誤差はどうなるでしょうか?

E = - (0 \times \log(0.7) + 1 \times \log(0.1) + 0 \times \log(0.2))

今回も残るのは「猫」の部分だけです。

E = - (1 \times \log(0.1)) = - \log(0.1) \approx 2.303

誤差は「約2.303」となり、ケース1と比べて10倍以上も大きな値になりました!

どうでしょうか?AIの予測が正解に近ければ誤差は小さく、正解から遠ければ誤差は爆発的に大きくなる、という感覚が掴めましたか?AIは、この大きな誤差を突きつけられて、「これはいかん!もっと猫の確率が高くなるようにパラメータを調整しなきゃ!」と学習を進めていくのです。

メリットと注意点

クロスエントロピー誤差を使うことのメリットと、注意点を整理しておきましょう。

メリット

  • 学習が効率的に進む: 予測が外れたときに大きなペナルティを与える設計になっているため、モデルが間違いを素早く修正しようとします。また、数学的に微分したときの形がとてもシンプルになるため、勾配消失問題という学習が停滞する現象が起きにくく、効率的な学習が可能です。

注意点(デメリット)

  • 分類問題で使われる: この方法は、基本的に「どのクラスに属するか」を当てる分類問題で使われます。数値を予測する回帰問題では、平均二乗誤差など別の損失関数が使われるのが一般的です。
  • ソフトマックス関数とセットで使う: クロスエントロピー誤差は、モデルの出力が「合計すると1になる確率」であることを前提としています。そのため、モデルの最終出力層には、そうした出力形式に整えてくれる「ソフトマックス関数」を使うのがお約束です。

次のステップへ

クロスエントロピーの仕組みを理解できたあなたは、もう一歩先に進む準備ができましたね。

今後の学習として、ぜひ以下のテーマを調べてみてください。

  1. ソフトマックス関数: なぜクロスエントロピーとセットで使われるのか?その数式と微分について学ぶと、AIの学習の裏側がさらによく見えてきます。
  2. KLダイバージェンス: クロスエントロピーと非常によく似た概念に「KLダイバージェンス」があります。情報理論という分野の考え方で、2つの確率分布の「隔たり」を測る指標です。これを学ぶと、なぜクロスエントロピーが「情報のズレ」を表現できるのか、より本質的な理解に繋がります。
  3. 自分で実装してみる: PythonのPyTorchやTensorFlowといったライブラリには、クロスエントロピー誤差を計算する関数が用意されています。実際に簡単な分類モデルを作り、損失関数の値がどのように変化していくかを見てみるのが、最も確実な理解への道です!

まとめ

今回は、AIの学習における「答え合わせ」の仕組み、クロスエントロピー誤差について、その数式を分解しながら解説しました。

  • クロスエントロピーは「予測」と「正解」のズレを測るモノサシ。
  • 数式のlogは、間違いに対して大きなペナルティを与えるための重要な仕組み。
  • 予測が正解に近いほど誤差は小さく、遠いほど大きくなる。

一見すると複雑な数式も、その一つ一つの記号が持つ意味を理解すれば、決して怖いものではありません。むしろ、AIが賢くなるための非常に合理的で美しい仕組みであることがわかっていただけたのではないでしょうか。

損失関数は、あなたがAIを育てていく上で、その成長度合いを測るための大切な指標です。ぜひ仲良くなって、これからの開発に活かしてくださいね!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

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