การไล่ระดับสีแบบแบทช์กับการไล่ระดับสีแบบสุ่ม


101

สมมติว่าเรามีชุดการฝึกอบรมสำหรับม. นอกจากนี้สมมติว่าเราใช้อัลกอริทึมการเรียนรู้แบบมีผู้สอนในชุดฝึกอบรม สมมติฐานจะแสดงเป็นn} เราต้องการที่จะหาพารามิเตอร์ที่ลด "ระยะทาง" ระหว่างและ{(i)}) ให้(x(i),y(i))i=1,,mhθ(x(i))=θ0+θ1x(i)1++θnx(i)nθy(i)hθ(x(i))

J(θ)=12i=1m(y(i)hθ(x(i))2

จากนั้นเราก็ต้องการที่จะหาที่ช่วยลดtheta) ในการไล่ระดับสีเราทำการเตรียมพารามิเตอร์แต่ละตัวและทำการอัพเดทต่อไปนี้:θJ(θ)

θj:=θjαθjJ(θ)

อะไรคือความแตกต่างที่สำคัญระหว่างการไล่ระดับสีแบบแบทช์และการไล่ระดับสีแบบสุ่มแบบสุ่ม

ทั้งคู่ใช้กฎการอัพเดทข้างต้น แต่สิ่งหนึ่งดีกว่าอันอื่นหรือไม่

คำตอบ:


121

การบังคับใช้ของชุดงานหรือการไล่ระดับสีแบบสุ่มนั้นขึ้นอยู่กับความผิดพลาดที่คาดไว้

การไล่ระดับสีแบบแบทช์คำนวณการไล่ระดับสีโดยใช้ชุดข้อมูลทั้งหมด นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับการนูนหรือข้อผิดพลาดที่ค่อนข้างราบเรียบ ในกรณีนี้เราย้ายโดยตรงไปยังโซลูชันที่เหมาะสมทั้งในระดับท้องถิ่นและระดับโลก นอกจากนี้การไล่ระดับสีแบบแบทช์ซึ่งได้รับอัตราการเรียนรู้การอบอ่อนในที่สุดก็จะพบจุดต่ำสุดที่ตั้งอยู่ในแหล่งท่องเที่ยว

Stochastic gradient descent (SGD) คำนวณการไล่ระดับสีโดยใช้ตัวอย่างเดียว แอปพลิเคชั่นส่วนใหญ่ของ SGD ใช้จริงรถมินิบัสหลายตัวอย่างด้วยเหตุผลที่จะอธิบายในภายหลัง SGD ทำงานได้ดี (ไม่ดีฉันคิดว่า แต่ดีกว่าการไล่ระดับสีแบบแบทช์) สำหรับข้อผิดพลาดที่มีจำนวนสูงสุดในท้องถิ่น / ต่ำสุดจำนวนมาก ในกรณีนี้การไล่ระดับสีที่ค่อนข้างรบกวนกว่านั้นคำนวณโดยใช้จำนวนตัวอย่างที่ลดลงมีแนวโน้มที่จะฉุดโมเดลออกมาจากมินิมาท้องถิ่นในภูมิภาคที่หวังว่าจะเหมาะสมที่สุด ตัวอย่างเดียวมีเสียงดังจริงๆในขณะที่รถมินิบัสมักจะส่งเสียงดังเล็กน้อย ดังนั้นปริมาณของการกระตุกจะลดลงเมื่อใช้รถสองแถว ความสมดุลที่ดีเกิดขึ้นเมื่อขนาดรถมินิบัสมีขนาดเล็กพอที่จะหลีกเลี่ยงมินิมาท้องถิ่นที่น่าสงสาร แต่มีขนาดใหญ่พอที่จะทำให้ไม่สามารถ ' อย่าหลีกเลี่ยงมินิมาระดับโลกหรือมินิมาท้องถิ่นที่มีประสิทธิภาพดีกว่า (อนึ่งนี่เป็นการสันนิษฐานว่า minima ที่ดีที่สุดมีแหล่งท่องเที่ยวที่ใหญ่และลึกกว่าและง่ายกว่าที่จะตกลงไป)

