ग्रेडिएंट बूस्टिंग (वैकल्पिक इकाई)

रेग्रेशन समस्याओं में, साइन वाली गड़बड़ी को अनुमान और लेबल के बीच के अंतर के तौर पर तय करना सही होता है. हालांकि, दूसरी तरह की समस्याओं में, इस रणनीति से अक्सर खराब नतीजे मिलते हैं. ग्रेडिएंट बूसटिंग में इस्तेमाल की जाने वाली बेहतर रणनीति यह है:

  • न्यूरल नेटवर्क में इस्तेमाल किए जाने वाले लॉस फ़ंक्शन की तरह ही लॉस फ़ंक्शन तय करें. उदाहरण के लिए, किसी कैटगरी से जुड़ी समस्या के लिए एन्ट्रॉपी (इसे लॉग लॉस भी कहा जाता है).
  • बेहतर मॉडल के आउटपुट के हिसाब से, नुकसान के ग्रेडिएंट का अनुमान लगाने के लिए, खराब मॉडल को ट्रेन करें.

औपचारिक तौर पर, लॉस फ़ंक्शन $L(y,p)$ दिया गया है, जहां $y$ एक लेबल है और $p$ एक अनुमान है. चरण $i$ में कमज़ोर मॉडल को ट्रेन करने के लिए इस्तेमाल किया जाने वाला स्यूडो रिस्पॉन्स $z_i$ यह है:

$$ z_i = \frac {\partial L(y, F_i)} {\partial F_i} $$

कहां:

  • $F_i$, बेहतर मॉडल का अनुमान है.

पिछला उदाहरण, एक रिग्रेशन समस्या थी: इसका मकसद संख्या वाली वैल्यू का अनुमान लगाना था. रेग्रेशन के मामले में, स्क्वेयर्ड गड़बड़ी एक सामान्य लॉस फ़ंक्शन है:

$$ L(y,p) = (y - p)^2 $$

इस मामले में, ग्रेडिएंट यह है:

$$ z = \frac {\partial L(y, F_i)} {\partial F_i} = \frac {\partial(y-p)^2} {\partial p} = -2(y - p) = 2 \ \text{signed error} $$

दूसरे शब्दों में, ग्रेडिएंट हमारे उदाहरण में, साइन वाली गड़बड़ी है, जिसका फ़ैक्टर 2 है. ध्यान दें कि डेटा में होने वाली गिरावट की वजह से, स्थिर फ़ैक्टर का कोई मतलब नहीं है. ध्यान दें कि यह समानता सिर्फ़ स्क्वेयर्ड गड़बड़ी वाले रिग्रेशन समस्याओं के लिए सही है. सुपरवाइज़्ड लर्निंग की अन्य समस्याओं (जैसे, क्लासिफ़िकेशन, रेंकिंग, और प्रतिशत में गिरावट के साथ रेग्रेसन) के लिए, ग्रेडिएंट और साइन वाली गड़बड़ी के बीच कोई समानता नहीं है.

न्यूटन के तरीके के चरण की मदद से लीफ़ और स्ट्रक्चर को ऑप्टिमाइज़ करना

न्यूटन का तरीका, ग्रेडिएंट डिसेंट की तरह ही ऑप्टिमाइज़ेशन का एक तरीका है. हालांकि, ग्रेडिएंट डिसेंट के उलट, ऑप्टिमाइज़ करने के लिए न्यूटन का तरीका, फ़ंक्शन के ग्रेडिएंट (पहले डेरिवेटिव) और दूसरे डेरिवेटिव, दोनों का इस्तेमाल करता है.

ग्रेडिएंट डिसेंट का एक चरण इस तरह है:

$$ x_{i+1} = x_i - \frac {df}{dx}(x_i) = x_i - f'(x_i) $$

और न्यूटन का तरीका इस तरह से:

$$ x_{i+1} = x_i - \frac {\frac {df}{dx} (x_i)} {\frac {d^2f}{d^2x} (x_i)} = x_i - \frac{f'(x_i)}{f''(x_i)}$$

इसके अलावा, न्यूटन के तरीके को ग्रेडिएंट बूस्ट किए गए ट्री की ट्रेनिंग में दो तरीकों से इंटिग्रेट किया जा सकता है:

  1. किसी ट्री को ट्रेनिंग देने के बाद, हर लीफ़ पर न्यूटन का एक चरण लागू किया जाता है और उसकी वैल्यू बदल दी जाती है. ट्री स्ट्रक्चर में कोई बदलाव नहीं होता. सिर्फ़ लीफ़ वैल्यू बदलती हैं.
  2. ट्री ग्रोथ के दौरान, शर्तों को एक स्कोर के हिसाब से चुना जाता है. इसमें न्यूटन फ़ॉर्मूला का एक कॉम्पोनेंट शामिल होता है. ट्री के स्ट्रक्चर पर असर पड़ता है.
YDF कोड
YDF में:
  • YDF हमेशा लीफ़ पर न्यूटन का चरण लागू करता है (पहला विकल्प).
  • use_hessian_gain=True का इस्तेमाल करके, दूसरा विकल्प चालू किया जा सकता है.