すべてのチャレンジ
簡単 0件解決済み 正答率0%

Loss Functions: MSE, MAE and Cross-Entropy

Measure how wrong a model's predictions are with mean squared error, mean absolute error or binary cross-entropy.

このチャレンジで学べること

  • Measure prediction error in three ways
  • Clip probabilities to avoid log(0)
  • Choose a loss for regression or classification

問題

翻訳を表示

A loss function turns a model's mistakes into one number to minimize. Implement compute_loss(kind, predictions, targets) for three common losses, where n is the number of predictions:

  • "mse" (mean squared error): average of (p - t)²
  • "mae" (mean absolute error): average of |p - t|
  • "binary_cross_entropy": -average of [t × ln(p) + (1 - t) × ln(1 - p)]. First clip each prediction p to the range [0.0000001, 0.9999999] so the logarithm is never ln(0).

Input

kind: "mse", "mae" or "binary_cross_entropy".

predictions: The model's predictions.

targets: The correct values (same length). For cross-entropy they are 0 or 1 and predictions are between 0 and 1.

Output

Return the loss as a decimal number.

制約

1 ≤ length ≤ 1,000

-1,000 ≤ each value ≤ 1,000 (0 ≤ p ≤ 1 and t ∈ {0, 1} for cross-entropy)

例

例 1
入力:
kind = "mse"
targets = [3.0, -0.5, 2.0]
predictions = [2.5, 0.0, 2.0]

期待される出力:
expected = 0.166667
入力:
std::string kind = "mse";
std::vector<double> targets = {3.0, -0.5, 2.0};
std::vector<double> predictions = {2.5, 0.0, 2.0};

期待される出力:
double expected = 0.166667;
入力:
string kind = "mse";
double[] targets = new double[] {3.0, -0.5, 2.0};
double[] predictions = new double[] {2.5, 0.0, 2.0};

期待される出力:
double expected = 0.166667;

解説

Squared errors: 0.5² = 0.25, 0.5² = 0.25 and 0² = 0. Their average is 0.5 / 3 ≈ 0.166667.

例 2
入力:
kind = "binary_cross_entropy"
targets = [1.0, 0.0]
predictions = [0.9, 0.2]

期待される出力:
expected = 0.164252
入力:
std::string kind = "binary_cross_entropy";
std::vector<double> targets = {1.0, 0.0};
std::vector<double> predictions = {0.9, 0.2};

期待される出力:
double expected = 0.164252;
入力:
string kind = "binary_cross_entropy";
double[] targets = new double[] {1.0, 0.0};
double[] predictions = new double[] {0.9, 0.2};

期待される出力:
double expected = 0.164252;

解説

-(ln(0.9) + ln(1 - 0.2)) / 2 = -(-0.105361 - 0.223144) / 2 ≈ 0.164252. Confident correct predictions give a small loss.

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

Each loss compares predictions to targets element by element and then averages the per-example errors.

ヒント 2

For cross-entropy, clamp predictions away from 0 and 1 before taking logarithms.

ヒント 3

Remember that absolute value and squaring are different, and cross-entropy uses the target as a weight on each log term.

目安の計算量

O(n) time, O(1) extra space

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。