นี่เป็นคำถามที่น่าสนใจมาก เพื่อที่จะเข้าใจสิ่งที่เกิดขึ้นฉันต้องผ่านสิ่งที่ XGBoost พยายามทำและวิธีการอื่น ๆ ที่เรามีในกล่องเครื่องมือของเราเพื่อจัดการกับมัน คำตอบของฉันมีมากกว่าวิธีการแบบดั้งเดิมและวิธี / ทำไม XGBoost คือการปรับปรุง หากคุณต้องการเพียงสัญลักษณ์แสดงหัวข้อย่อยมีการสรุปในตอนท้าย
การไล่ระดับสีแบบดั้งเดิมเพิ่ม
พิจารณาอัลกอริธึมการไล่ระดับสีไล่โทนสีแบบดั้งเดิม(Wikipedia) :
- คำนวณพื้นฐานรุ่นH0
- สำหรับm←1:M
- Compute หลอกเหลือrim=−∂ℓ(yi,Hm−1(xi))∂Hm−1(xi)
- พอดีกับผู้เรียนพื้นฐานhm(x)กับของเทียมหลอก
- คำนวณคูณγที่ช่วยลดค่าใช้จ่ายที่γ=argminγ∑Ni=1ℓ(yi,Hm−1(xi)+γhm(xi)) (โดยใช้การค้นหาบรรทัด)
- อัพเดทรุ่นHm(x)=Hm−1(x)+γhm(x) )
- คุณจะได้รับรูปแบบการเพิ่มขึ้นของคุณHM(x) )
การประมาณฟังก์ชั่นมีความสำคัญสำหรับส่วนต่อไปนี้
พอดีกับผู้เรียนพื้นฐานhm(x)กับของเทียมหลอก
ลองนึกภาพสถานที่ที่จะสร้างอัลกอริทึมการไล่ระดับสีของคุณอย่างไร้เดียงสา คุณจะสร้างอัลกอริทึมด้านบนโดยใช้แผนภูมิการถดถอยที่มีอยู่เป็นผู้เรียนที่อ่อนแอ สมมติว่าคุณไม่ได้รับอนุญาตให้ปรับเปลี่ยนการใช้งานที่มีอยู่ของผู้เรียนที่อ่อนแอ ในMatlabเกณฑ์การแบ่งเริ่มต้นคือ Mean Square Error เดียวกันจะไปสำหรับscikit เรียนรู้
คุณกำลังพยายามที่จะหาสิ่งที่ดีที่สุดรุ่นhm(x)ที่ลดค่าใช้จ่ายℓ(yi,Hm−1(xi)+hm(xi)) ) แต่การทำเช่นนั้นคุณกำลังปรับโมเดลการถดถอยอย่างง่ายให้กับส่วนที่เหลือโดยใช้ MSE เป็นฟังก์ชันวัตถุประสงค์ โปรดสังเกตว่าคุณไม่ได้ลดสิ่งที่คุณต้องการโดยตรง แต่ใช้ส่วนที่เหลือและ MSE เป็นพร็อกซีในการทำเช่นนั้น ส่วนที่ไม่ดีคือไม่จำเป็นต้องให้ทางออกที่ดีที่สุด ส่วนที่ดีคือมันใช้งานได้
โคตรลาดแบบดั้งเดิม
สิ่งนี้คล้ายกับการไล่ระดับสีแบบไล่โทนสี (Wikipedia)ซึ่งคุณพยายามลดฟังก์ชันค่าใช้จ่ายf(x)โดยทำตามการไล่ระดับสี (ลบของ) ฟังก์ชัน−∇f(x)ในทุกขั้นตอน
x(i+1)=x(i)−∇f(x(i))
ไม่อนุญาตให้คุณค้นหาค่าต่ำสุดที่แน่นอนหลังจากผ่านไปหนึ่งขั้นตอน แต่ในแต่ละขั้นตอนจะทำให้คุณเข้าใกล้ระดับต่ำสุด (หากฟังก์ชั่นนูน) นี่คือการประมาณ แต่มันใช้งานได้ดีมากและเป็นอัลกอริทึมที่เราใช้ในการถดถอยโลจิสติกส์แบบดั้งเดิม
การแสดงสลับฉาก
ณ จุดนี้สิ่งที่ต้องเข้าใจคืออัลกอริธึมการเพิ่มระดับความลาดชันทั่วไปไม่ได้คำนวณฟังก์ชั่นต้นทุนℓสำหรับการแยกที่เป็นไปได้แต่ละอันโดยใช้ฟังก์ชั่นต้นทุนของผู้เรียนที่อ่อนแอในการถดถอย
สิ่งที่คำถามของคุณบ่งบอกว่าเป็น "XGBoost จริง" ควรคำนวณฟังก์ชันต้นทุนสำหรับแต่ละการแยกและ "XGBoost โดยประมาณ" ใช้การวิเคราะห์พฤติกรรมเพื่อประมาณค่า คุณสามารถเห็นได้ด้วยวิธีนั้น แต่ในอดีตเรามีอัลกอริทึมการไล่ระดับสีทั่วไปซึ่งไม่ได้ใช้ข้อมูลเกี่ยวกับฟังก์ชันต้นทุนยกเว้นอนุพันธ์ที่จุดปัจจุบัน XGBoost เป็นส่วนเสริมของการไล่ระดับสีแบบไล่ระดับที่พยายามอย่างชาญฉลาดเกี่ยวกับการปลูกต้นไม้การถดถอยที่อ่อนแอโดยใช้การประมาณที่แม่นยำมากกว่าการไล่ระดับ
วิธีอื่น ๆ ในการเลือกรุ่นที่ดีที่สุดhm(x)
ถ้าเราดูที่ AdaBoost เป็นกรณีพิเศษของการเพิ่มระดับความลาดชันมันไม่ได้เลือก regressors แต่ตัวแยกประเภทเป็นผู้เรียนที่อ่อนแอ หากเราตั้งค่าhm(x)∈{−1,1}วิธีที่ AdaBoost เลือกรุ่นที่ดีที่สุดคือการค้นหา
hm=argmaxhm∑i=1Nwihm(xi)
ที่wiมีเหลือ ( แหล่งที่มาเริ่มต้นที่สไลด์ 20 ) เหตุผลสำหรับการใช้งานฟังก์ชั่นวัตถุประสงค์นี้คือถ้าwiและhm(xi)ไปในทิศทางเดียวกัน / มีเครื่องหมายเดียวกันจุดกำลังเคลื่อนที่ไปในทิศทางที่ถูกต้องและคุณพยายามเพิ่มจำนวนสูงสุด ของการเคลื่อนไหวในทิศทางที่ถูกต้อง
แต่อีกครั้งนี้ไม่ได้โดยตรงที่วัดhmลดขนาดℓ(yi,Hm−1(xi)+hm(xi)) ) มันเป็นวิธีการที่ดีวัดย้ายhmเป็นด้วยความเคารพกับทิศทางโดยรวมที่คุณควรไปเป็นวัดที่มีความคลาดเคลื่อนwiซึ่งยังประมาณ คนตกค้างบอกคุณว่าคุณควรไปทางไหนโดยใช้สัญลักษณ์ของพวกเขาและโดยประมาณตามขนาดของพวกเขา แต่พวกเขาไม่ได้บอกคุณว่าคุณควรหยุดอยู่ตรงไหน
โคตรลาดที่ดีขึ้น
ตัวอย่างสามตัวอย่างถัดไปไม่จำเป็นสำหรับคำอธิบายและเป็นเพียงที่นี่เพื่อนำเสนอวิธีที่จะทำได้ดีกว่าเชื้อสายการไล่ระดับสีวานิลลาเพื่อสนับสนุนแนวคิดที่ว่าสิ่งใดที่ XGBoost ทำนั้นเป็นอีกวิธีหนึ่งในการพัฒนาเชื้อสายไล่ระดับสี ในการตั้งค่าการไล่ระดับสีแบบดั้งเดิมเมื่อพยายามลดf(x)เป็นไปได้ที่จะทำได้ดีกว่าเพียงแค่ไล่ตามการไล่ระดับสี ส่วนขยายจำนวนมากได้รับการเสนอชื่อ(วิกิพีเดีย) นี่คือบางส่วนของพวกเขาแสดงให้เห็นว่ามันเป็นไปได้ที่จะทำดีให้เวลาในการคำนวณมากขึ้นหรือคุณสมบัติอื่น ๆ ของฟังก์ชันฉf
การค้นหาบรรทัด / การย้อนรอย:ในการไล่ระดับสีเมื่อการไล่ระดับสี−∇f(x(i))ถูกคำนวณจุดถัดไปควรเป็น
x(i+1)=x(i)−∇f(x(i))
แต่การไล่ระดับสีให้ทิศทางเดียวเท่านั้นที่ควรเคลื่อนย้ายไม่ใช่โดย "เท่าใด" ดังนั้นจึงสามารถใช้ขั้นตอนอื่นเพื่อค้นหาc>0ดีที่สุดเช่นนั้น
x(i+1)c=x(i)−c∇f(x(i))
ลดฟังก์ชั่นค่าใช้จ่าย ซึ่งจะดำเนินการตรวจสอบความf(x(i+1)c)สำหรับบางcและตั้งแต่ฟังก์ชั่นfควรจะนูนมันค่อนข้างง่ายที่จะทำผ่านทางสายการค้นหา (Wikipedia)หรือย้อนรอยสายการค้นหา (วิกิพีเดีย) นี่คือค่าใช้จ่ายหลักคือการประเมินผลf(x) ) ดังนั้นส่วนขยายนี้ทำงานได้ดีที่สุดถ้าfง่ายต่อการคำนวณ โปรดทราบว่าอัลกอริทึมทั่วไปสำหรับการไล่ระดับสีใช้การค้นหาบรรทัดดังที่แสดงในตอนต้นของคำตอบของฉัน
วิธีการไล่ระดับสีใกล้เคียงอย่างรวดเร็ว:ถ้าฟังก์ชั่นเพื่อลดการเป็นอย่างยิ่งนูนและการไล่ระดับสีของมันคือเรียบ ( Lipschitz (วิกิพีเดีย) ) แล้วมีเคล็ดลับบางอย่างโดยใช้คุณสมบัติเหล่านั้นที่เพิ่มความเร็วในการลู่
Stochastic Gradient Descent และวิธี Momentum:ใน Stochastic Gradient Descent คุณไม่ได้ประเมินค่าการไล่ระดับสีในทุกจุด แต่จะอยู่ในเซตย่อยของคะแนนเหล่านั้นเท่านั้น คุณทำตามขั้นตอนแล้วคำนวณการไล่ระดับสีบนแบตช์อื่นแล้วดำเนินการต่อ Stochastic Gradient Descent อาจถูกนำมาใช้เนื่องจากการคำนวณในทุกจุดมีราคาแพงมากหรืออาจเป็นคะแนนทั้งหมดที่ไม่เหมาะกับหน่วยความจำ สิ่งนี้ช่วยให้คุณทำตามขั้นตอนมากขึ้นเร็วขึ้น แต่แม่นยำน้อยลง
เมื่อทำเช่นนั้นทิศทางของการไล่ระดับสีอาจเปลี่ยนแปลงได้ขึ้นอยู่กับจุดที่สุ่มตัวอย่าง ในการต่อต้านผลกระทบนี้วิธีการโมเมนตัมจะรักษาค่าเฉลี่ยเคลื่อนที่ของทิศทางสำหรับแต่ละมิติลดความแปรปรวนในแต่ละการเคลื่อนไหว
x(i)
x(i+1)=x(i)−∇f(x(i))
∇f(x(i))ff(x(i+1))<f(x(i))x(i)
x(i+1)=x(i)−∇f(x(i))Hessf(x(i))
Hessf(x)fxx(i+1)f(x(i+1))=0ff เป็นพหุนามอันดับที่สองจากนั้นวิธีของนิวตันควบคู่กับการค้นหาบรรทัดควรจะสามารถค้นหาขั้นต่ำได้ในขั้นตอนเดียว
วิธีการของนิวตันตัดกับ Stochastic gradient descent ใน Stochastic Gradient Descent เราใช้จุดที่น้อยลงเพื่อใช้เวลาน้อยลงในการคำนวณทิศทางที่เราควรทำเพื่อให้ได้มากขึ้นโดยหวังว่าเราจะไปที่นั่นเร็วขึ้น ในวิธีการของนิวตันเราใช้เวลามากขึ้นในการคำนวณทิศทางที่เราต้องการโดยหวังว่าเราจะต้องทำตามขั้นตอนน้อยลงเพื่อไปที่นั่น
f(x+a)
f(x)+∂f(x)∂xa+12∂2f(x)∂x2a2+⋯=∑n=0∞1n!∂nf(x)∂xnan.
kf(x+a)∑kn=01n!∂nf(x)∂xnanhk(x)akhka
exlog(x)
fxa0.10.01ของผลกระทบ นี่คือขนาดขั้นตอนหรืออัตราการเรียนรู้ของการไล่ระดับสี สิ่งนี้เป็นที่ยอมรับได้เพราะหากผู้เรียนที่อ่อนแอของเราได้รับการแก้ปัญหาที่ดีมากนั่นหมายความว่าปัญหาเป็นเรื่องง่ายซึ่งในกรณีนี้เราจะจบลงด้วยวิธีการแก้ปัญหาที่ดีอยู่ดีหรือเรากำลังพยายามมากเกินไป มากไปในทิศทางที่ไม่ดีนี้จะไม่เปลี่ยนปัญหาพื้นฐาน
ดังนั้น XGBoost กำลังทำอะไรและเหตุใดจึงใช้งานได้
XGBoost เป็นอัลกอริทึมการไล่ระดับสีแบบไล่ระดับที่สร้างต้นไม้การถดถอยในฐานะผู้เรียนที่อ่อนแอ อัลกอริธึมการไล่ระดับสีแบบดั้งเดิมนั้นคล้ายคลึงกับการไล่ระดับสีแบบไล่ระดับด้วยการค้นหาเส้นตรงซึ่งทิศทางที่จะไปนั้นถูกดึงมาจากผู้เรียนที่อ่อนแอ การใช้งาน Gradient Boosting อย่างไร้เดียงสาจะใช้ฟังก์ชันต้นทุนของผู้เรียนที่อ่อนแอเพื่อให้เหมาะสมกับส่วนที่เหลือ นี่คือพร็อกซีเพื่อลดค่าใช้จ่ายของรุ่นใหม่ซึ่งมีราคาแพงในการคำนวณ สิ่งที่ XGBoost กำลังทำคือการสร้างฟังก์ชั่นค่าใช้จ่ายที่กำหนดเองเพื่อให้พอดีกับต้นไม้โดยใช้ชุดลำดับที่สองของเทย์เลอร์เป็นค่าประมาณสำหรับฟังก์ชั่นค่าใช้จ่ายจริงซึ่งจะทำให้แน่ใจได้มากขึ้นว่า ในแง่นี้และเพื่อให้เข้าใจได้ง่าย XGBoost คือการไล่ระดับสีเพื่อเพิ่มประสิทธิภาพของวิธีการของนิวตันในการไล่ระดับสี
ทำไมพวกเขาถึงสร้างมันขึ้นมาแบบนั้น
คำถามของคุณเกี่ยวกับสาเหตุที่การใช้การประมาณนี้มาเพื่อแลกกับราคา / ประสิทธิภาพ ฟังก์ชันต้นทุนนี้ใช้เพื่อเปรียบเทียบการแยกที่เป็นไปได้สำหรับแผนภูมิการถดถอยดังนั้นหากคะแนนของเราบอกคุณสมบัติ 50 รายการโดยมีค่าเฉลี่ย 10 ค่าแต่ละโหนดจะมีค่าการแยก 500 ค่าดังนั้นการประเมิน 500 ฟังก์ชั่น หากคุณวางคุณสมบัติต่อเนื่องจำนวนการแตกกระจายและการประเมินผลการแยกจะเรียกว่ามากขึ้นเรื่อย ๆ (XGBoost มีเคล็ดลับอีกวิธีหนึ่งในการจัดการกับคุณสมบัติต่อเนื่อง แต่อยู่นอกขอบเขต) เนื่องจากอัลกอริทึมจะใช้เวลาส่วนใหญ่ในการประเมินการแยกวิธีการเพิ่มความเร็วของอัลกอริทึมคือเร่งการประเมินต้นไม้
ℓ
การประมาณลำดับที่สองนั้นดีมากเนื่องจากเงื่อนไขส่วนใหญ่เหมือนกันในการคำนวณซ้ำ สำหรับการวนซ้ำที่กำหนดนิพจน์ส่วนใหญ่สามารถคำนวณได้หนึ่งครั้งและนำกลับมาใช้ใหม่เป็นค่าคงที่สำหรับการแยกทั้งหมด:
L(t)≈∑i=1nℓ(yi,y^(t−1)i)constant+giconstantft(xi)+12hiconstantf2t(xi)+Ω(ft),
ft(xi)Ω(ft)
สรุป
คุณสามารถเห็น XGBoost (ด้วยการประมาณ) เป็นการถดถอยจากโซลูชันที่แน่นอนการประมาณของ "XGBoost ที่แท้จริง" ด้วยการประเมินที่แน่นอน แต่เนื่องจากการประเมินที่ถูกต้องนั้นมีราคาแพงอีกวิธีหนึ่งที่จะเห็นมันคือในชุดข้อมูลขนาดใหญ่การประมาณนั้นเป็นสิ่งที่เราทำได้จริงและการประมาณนี้มีความแม่นยำมากกว่าการประมาณลำดับแรก .
ประมาณในการใช้งานจะคล้ายกับวิธีของนิวตันและเป็นธรรมโดยเทย์เลอร์ซีรีส์ (วิกิพีเดีย)และเทย์เลอร์ทฤษฎีบท (วิกิพีเดีย)
ข้อมูลการสั่งซื้อที่สูงขึ้นย่อมไม่ได้ใช้อย่างสมบูรณ์ แต่มันไม่ได้เป็นสิ่งจำเป็นเพราะเราต้องการประมาณการที่ดีในละแวกจุดเริ่มต้นของเรา
สำหรับการสร้างภาพข้อมูลให้ตรวจสอบหน้าวิกิพีเดียของทฤษฎีบทเทย์เลอร์ซีรีส์ / ของเทย์เลอร์หรือข่านสถาบันการศึกษาเกี่ยวกับเทย์เลอร์ซีรีส์หรือหน้า MathDemo เกี่ยวกับการประมาณพหุนามของพหุนามไม่ใช่