1. 交差エントロピー(Cross-Entropy)とは?
交差エントロピー(Cross-Entropy)は、ディープラーニング、特に分類問題で広く使われる非常に重要な概念です。一言でいうと、「モデルの予測した確率分布と、実際の正解の確率分布がどれだけ異なっているか」を測るための指標です。
この「ズレ」が大きければ大きいほど交差エントロピーの値は大きくなり、逆に予測が正解に近ければ近いほど値は小さくなります。ディープラーニングの学習では、この交差エントロピーの値をできるだけ小さくすること(最小化)を目標に、モデルのパラメータを調整していきます。
この役割から、交差エントロピーは「損失関数(Loss Function)」や「誤差関数」の一種として利用されます。
2. なぜ損失関数として使われるのか?
ディープラーニングの分類問題では、他にも「平均二乗誤差(MSE)」のような損失関数がありますが、なぜ交差エントロピーが広く使われるのでしょうか。それにはいくつかの理由があります。
- 学習が効率的に進む: 交差エントロピーは、予測が大きく外れているときに大きなペナルティを与え、学習を促す力が強いという特徴があります。予測と正解の誤差が大きいほど、パラメータの更新量も大きくなるため、効率的に学習が進みます。
- 勾配消失問題の回避: 特にシグモイド関数やソフトマックス関数と組み合わせて使うことで、学習が停滞してしまう「勾配消失問題」を避けやすいという数学的なメリットがあります。
- 確率の「確信度」を反映できる: 単に正解か不正解かだけでなく、モデルがどれくらいの「自信」をもって予測したかを評価に含めることができます。 例えば、正解が「犬」の画像に対し、「90%の確率で犬」と予測した場合と「60%の確率で犬」と予測した場合では、前者の方がより良い予測と判断され、損失が小さくなります。
3. 交差エントロピーの種類
交差エントロピーは、解きたい分類問題の種類によって、主に2つのタイプが使い分けられます。
バイナリ交差エントロピー (Binary Cross-Entropy)
「ある」か「ない」か、「Yes」か「No」か、といった2つのクラスのどちらかに分類する問題(2値分類)で使用されます。
- 使用例:
- スパムメールか否かの判定
- 画像に猫が写っているかどうかの判定
- 顧客が商品を購入するかどうかの予測
- 活性化関数: 出力層では、出力を0から1の間の確率に変換するためにシグモイド関数が一緒に使われるのが一般的です。
カテゴリカル交差エントロピー (Categorical Cross-Entropy)
「犬」「猫」「鳥」のように、3つ以上のクラスのどれかに分類する問題(多クラス分類)で使用されます。
- 使用例:
- 手書き数字(0〜9)の認識
- ニュース記事のカテゴリ分類(政治、経済、スポーツなど)
- 画像に写っている動物の種類の特定
- 活性化関数: 出力層では、全クラスの確率の合計が1になるように変換するソフトマックス関数が一緒に使われるのが一般的です。
種類 | 対象となる問題 | 主な使用例 | セットで使われる活性化関数 |
---|---|---|---|
バイナリ交差エントロピー | 2値分類 (2つのクラスから1つを選ぶ) | スパム判定、陽性/陰性判定 | シグモイド関数 |
カテゴリカル交差エントロピー | 多クラス分類 (3つ以上のクラスから1つを選ぶ) | 手書き数字認識、画像分類 | ソフトマックス関数 |
※ 補足: カテゴリカル交差エントロピーには、正解ラベルの形式によって `CategoricalCrossentropy` と `SparseCategoricalCrossentropy` の2種類がありますが、基本的な考え方は同じです。
4. Pythonでの実装例
実際にコードを見ることで、理解が深まります。ここでは、有名なディープラーニングライブラリであるTensorFlow/Kerasを使った簡単な実装例を紹介します。
通常、モデルをコンパイルする際に、損失関数として指定するだけで利用できます。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# --- 2値分類の例 (バイナリ交差エントロピー) ---
model_binary = Sequential([
Dense(64, activation='relu', input_shape=(10,)),
Dense(1, activation='sigmoid') # 最終層の活性化関数はsigmoid
])
# モデルのコンパイル時に損失関数を指定
model_binary.compile(optimizer='adam',
loss='binary_crossentropy', # バイナリ交差エントロピーを指定
metrics=['accuracy'])
# --- 多クラス分類の例 (カテゴリカル交差エントロピー) ---
model_multi = Sequential([
Dense(64, activation='relu', input_shape=(20,)),
Dense(10, activation='softmax') # 最終層の活性化関数はsoftmax
])
# モデルのコンパイル時に損失関数を指定
model_multi.compile(optimizer='adam',
loss='categorical_crossentropy', # カテゴリカル交差エントロピーを指定
metrics=['accuracy'])
# TensorFlowでは、文字列で指定するだけで適切な関数が呼び出されます。
# tf.keras.losses.BinaryCrossentropy() のようにオブジェクトとして渡すことも可能です。
まとめ
交差エントロピーは、ディープラーニングの分類モデルを学習させる上で心臓部ともいえる重要な要素です。
この概念を理解することで、なぜモデルがそのように学習するのか、その裏側の仕組みをより深く知ることができます。