ข้อดีอย่างหนึ่งของ SGD คือการคำนวณได้เร็วขึ้นมาก ชุดข้อมูลขนาดใหญ่มักไม่สามารถจัดเก็บใน RAM ได้ซึ่งทำให้การแปลงเป็นเวกเตอร์มีประสิทธิภาพน้อยกว่ามาก แต่จะต้องโหลดตัวอย่างหรือชุดตัวอย่างแต่ละชุดทำงานกับผลลัพธ์ที่เก็บไว้และอื่น ๆ ในทางกลับกัน SGD มักจะทำให้มีขนาดเล็กพอที่จะคำนวณได้ง่าย

โดยปกติแล้วความได้เปรียบในการคำนวณนี้ถูกใช้ประโยชน์จากการทำซ้ำหลาย ๆ ครั้งของ SGD ทำให้มีขั้นตอนมากกว่าการไล่ระดับแบทช์โดยทั่วไป สิ่งนี้มักจะส่งผลในรูปแบบที่ใกล้เคียงกับสิ่งที่จะพบได้จากการไล่ระดับแบทช์

วิธีที่ฉันชอบคิดว่า SGD ทำงานอย่างไรให้จินตนาการว่าฉันมีจุดหนึ่งที่แสดงถึงการกระจายข้อมูลของฉัน แบบจำลองของฉันพยายามเรียนรู้การกระจายสัญญาณเข้านั้น รอบการกระจายสัญญาณเข้านั้นเป็นพื้นที่สีเทาที่แสดงการกระจายสัญญาณของรถมินิบัสที่เป็นไปได้ทั้งหมดที่ฉันสามารถลองได้ มันมักจะเป็นสมมติฐานที่เป็นธรรมว่าการกระจายอินพุตมินิบัสอยู่ใกล้กับการกระจายอินพุตที่แท้จริง การไล่ระดับสีแบบแบทช์ในทุกขั้นตอนใช้เส้นทางที่สูงที่สุดในการเข้าถึงการกระจายสัญญาณที่แท้จริง ในอีกทางหนึ่ง SGD เลือกจุดสุ่มภายในพื้นที่สีเทาและใช้เส้นทางที่สูงชันไปยังจุดนี้ ในการวนซ้ำแต่ละครั้งมันเลือกจุดใหม่ ค่าเฉลี่ยของขั้นตอนเหล่านี้ทั้งหมดจะประมาณค่าการแจกแจงที่แท้จริงซึ่งค่อนข้างดี


13
ในทางปฏิบัติไม่มีใครใช้ Batch Gradient Descent มันค่อนข้างแพงเกินไปสำหรับการคำนวณที่ไม่ได้มาก (ความเป็นไปได้ที่คุณกำลังลดระดับการไล่ระดับ "จริง") เมื่อคุณมีฟังก์ชั่นการสูญเสียที่ไม่มีการนูนสูงคุณเพียงแค่ต้องก้าวไปในทิศทางที่ถูกต้องเป็นส่วนใหญ่ ดังนั้นรถสองแถว SGD
sabalaba

@Jason_L_Bens คุณมีการอ้างอิงใด ๆ (เอกสารหรือข้อความออนไลน์) ที่ฉันสามารถอ่านเพิ่มเติมเกี่ยวกับอัลกอริทึมเหล่านี้ได้อย่างไร
user110320

1
@ user110320 ไม่ปิดส่วนบนของหัวของฉันไม่แม้ว่าจะเป็นอัลกอริธึมทั่วไปและดังนั้นควรมีทรัพยากรมากมายในหัวข้อที่มีการค้นหาน้อย หากคุณกำลังมองหาวิธีการทั่วไปฉันขอแนะนำให้อ่านสถาปัตยกรรมการเรียนรู้เชิงลึกบางส่วนของ Yoshua Bengio สำหรับ AI มันเป็นที่ที่ฉันเริ่มต้น
Jason_L_Bens

6

ดังที่คำแนะนำอื่น ๆ แนะนำให้ใช้เหตุผลหลักคือ SGD เพื่อลดต้นทุนการคำนวณของการไล่ระดับสีในขณะที่ยังคงรักษาทิศทางการไล่ระดับสีโดยเฉลี่ยเมื่อใช้ค่าเฉลี่ยสำหรับชุดมินิหรือตัวอย่างจำนวนมาก

  1. งานทำไม minibatch

