เช่นเดียวกับกระเป๋าและการขยายภาพ การไล่ระดับสีคือวิธีการที่ใช้นอกเหนือจาก อีกอัลกอริทึมหนึ่งของแมชชีนเลิร์นนิง การเพิ่มการไล่ระดับสีอย่างไม่เป็นทางการเกี่ยวข้องกับ รูปแบบสองประเภท ได้แก่
- "อ่อน" โมเดลแมชชีนเลิร์นนิง ซึ่งโดยปกติจะเป็นแผนผังการตัดสินใจ
- "แรง" โมเดลแมชชีนเลิร์นนิง ซึ่งประกอบด้วย
ในการเพิ่มการไล่ระดับสี ในแต่ละขั้นตอน โมเดลที่ทำงานแบบอ่อนแอจะได้รับการฝึกให้คาดการณ์ "ข้อผิดพลาด" ของโมเดลที่มีประสิทธิภาพในปัจจุบัน (ซึ่งเรียกว่าการตอบสนองจำลอง) เราจะอธิบาย "ข้อผิดพลาด" ในภายหลัง ระหว่างนี้ ให้สมมติว่าเป็น "ข้อผิดพลาด" คือความแตกต่างระหว่าง การคาดการณ์และป้ายกำกับการเกิดปัญหาซ้ำ โมเดลที่ไม่มีประสิทธิภาพ (ซึ่งก็คือ "ข้อผิดพลาด") คือ แล้วเพิ่มลงในโมเดลที่มีประสิทธิภาพด้วยเครื่องหมายลบเพื่อลดข้อผิดพลาดของฟิลด์ รูปแบบที่แข็งแกร่ง
การไล่ระดับสีเป็นการเพิ่มสีแบบวนซ้ำ การทำซ้ำแต่ละครั้งจะเรียกใช้สูตรต่อไปนี้
\[ F_{i+1} = F_i - f_i \]
โดยมี
- $F_i$ เป็นโมเดลที่มีประสิทธิภาพในขั้นตอนที่ $i$
- $f_i$ เป็นโมเดลแบบอ่อนในขั้นตอนที่ $i$
การดำเนินการนี้จะทำซ้ำๆ จนกว่าเกณฑ์จะหยุดครบ เช่น ค่าสูงสุด จำนวนการทำซ้ำ หรือหากรูปแบบ (เข้มงวด) เริ่มมีการปรับมากเกินไปตามที่วัดใน ชุดข้อมูลการตรวจสอบความถูกต้องแยกต่างหาก
เรามาดูการเพิ่มการไล่ระดับสีในชุดข้อมูลการถดถอยง่ายๆ กัน ซึ่ง
- วัตถุประสงค์คือการคาดการณ์ $y$ จาก $x$
- โมเดลที่มีประสิทธิภาพจะเริ่มต้นให้เป็นค่าคงที่ศูนย์: $F_0(x) = 0$
# Simplified example of regressive gradient boosting.
y = ... # the labels
x = ... # the features
strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.
for i in range(num_iters):
# Error of the strong model
error = strong_predictions - y
# The weak model is a decision tree (see CART chapter)
# without pruning and a maximum depth of 3.
weak_model = tfdf.keras.CartModel(
task=tfdf.keras.Task.REGRESSION,
validation_ratio=0.0,
max_depth=3)
weak_model.fit(x=x, y=error)
strong_model.append(weak_model)
weak_predictions = weak_model.predict(x)[:,0]
strong_predictions -= weak_predictions
มาใช้รหัสนี้กับชุดข้อมูลต่อไปนี้กัน
รูปที่ 25 ชุดข้อมูลการถดถอยสังเคราะห์ที่มีฟีเจอร์ตัวเลข 1 รายการ
นี่คือ 3 พล็อตหลังจากการบูสต์การไล่ระดับสีครั้งแรก อัลกอริทึม:
รูปที่ 26 สามพล็อตหลังจากการทำซ้ำครั้งแรก
สิ่งที่ควรทราบเกี่ยวกับพล็อตในรูปที่ 26 มีดังนี้
- พล็อตแรกแสดงการคาดการณ์ของโมเดลที่มีประสิทธิภาพ ซึ่งในปัจจุบัน 0 เสมอ
- พล็อตที่ 2 แสดงข้อผิดพลาด ซึ่งเป็นป้ายกำกับของโมเดลที่ไม่รัดกุม
- พล็อตที่ 3 จะแสดงโมเดลที่ไม่ปลอดภัย
รูปแบบแรกที่ไม่รัดกุมคือการเรียนรู้ แบบคร่าวๆ ของป้ายกำกับและ จะโฟกัสบริเวณด้านซ้ายของ พื้นที่เด่น (ส่วนที่มีการเปลี่ยนแปลงมากที่สุด และจึงเป็นข้อผิดพลาดมากที่สุดสำหรับรูปแบบที่ไม่ถูกต้องอย่างต่อเนื่อง)
ต่อไปนี้เป็นพล็อตเดียวกันสำหรับการปรับปรุงอัลกอริทึมอีกครั้ง
รูปที่ 27 3 พล็อตหลังการทำซ้ำครั้งที่ 2
สิ่งที่ควรทราบเกี่ยวกับพล็อตในรูปที่ 27 มีดังนี้
- ตอนนี้โมเดลที่มีประสิทธิภาพจะมีการคาดคะเนของโมเดลแบบอ่อนของ ซ้ำแล้วซ้ำอีก
- ข้อผิดพลาดใหม่ของโมเดลที่มีประสิทธิภาพจะมีขนาดเล็กกว่าเล็กน้อย
- ตอนนี้การคาดคะเนใหม่ของโมเดลที่ไม่มีประสิทธิภาพจะมุ่งเน้นไปที่ส่วนที่ถูกต้องของโมเดล ฟีเจอร์
เราเรียกใช้อัลกอริทึมสำหรับการทำซ้ำอีก 8 ครั้งต่อ 8 รายการ ดังนี้
รูปที่ 28 สามพล็อตหลังจากการทำซ้ำครั้งที่ 3 และการทำซ้ำครั้งที่ 10
ในรูปที่ 28 โปรดสังเกตว่าการคาดการณ์ของโมเดลที่ดีจะเริ่มมีลักษณะคล้าย พล็อตของชุดข้อมูล
ภาพเหล่านี้แสดงอัลกอริทึมการเพิ่มระดับด้วยการไล่ระดับสีโดยใช้แผนผังการตัดสินใจ ผู้เรียนที่อ่อนแอ ชุดค่าผสมนี้เรียกว่าต้นไม้ที่เพิ่มระดับ (การตัดสินใจ) การไล่ระดับสี
พล็อตก่อนหน้าแนะนำสาระสำคัญของการเพิ่มระดับสี อย่างไรก็ตาม ตัวอย่างไม่มีการดำเนินการในชีวิตจริง 2 รายการต่อไปนี้
- ประสิทธิภาพที่ลดลง
- การเพิ่มประสิทธิภาพค่า Leaf ด้วยขั้นตอน 1 ขั้นของวิธีการของนิวตัน
การหดตัว
โมเดลแบบอ่อน $f_i$ จะคูณด้วยค่าเล็กๆ $\nu$ (เช่น $\nu = 0.1$) ก่อนที่จะเพิ่มลงในโมเดลที่มีประสิทธิภาพ $F_i$ ค่าขนาดเล็กนี้เรียกว่า การย่อขนาด กล่าวคือ แทนที่จะดำเนินการซ้ำแต่ละครั้ง ให้ใช้องค์ประกอบต่อไปนี้ สูตร:
\[ F_{i+1} = F_i - f_i \]
การทำซ้ำแต่ละครั้งจะใช้สูตรต่อไปนี้
\[ F_{i+1} = F_i - \nu f_i \]
การหดตัวของการเพิ่มการไล่ระดับสีจะใกล้เคียงกับอัตราการเรียนรู้ในเครือข่ายประสาทเทียม การย่อขนาดจะควบคุมความเร็วในการเรียนรู้ของโมเดลที่มีประสิทธิภาพ ซึ่งจะช่วยจำกัด มากเกินไป กล่าวคือ ค่าการหดตัวที่เข้าใกล้ 0.0 จะช่วยลดการเพิ่มขึ้นมากเกินไป ค่าการหดตัวที่ใกล้กับ 1.0
ในโค้ดข้างต้น การย่อขนาดจะใช้ได้ดังนี้
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions