Tất cả thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 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.

Bạn sẽ học được gì

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

Đề bài

Xem bản dịch

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.

Ràng buộc

1 ≤ length ≤ 1,000

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

Ví dụ

Ví dụ 1
Đầu vào:
kind = "mse"
targets = [3.0, -0.5, 2.0]
predictions = [2.5, 0.0, 2.0]

Kết quả mong đợi:
expected = 0.166667
Đầu vào:
std::string kind = "mse";
std::vector<double> targets = {3.0, -0.5, 2.0};
std::vector<double> predictions = {2.5, 0.0, 2.0};

Kết quả mong đợi:
double expected = 0.166667;
Đầu vào:
string kind = "mse";
double[] targets = new double[] {3.0, -0.5, 2.0};
double[] predictions = new double[] {2.5, 0.0, 2.0};

Kết quả mong đợi:
double expected = 0.166667;

Giải thích

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

Ví dụ 2
Đầu vào:
kind = "binary_cross_entropy"
targets = [1.0, 0.0]
predictions = [0.9, 0.2]

Kết quả mong đợi:
expected = 0.164252
Đầu vào:
std::string kind = "binary_cross_entropy";
std::vector<double> targets = {1.0, 0.0};
std::vector<double> predictions = {0.9, 0.2};

Kết quả mong đợi:
double expected = 0.164252;
Đầu vào:
string kind = "binary_cross_entropy";
double[] targets = new double[] {1.0, 0.0};
double[] predictions = new double[] {0.9, 0.2};

Kết quả mong đợi:
double expected = 0.164252;

Giải thích

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

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

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

Gợi ý 2

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

Gợi ý 3

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

Độ phức tạp mong đợi

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

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.