คณิตศาสตร์ที่อยู่เบื้องหลังสิ่งนี้คือการไล่ระดับสีของ "จริง" ของฟังก์ชันต้นทุน (การไล่ระดับสีสำหรับข้อผิดพลาดทั่วไปหรือชุดตัวอย่างที่มีขนาดใหญ่มาก) คือความคาดหวังของการไล่ระดับสีเหนือการกระจายข้อมูลที่สร้างจริง ; การไล่ระดับสีที่เกิดขึ้นจริงคำนวณมากกว่าชุดของกลุ่มตัวอย่างอยู่เสมอประมาณเพื่อการไล่ระดับสีจริงกับการกระจายข้อมูลเชิงประจักษ์{} P d เสื้อกรัม= E P d เสื้อ ( J ( θ )pdatap^dataSE(กรัม (n))

g=Epdata(J(θ)θ)
การไล่ระดับสีแบบแบทช์สามารถทำให้การไล่ระดับสี "ดีที่สุด" ที่เป็นไปได้เกิดขึ้นจากตัวอย่างข้อมูลของคุณทั้งหมดซึ่งไม่ใช่การไล่ระดับสี "จริง" ชุดที่มีขนาดเล็กกว่า (ชุดเล็ก) อาจไม่เหมาะสมที่สุดสำหรับชุดเต็ม แต่ทั้งคู่เป็นค่าประมาณ - ดังนั้นจึงเป็นชุดตัวอย่างขนาดเล็ก (SGD) ความแตกต่างระหว่างข้อผิดพลาดมาตรฐานของพวกเขานั้นแปรผกผันกับขนาดของมินิบัส นั่นคือ อีพี dเสื้อ(กรัม(M))=E P dเสื้อ(J(θ)
SE(g^(n))SE(g^(m))=mn
คือการลดข้อผิดพลาดมาตรฐานคือรากที่สองของการเพิ่มขนาดตัวอย่าง สมการข้างต้นนั้นใช้สำหรับการไล่ระดับสีที่คำนวณในขั้นตอนเดียวของการไล่ระดับสีของมินิบัสช์ เมื่อคุณทำซ้ำขั้นตอนของการปรับปรุงการไล่ระดับสีของมินิบัสช์และใช้ตัวอย่างการฝึกอบรมทั้งหมดในที่สุดในยุคเดียวคุณกำลังคำนวณค่าเฉลี่ยของการไล่ระดับสีตามตัวอย่างที่กำหนดทั้งหมด นั่นคือสำหรับขนาด minibatch , จากสมการข้างบนเราสามารถสรุปได้ว่าด้วยยุคหนึ่งการไล่ระดับสีเฉลี่ยของคุณกับมินิบัสหลายขนาดmม.
Ep^data(g^(m))=Ep^data(J(θ)θ)
m (จากหนึ่งไปยังชุดเต็ม) มีข้อผิดพลาดมาตรฐานเดียวกันและที่สำคัญพวกเขาทั้งหมดมีความภักดีต่อการไล่ระดับสี "จริง" เช่นย้ายไปทิศทางที่ถูกต้องของการไล่ระดับสี "จริง"
  1. ทำไม minibatch อาจทำงานได้ดี

ประการแรก minibatch ทำให้ปัญหาการเรียนรู้บางอย่างจากเทคนิคที่ไม่สามารถแก้ไขได้ที่จะแก้ไขได้เนื่องจากความต้องการการคำนวณลดลงด้วยขนาดแบทช์ที่เล็กลง

ประการที่สองการลดขนาดแบทช์ไม่ได้หมายความว่าความแม่นยำในการไล่ระดับสีลดลง ตัวอย่างการฝึกอบรมจำนวนมากมีสัญญาณรบกวนหรือค่าผิดปกติหรืออคติมากมาย ชุดมินิบัสตัวอย่างแบบสุ่มอาจสะท้อนถึงการกระจายการสร้างข้อมูลที่แท้จริงได้ดีกว่า (หรือไม่แย่กว่า) เต็มแบตช์ดั้งเดิม หากการวนซ้ำของการปรับปรุงการไล่ระดับสีของมินิแทชให้การประเมินที่ดีขึ้นผลการเฉลี่ยโดยรวมของยุคหนึ่งอาจดีกว่าการไล่ระดับสีที่คำนวณจากชุดเต็ม

ประการที่สามรถมินิบัสไม่เพียง แต่ช่วยจัดการกับตัวอย่างข้อมูลที่ไม่พึงประสงค์เท่านั้น แต่ยังช่วยจัดการกับฟังก์ชั่นค่าใช้จ่ายที่ไม่พึงประสงค์ซึ่งมีขนาดเล็กที่สุดในท้องถิ่น ในขณะที่ Jason_L_Bens กล่าวถึงบางครั้งข้อผิดพลาดอาจจะง่ายกว่าในการดักจับการไล่ระดับสีปกติใน minima ท้องถิ่นในขณะที่ยากต่อการดักการไล่ระดับสีแบบสุ่มชั่วคราวที่คำนวณด้วย minibatch

ในที่สุดเมื่อมีการไล่ระดับสีลงคุณจะไม่ถึงจุดต่ำสุดระดับโลกในขั้นตอนเดียว การไล่ระดับสีส่วนใหญ่ช่วยให้คุณมีทิศทางที่จะวนซ้ำเท่านั้น ด้วย minibatch คุณสามารถทำซ้ำได้เร็วขึ้นมาก ในหลาย ๆ กรณียิ่งมีการวนซ้ำมากเท่าไหร่คุณก็ยิ่งเข้าถึงได้มากขึ้นเท่านั้น คุณไม่ได้สนใจทุกสภาพอากาศจุดที่ดีที่สุดทั่วโลกหรือในพื้นที่ คุณเพียงแค่ต้องการเข้าถึงโมเดลที่เหมาะสมซึ่งจะทำให้เกิดข้อผิดพลาดการยอมรับโดยทั่วไป มินิแบตช์ทำให้ง่ายขึ้น

คุณอาจพบว่าหนังสือ "การเรียนรู้ลึก" โดย Ian Goodfellow และคณะมีการถกเถียงที่ดีในหัวข้อนี้ถ้าคุณอ่านอย่างละเอียด


สำหรับปัญหาการเพิ่มประสิทธิภาพของนูนสิ่งที่คุณพูดนั้นใช้ได้ แต่การใช้วิธีการไล่ระดับสีในฟังก์ชั่นแบบไม่นูนคุณพลาดเหตุผลสำคัญมากที่ SGD ดีกว่าชุด GD ดูการตอบสนองของฉันdatascience.stackexchange.com/questions/16807/…
horaceT

@horaceT ขอบคุณสำหรับความคิดเห็นของคุณ เนื่องจากจุดที่คุณกล่าวถึงได้รับการอธิบายโดย Jason_L_Bens ด้านบนพร้อมรายละเอียดฉันไม่รำคาญที่จะทำซ้ำ แต่อ้างอิงคำตอบของเขาในวรรคสามสุดท้ายด้วยความเคารพ ในการแก้ปัญหาการหาค่าเหมาะที่สุดของการไล่ระดับสีแบบไม่มีนูนนั้นถูกสะท้อนโดย minima ท้องถิ่นรวมถึงจุดอานม้า (ดูย่อหน้าที่สาม) และเพื่อประโยชน์ในการอธิบายคำตอบของฉันอธิบาย SGD เป็นมินิบัส แต่มีขนาดแบทช์ 1 (ดูย่อหน้าที่สาม)
Xiao-Feng Li

3

สำหรับฉันการไล่ระดับแบทช์คล้ายกับการไล่ระดับสีแบบลีน ในการไล่ระดับสีแบบลีนขนาดแบตช์จะถูกเลือกเพื่อให้พารามิเตอร์ทุกตัวที่ต้องอัพเดตมีการเปลี่ยนแปลงอย่างอิสระเช่นกัน แต่ไม่จำเป็นต้องเป็นแบบฉากฉากในชุด ตัวอย่างเช่นถ้าแบทช์มีการทดสอบ 10 ครั้ง 10 แถวดังนั้นจึงเป็นไปได้ที่จะสร้างคอลัมน์อิสระ 10 แถวเปิดใช้งานที่เป็นอิสระ แต่ไม่ใช่การตั้งค่ามุมฉากการอัปเดตพารามิเตอร์ 512 รายการ2101=512

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.