機械学習において、問題に応じて適切な損失関数と出力層の活性化関数を選ぶことは非常に重要です。ここでは、回帰問題、二分類問題、多分類問題のそれぞれに適した損失関数と活性化関数をまとめました。
1. 回帰問題
回帰問題では、モデルが連続値を予測します。
問題 | 損失関数 | 出力層の活性化関数 |
---|---|---|
回帰 | 均方誤差(MSE) | なし |
説明:
- 回帰問題の場合、損失関数として均方誤差(MSE) がよく使用されます。出力層には活性化関数を使わず、そのまま連続的な数値を出力します
2. 二分類問題
二分類問題では、出力が「はい」または「いいえ」の2つのクラスのどちらかに分類されます。
問題 | 損失関数 | 出力層の活性化関数 | 出力張量の長さ |
---|---|---|---|
二分類 | バイナリ交差エントロピー(BCELoss) | シグモイド(Sigmoid) | 1 |
二分類 | クロスエントロピー(CrossEntropyLoss) | なし | 2 |
説明:
- BCELossでは、出力層の活性化関数としてシグモイドを使い、出力を0または1の確率値で表示します
- CrossEntropyLossの場合、シグモイドは不要で、2クラスの出力(0または1)をそのまま出力します
3. 多分類問題
多分類問題では、複数のクラスに分類する問題で、出力はクラス数と同じ長さのベクトルになります。
問題 | 損失関数 | 出力層の活性化関数 |
---|---|---|
多分類 | クロスエントロピー(CrossEntropyLoss) | なし |
多分類 | NLLLoss(負の対数尤度) | torch.log_softmax |
説明:
- CrossEntropyLossは、各クラスのスコアをそのまま出力層から得るため、活性化関数は使用しません
- NLLLossを使用する場合、出力層ではtorch.log_softmaxを使って、確率的なスコアを出力します。この場合、ラベルは**独熱表現(one-hot encoding)**でなければなりません
これらの損失関数と活性化関数の組み合わせを理解することで、問題に最適なモデルを構築できます。