समस्या
लॉस फ़ंक्शन मॉडल की गलतियों को एक ऐसी संख्या में बदल देता है जिसे कम करना है। तीन आम लॉस के लिए compute_loss(kind, predictions, targets) लागू करें, जहाँ n भविष्यवाणियों की संख्या है:
"mse"(मीन स्क्वेयर्ड एरर): (p - t)² का औसत"mae"(मीन एब्सोल्यूट एरर): |p - t| का औसत"binary_cross_entropy": [t × ln(p) + (1 - t) × ln(1 - p)] के औसत का ऋणात्मक। पहले हर भविष्यवाणी p को [0.0000001, 0.9999999] की सीमा में सीमित करें, ताकि लघुगणक कभी ln(0) न हो।
इनपुट
kind: "mse", "mae" या "binary_cross_entropy"।
predictions: मॉडल की भविष्यवाणियाँ।
targets: सही मान (समान लंबाई)। क्रॉस-एंट्रॉपी में ये 0 या 1 होते हैं और भविष्यवाणियाँ 0 और 1 के बीच होती हैं।
आउटपुट
लॉस को दशमलव संख्या के रूप में लौटाएँ।
सीमाएँ
1 ≤ लंबाई ≤ 1,000
-1,000 ≤ हर मान ≤ 1,000 (क्रॉस-एंट्रॉपी में 0 ≤ p ≤ 1 और t ∈ {0, 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;
व्याख्या
स्क्वेयर्ड एरर: 0.5² = 0.25, 0.5² = 0.25 और 0² = 0। इनका औसत 0.5 / 3 ≈ 0.166667 है।
इनपुट:
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। आत्मविश्वास से की गई सही भविष्यवाणियों का लॉस कम होता है।
कैसे हल करें
पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।
संकेत 1
हर loss predictions को targets से element by element compare करती है और फिर per-example errors का average लेती है.
संकेत 2
Cross-entropy के लिए logarithm लेने से पहले predictions को 0 और 1 से थोड़ा दूर clamp करें.
संकेत 3
Absolute value और squaring अलग हैं, और cross-entropy में target हर log term पर weight की तरह काम करता है.
अपेक्षित जटिलता
समय O(n), अतिरिक्त स्थान O(1)
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।