กลับไปหน้าบทความ

อ่าน 23 นาที

การไล่ระดับแบบสุ่ม

การไล่ระดับแบบสุ่ม (มักย่อว่าSGD ) เป็น วิธี การวนซ้ำเพื่อเพิ่มประสิทธิภาพฟังก์ชันเป้าหมายที่มีคุณสมบัติความเรียบ ที่เหมาะสม (เช่น สามารถหาอนุพันธ์ได้หรือสามารถหาอนุพันธ์ย่อยได้ ).

การไล่ระดับแบบสุ่ม

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

แนวคิดพื้นฐานเบื้องหลังการประมาณค่าแบบสุ่มสามารถสืบย้อนไปถึงอัลกอริทึม Robbins–Monro ในช่วงทศวรรษ 1950 ปัจจุบัน การไล่ระดับแบบสุ่มได้กลายเป็นวิธีการเพิ่มประสิทธิภาพที่สำคัญในด้าน การเรียนรู้ ของเครื่อง[ 2 ]

พื้นหลัง

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

ในสถิติแบบคลาสสิก ปัญหาการลดผลรวมให้น้อยที่สุดเกิดขึ้นใน วิธี การกำลังสองน้อยที่สุดและการประมาณค่าความน่าจะเป็นสูงสุด (สำหรับการสังเกตที่เป็นอิสระ) กลุ่มทั่วไปของตัวประมาณค่าที่เกิดขึ้นจากการลดผลรวมให้น้อยที่สุดเรียกว่าตัวประมาณค่า Mอย่างไรก็ตาม ในสถิติ เป็นที่ยอมรับกันมานานแล้วว่าการกำหนดให้มีการลดค่าให้น้อยที่สุดในระดับท้องถิ่นนั้นเข้มงวดเกินไปสำหรับปัญหาบางอย่างของการประมาณค่าความน่าจะเป็นสูงสุด[ 3 ]ดังนั้น นักทฤษฎีสถิติร่วมสมัยจึงมักพิจารณาจุดนิ่งของฟังก์ชันความน่าจะเป็น (หรือศูนย์ของอนุพันธ์ฟังก์ชันคะแนนและสมการการประมาณค่า อื่นๆ )

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

เมื่อนำไปใช้เพื่อลดค่าฟังก์ชันข้างต้น วิธี การไล่ระดับความชัน แบบมาตรฐาน (หรือ "แบบกลุ่ม") จะทำการวนซ้ำดังต่อไปนี้: ขนาดของขั้นตอนจะแสดงด้วย(บางครั้งเรียกว่าอัตราการเรียนรู้ในแมชชีนเลิร์นนิง) และในที่นี้ " " หมายถึงการอัปเดตตัวแปรในอัลกอริธึม

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

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

วิธีการวนซ้ำ

การเปลี่ยนแปลงในฟังก์ชันเป้าหมายโดยรวมเมื่อมีการคำนวณค่าความชันตามแต่ละมินิแบทช์

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

ในรูปแบบรหัสเทียม การลดระดับความชันแบบสุ่มสามารถแสดงได้ดังนี้:

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

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

การลู่เข้าของการลดระดับความชันแบบสุ่มได้รับการวิเคราะห์โดยใช้ทฤษฎีการลดค่าต่ำสุดแบบนูนและการประมาณค่าแบบสุ่ม กล่าว โดยสรุป เมื่ออัตราการเรียนรู้ ลดลงในอัตราที่เหมาะสม และอยู่ภายใต้สมมติฐานที่ไม่รุนแรงนัก การลดระดับความชันแบบสุ่มจะลู่เข้า สู่ค่าต่ำสุดทั่วโลก เกือบแน่นอนเมื่อฟังก์ชันเป้าหมายเป็นแบบนูนหรือแบบนูนเทียมและในกรณีอื่น ๆ จะลู่เข้าสู่ค่าต่ำสุดเฉพาะที่เกือบแน่นอน[ 2 ] [ 7 ] อันที่จริงนี่เป็นผลสืบเนื่องมาจากทฤษฎีบท Robbins– Siegmund [ 8 ]

การถดถอยเชิงเส้น

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

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

ประวัติศาสตร์

ในปี พ.ศ. 2494 เฮอร์เบิร์ต ร็อบบินส์และซัตตัน มอนโรได้นำเสนอวิธีการประมาณค่าแบบสุ่มในยุคแรก ซึ่งมาก่อนการลดระดับความชันแบบสุ่ม[ 10 ]หนึ่งปีต่อมา แจ็คคีเฟอร์และเจคอบ วูล์ฟวิทซ์ได้ตีพิมพ์อัลกอริทึมการปรับให้ เหมาะสม ซึ่งใกล้เคียงกับการลดระดับความชันแบบสุ่ม โดยใช้ความแตกต่างส่วนกลางเป็นค่าประมาณของความชัน[ 11 ]ต่อมาในช่วงทศวรรษ พ.ศ. 2493 แฟรงค์ โรเซนแบลตต์ ได้ใช้ SGD เพื่อปรับ แบบจำลองเพอร์เซปตรอนของเขาให้เหมาะสมซึ่งแสดงให้เห็นถึงการประยุกต์ใช้การลดระดับความชันแบบสุ่มกับเครือข่ายประสาทเป็นครั้งแรก[ 12 ]

การย้อน กลับการแพร่กระจาย (Backpropagation)ได้รับการอธิบายครั้งแรกในปี 1986 โดยใช้การไล่ระดับแบบสุ่ม (stochastic gradient descent) เพื่อเพิ่มประสิทธิภาพพารามิเตอร์ในเครือข่ายประสาทที่มีเลเยอร์ซ่อน หลาย ชั้น ไม่นานหลังจากนั้น ก็มีการพัฒนาปรับปรุงอีกอย่างหนึ่งคือ การไล่ระดับแบบมินิแบตช์ (mini-batch gradient descent) โดยใช้ชุดข้อมูลขนาดเล็กแทนตัวอย่างเดี่ยว ในปี 1997 ได้มีการสำรวจประโยชน์ด้านประสิทธิภาพในทางปฏิบัติจากการใช้เวกเตอร์กับชุดข้อมูลขนาดเล็กดังกล่าวเป็นครั้งแรก[ 13 ]ซึ่งปูทางไปสู่การเพิ่มประสิทธิภาพอย่างมีประสิทธิภาพในการเรียนรู้ของเครื่อง ณ ปี 2023 วิธีการมินิแบตช์นี้ยังคงเป็นมาตรฐานสำหรับการฝึกอบรมเครือข่ายประสาท โดยสร้างสมดุลระหว่างประโยชน์ของการไล่ระดับแบบสุ่มกับการไล่ระดับแบบปกติ[ 14 ]

ในช่วงทศวรรษ 1980 โมเมนตัมได้ถูกนำมาใช้แล้ว และถูกเพิ่มเข้าไปในเทคนิคการเพิ่มประสิทธิภาพ SGD ในปี 1986 [ 15 ]อย่างไรก็ตาม เทคนิคการเพิ่มประสิทธิภาพเหล่านี้ถือว่าไฮเปอร์พารามิเตอร์ คงที่ กล่าว คือ อัตราการเรียนรู้และพารามิเตอร์โมเมนตัมคงที่ ในช่วงทศวรรษ 2010 แนวทางการปรับตัวในการใช้ SGD ด้วยอัตราการเรียนรู้ต่อพารามิเตอร์ได้รับการแนะนำด้วย AdaGrad (สำหรับ "Adaptive Gradient") ในปี 2011 [ 16 ]และ RMSprop (สำหรับ "Root Mean Square Propagation") ในปี 2012 [ 17 ]ในปี 2014 Adam (สำหรับ "Adaptive Moment Estimation") ได้รับการเผยแพร่ โดยนำแนวทางการปรับตัวของ RMSprop มาใช้กับโมเมนตัม จากนั้นจึงมีการพัฒนาการปรับปรุงและสาขาต่างๆ ของ Adam มากมาย เช่น Adadelta, Adagrad, AdamW และ Adamax [ 18 ] [ 19 ]

ภายในการเรียนรู้ของเครื่อง แนวทางการปรับให้เหมาะสมในปี 2023 นั้นถูกครอบงำโดยตัวปรับให้เหมาะสมที่ได้มาจาก Adam, TensorFlowและPyTorchซึ่งเป็นไลบรารีการเรียนรู้ของเครื่องที่ได้รับความนิยมมากที่สุด[ 20 ]ในปี 2023 ส่วนใหญ่ประกอบด้วยตัวปรับให้เหมาะสมที่ได้มาจาก Adam รวมถึงรุ่นก่อนหน้าของ Adam เช่น RMSprop และ SGD แบบคลาสสิก PyTorch ยังรองรับBFGS ที่มีหน่วยความจำจำกัดซึ่งเป็นวิธีการค้นหาเส้น แต่เฉพาะสำหรับการตั้งค่าอุปกรณ์เดียวที่ไม่มีกลุ่มพารามิเตอร์[ 19 ] [ 21 ]

แอปพลิเคชันที่โดดเด่น

การไล่ระดับแบบสุ่ม (Stochastic gradient descent) เป็นอัลกอริธึมยอดนิยมสำหรับการฝึกโมเดลหลากหลายประเภทในด้านการเรียนรู้ของเครื่อง รวม ถึงเครื่องเวกเตอร์สนับสนุน (เชิงเส้น) การถดถอยโลจิสติก (ดูเช่นVowpal Wabbit ) และโมเดลกราฟิก [ 22 ] เมื่อรวมกับ อัลกอริธึมการแพร่ กระจายย้อนกลับ (backpropagation ) จะเป็นอัลก อริธึมมาตรฐานที่ใช้ กันโดยทั่วไปสำหรับการฝึกเครือข่ายประสาทเทียม [ 23 ] นอกจากนี้ยังมีการรายงานการใช้งานใน ชุมชน ธรณีฟิสิกส์โดยเฉพาะอย่างยิ่งในการประยุกต์ใช้การผกผันคลื่นเต็มรูปแบบ (Full Waveform Inversion: FWI) [ 24 ]

การไล่ระดับแบบสุ่มแข่งขันกับ อัลกอริทึม L-BFGSซึ่งใช้กันอย่างแพร่หลายเช่นกัน การไล่ระดับแบบสุ่มถูกใช้มาตั้งแต่ปี 1960 เป็นอย่างน้อยสำหรับการฝึกโมเดลการถดถอยเชิงเส้นโดยเดิมทีใช้ชื่อว่าADALINE [ 25 ]

อีกหนึ่งอัลกอริธึมการลดความชันแบบสุ่มคือตัวกรองปรับตัว แบบกำลังสองน้อยที่สุด (LMS)

ส่วนขยายและรูปแบบต่างๆ

มีการเสนอและใช้งานการปรับปรุงมากมายในอัลกอริทึมการไล่ระดับแบบสุ่มพื้นฐาน โดยเฉพาะอย่างยิ่งในการเรียนรู้ของเครื่อง ความจำเป็นในการกำหนดอัตราการเรียนรู้ (ขนาดขั้นตอน) ได้รับการยอมรับว่าเป็นปัญหา การตั้งค่าพารามิเตอร์นี้สูงเกินไปอาจทำให้อัลกอริทึมเกิดการล divergence การตั้งค่าต่ำเกินไปจะทำให้การบรรจบกันช้าลง[ 26 ]การขยายการไล่ระดับแบบสุ่มที่เรียบง่ายในเชิงแนวคิดทำให้อัตราการเรียนรู้เป็นฟังก์ชันที่ลดลงη tของหมายเลขการวนซ้ำtทำให้ เกิด ตารางอัตราการเรียนรู้ดังนั้นการวนซ้ำครั้งแรกๆ จะทำให้เกิดการเปลี่ยนแปลงขนาดใหญ่ในพารามิเตอร์ ในขณะที่การวนซ้ำในภายหลังจะทำการปรับแต่งอย่างละเอียดเท่านั้น ตารางดังกล่าวเป็นที่รู้จักกันมาตั้งแต่ผลงานของ MacQueen เกี่ยวกับการ จัดกลุ่ม k -means [ 27 ]คำแนะนำเชิงปฏิบัติเกี่ยวกับการเลือกขนาดขั้นตอนใน SGD หลายรูปแบบนั้นได้มาจาก Spall [ 28 ]

กราฟแสดงภาพพฤติกรรมของชุดตัวปรับแต่งที่เลือกไว้ โดยใช้การฉายภาพแบบสามมิติของฟังก์ชันความสูญเสีย f(x, y)
กราฟแสดงภาพพฤติกรรมของชุดตัวปรับแต่งที่เลือกไว้

การอัปเดตโดยปริยาย (ISGD)

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

สมการนี้เป็นสมการโดยปริยาย เนื่องจากปรากฏอยู่ทั้งสองข้างของสมการ เป็นรูปแบบสุ่มของวิธีการไล่ระดับใกล้เคียง (proximal gradient method)เนื่องจากสามารถเขียนการอัปเดตได้ดังนี้:

ยกตัวอย่างเช่น พิจารณาการหาค่ากำลังสองน้อยที่สุด (least squares) โดยใช้คุณลักษณะ (features) และการสังเกต (observations ) เราต้องการหาคำตอบของสมการ: โดยที่ แสดงถึงผลคูณภายใน (inner product) โปรดสังเกตว่าอาจมี "1" เป็นองค์ประกอบแรกเพื่อรวมค่าคงที่ (intercept) การลดระดับความชันแบบสุ่มคลาสสิก (classical stochastic gradient descent) ดำเนินการดังนี้:

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

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

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

ในสถานการณ์เช่นนี้ ISGD จะถูกนำไปใช้ง่ายๆ ดังนี้ ให้ โดยที่เป็นค่าสเกลาร์ ดังนั้น ISGD จะเทียบเท่ากับ:

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

โมเมนตัม

ข้อเสนอเพิ่มเติม ได้แก่วิธีโมเมนตัมหรือวิธีลูกบอลหนักซึ่งในบริบทของ ML ปรากฏใน บทความของ Rumelhart , HintonและWilliamsเกี่ยวกับการเรียนรู้แบบ backpropagation [ 30 ]และยืมแนวคิดมาจากบทความของ Boris Polyak นักคณิตศาสตร์ชาวโซเวียตในปี 1964 เกี่ยวกับการแก้สมการเชิงฟังก์ชัน[ 31 ]การไล่ระดับแบบสุ่มด้วยโมเมนตัมจะจดจำการอัปเดตΔ wในแต่ละรอบ และกำหนดการอัปเดตครั้งต่อไปเป็นการรวมเชิงเส้นของการไล่ระดับและการอัปเดตก่อนหน้า: [ 32 ] [ 33 ] ซึ่งนำไปสู่:

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

ชื่อโมเมนตัมมาจากความคล้ายคลึงกับโมเมนตัมในฟิสิกส์: เวกเตอร์น้ำหนักซึ่งคิดว่าเป็นอนุภาคที่เคลื่อนที่ผ่านพื้นที่พารามิเตอร์[ 30 ]จะได้รับความเร่งจากเกรเดียนต์ของการสูญเสีย (" แรง ") ซึ่งแตกต่างจากการลดเกรเดียนต์แบบสุ่มคลาสสิก มันมีแนวโน้มที่จะเคลื่อนที่ไปในทิศทางเดียวกัน ป้องกันการแกว่ง โมเมนตัมถูกนำมาใช้โดยนักวิทยาศาสตร์คอมพิวเตอร์อย่างประสบความสำเร็จในการฝึกเครือข่ายประสาทเทียมมาหลายทศวรรษแล้ว[ 34 ] วิธีโมเมนตัม มีความเกี่ยวข้องอย่างใกล้ชิดกับพลศาสตร์ Langevin แบบหน่วงน้อยและอาจรวมเข้ากับการอบอ่อนแบบจำลองได้[ 35 ]

ในช่วงกลางทศวรรษ 1980 วิธีการนี้ได้รับการปรับปรุงโดยYurii Nesterov เพื่อใช้เกรเดียนต์ที่คาดการณ์ไว้ที่จุดถัดไป และ เกรเดียนต์เร่งความเร็ว Nesterovที่ได้นั้นบางครั้งก็ถูกนำมาใช้ใน ML ในช่วงทศวรรษ 2010 [ 36 ]

การหาค่าเฉลี่ย

การลดระดับความชันแบบสุ่มเฉลี่ยซึ่งคิดค้นโดยอิสระโดย Ruppert และ Polyak ในช่วงปลายทศวรรษ 1980 เป็นการลดระดับความชันแบบสุ่มทั่วไปที่บันทึกค่าเฉลี่ยของเวกเตอร์พารามิเตอร์เมื่อเวลาผ่านไป กล่าวคือ การอัปเดตจะเหมือนกับการลดระดับความชันแบบสุ่มทั่วไป แต่อัลกอริทึมยังติดตาม[ 37 ] ด้วย

เมื่อทำการปรับให้เหมาะสมแล้ว เวก เตอร์ พารามิเตอร์เฉลี่ยนี้จะเข้ามาแทนที่w

เอดาเกรด

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

ยังคงมีอัตราการเรียนรู้พื้นฐานηอยู่ แต่ค่านี้จะถูกคูณด้วยองค์ประกอบของเวกเตอร์{ G j , j }ซึ่งเป็นค่าทแยงมุมของเมทริกซ์ ผลคูณภายนอก

โดยที่คือค่าความชัน ณ รอบการทำซ้ำτค่าแนวทแยงมุมกำหนดโดย

เวกเตอร์นี้โดยพื้นฐานแล้วจะเก็บผลรวมของกำลังสองของเกรเดียนต์ในอดีตตามมิติ และจะได้รับการอัปเดตหลังจากการวนซ้ำทุกครั้ง สูตรสำหรับการอัปเดตคือ[ a ] ​​หรือเขียนเป็นการอัปเดตต่อพารามิเตอร์ แต่ละ{ G ( i , i ) }จะทำให้เกิดตัวประกอบการปรับขนาดสำหรับอัตราการเรียนรู้ที่ใช้กับพารามิเตอร์w i ตัวเดียว เนื่องจากตัวส่วนในตัวประกอบนี้คือค่าปกติ2ของอนุพันธ์ก่อนหน้า การอัปเดตพารามิเตอร์ที่รุนแรงจะถูกลดทอนลง ในขณะที่พารามิเตอร์ที่ได้รับการอัปเดตน้อยหรือเล็กน้อยจะได้รับอัตราการเรียนรู้ที่สูงขึ้น[ 34 ]

แม้ว่าจะได้รับการออกแบบมาสำหรับปัญหาแบบนูนแต่ AdaGrad ก็ได้ถูกนำไปใช้กับการเพิ่มประสิทธิภาพแบบไม่นูนได้สำเร็จ[ 39 ]

อาร์เอ็มเอสโพรป

RMSProp (ย่อมาจาก Root Mean Square Propagation) เป็นวิธีการที่คิดค้นขึ้นในปี 2012 โดย James Martens และIlya Sutskeverซึ่งในขณะนั้นทั้งคู่เป็นนักศึกษาปริญญาเอกในกลุ่มของ Geoffrey Hinton โดยอัตราการเรียนรู้จะถูกปรับให้เหมาะสมกับแต่ละพารามิเตอร์เช่นเดียวกับใน Adagrad แนวคิดคือการหารอัตราการเรียนรู้สำหรับน้ำหนักด้วยค่าเฉลี่ยเคลื่อนที่ของขนาดของเกรเดียนต์ล่าสุดสำหรับน้ำหนักนั้น[ 40 ]ที่น่าแปลกคือ ไม่ได้มีการตีพิมพ์ในบทความ แต่ได้อธิบายไว้ในบทเรียน Coursera เท่านั้น [ 41 ] [ 42 ]

ดังนั้น ขั้นแรกจึงคำนวณค่าเฉลี่ยเคลื่อนที่ในรูปของค่าเฉลี่ยกำลังสอง

โดยที่คือปัจจัยการลืม แนวคิดในการจัดเก็บค่าความชันในอดีตในรูปผลรวมของกำลังสองนั้นยืมมาจาก Adagrad แต่มีการนำ "การลืม" เข้ามาใช้เพื่อแก้ปัญหาอัตราการเรียนรู้ที่ลดลงของ Adagrad ในปัญหาที่ไม่นูน โดยการค่อยๆ ลดอิทธิพลของข้อมูลเก่าลง

และพารามิเตอร์จะได้รับการอัปเดตดังนี้

RMSProp แสดงให้เห็นถึงการปรับตัวที่ดีของอัตราการเรียนรู้ในแอปพลิเคชันต่างๆ RMSProp สามารถมองได้ว่าเป็นการวางนัยทั่วไปของRpropและสามารถทำงานกับมินิแบตช์ได้เช่นกัน ต่างจากแบตช์แบบเต็มเท่านั้น[ 40 ]

อดัม

Adam [ 43 ] (ย่อมาจาก Adaptive Moment Estimation) เป็นการอัปเดตในปี 2014 ของ ตัวเพิ่มประสิทธิภาพ RMSPropโดยผสมผสานกับคุณสมบัติหลักของวิธีการ Momentum [ 44 ] ในอัลกอริธึมการเพิ่มประสิทธิภาพนี้ จะใช้ค่าเฉลี่ยเคลื่อนที่พร้อมกับการลืมแบบเอกซ์โพเนนเชียลของทั้งเกรเดียนต์และโมเมนต์ที่สองของ เกรเดียนต์ เมื่อกำหนดพารามิเตอร์และฟังก์ชันการสูญเสียโดยที่ดัชนีการวนซ้ำการฝึกอบรมปัจจุบัน (ดัชนีที่) การอัปเดตพารามิเตอร์ของ Adam จะได้รับดังนี้:

โดยที่เป็นค่าสเกลาร์ขนาดเล็ก (เช่น) ใช้เพื่อป้องกันการหารด้วย 0 และ(เช่น 0.9) และ(เช่น 0.999) คือปัจจัยการลืมสำหรับเกรเดียนต์และโมเมนต์อันดับสองของเกรเดียนต์ตามลำดับ การยกกำลังสองและการถอดรากที่สองทำทีละองค์ประกอบ

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

การพิสูจน์เบื้องต้นที่ยืนยันการบรรจบกันของ Adam นั้นไม่สมบูรณ์ และการวิเคราะห์ในภายหลังได้เปิดเผยว่า Adam ไม่บรรจบกันสำหรับวัตถุประสงค์นูนทั้งหมด[ 45 ] [ 46 ]ถึงกระนั้นAdamก็ยังคงถูกใช้งานต่อไปเนื่องจากมีประสิทธิภาพที่ดีในทางปฏิบัติ[ 47 ]

ตัวแปร

ความนิยมของAdamได้เป็นแรงบันดาลใจให้เกิดการพัฒนาและปรับปรุง Adam ในรูปแบบต่างๆ มากมาย ตัวอย่างเช่น:

การไล่ระดับความชันแบบสุ่มตามเครื่องหมาย

แม้ว่าการเพิ่มประสิทธิภาพตามเครื่องหมายจะย้อนกลับไปถึงRprop ที่กล่าวถึงข้างต้น แต่ในปี 2018 นักวิจัยได้พยายามทำให้ Adam ง่ายขึ้นโดยการลบขนาดของเกรเดียนต์แบบสุ่มออกไปและพิจารณาเฉพาะเครื่องหมายเท่านั้น[ 56 ] [ 57 ]ซึ่งส่งผลให้ต้นทุนการสื่อสารในการถ่ายโอนเกรเดียนต์จากเวิร์กเกอร์ไปยังเซิร์ฟเวอร์พารามิเตอร์ลดลงอย่างมาก ในแง่นี้ มันช่วยให้บีบอัดข้อมูลเกรเดียนต์ได้ดีขึ้น ในขณะที่มีการบรรจบกันที่เทียบได้กับ SGD มาตรฐาน[ 57 ]

การค้นหาเส้นแบบย้อนกลับ (Backtracking line search ) เป็นอีกรูปแบบหนึ่งของการลดระดับความชัน (gradient descent) ข้อมูลทั้งหมดด้านล่างนี้มาจากลิงก์ที่กล่าวถึง โดยอิงตามเงื่อนไขที่เรียกว่าเงื่อนไข Armijo–Goldstein ทั้งสองวิธีอนุญาตให้เปลี่ยนอัตราการเรียนรู้ได้ในแต่ละรอบการทำซ้ำ อย่างไรก็ตาม วิธีการเปลี่ยนแปลงนั้นแตกต่างกัน การค้นหาเส้นแบบย้อนกลับใช้การประเมินฟังก์ชันเพื่อตรวจสอบเงื่อนไขของ Armijo และโดยหลักการแล้ว ลูปในอัลกอริทึมสำหรับการกำหนดอัตราการเรียนรู้สามารถยาวและไม่ทราบล่วงหน้าได้ SGD แบบปรับได้ (Adaptive SGD) ไม่จำเป็นต้องใช้ลูปในการกำหนดอัตราการเรียนรู้ ในทางกลับกัน Adaptive SGD ไม่รับประกัน "คุณสมบัติการลดลง" ซึ่งการค้นหาเส้นแบบย้อนกลับมี ซึ่งก็คือสำหรับทุก n หากความชันของฟังก์ชันต้นทุนมีความต่อเนื่องแบบ Lipschitz ทั่วโลก โดยมีค่าคงที่ Lipschitz เป็น L และอัตราการเรียนรู้ถูกเลือกในลำดับ 1/L แล้ว SGD เวอร์ชันมาตรฐานจะเป็นกรณีพิเศษของการค้นหาเส้นแบบย้อนกลับ

วิธีการลำดับที่สอง

อนาล็อกเชิงสุ่มของอัลกอริธึม Newton–Raphson มาตรฐาน (เชิงกำหนด) (วิธี "ลำดับที่สอง") ให้รูปแบบการเพิ่มประสิทธิภาพแบบวนซ้ำที่เหมาะสมที่สุดหรือใกล้เคียงที่สุดในเชิงอะซิมโทติกในบริบทของการประมาณเชิงสุ่ม วิธีการที่ใช้การวัดโดยตรงของเมทริกซ์ Hessianของผลรวมในฟังก์ชันความเสี่ยงเชิงประจักษ์ได้รับการพัฒนาโดย Byrd, Hansen, Nocedal และ Singer [ 58 ]อย่างไรก็ตาม การกำหนดเมทริกซ์ Hessian ที่จำเป็นสำหรับการเพิ่มประสิทธิภาพโดยตรงอาจเป็นไปไม่ได้ในทางปฏิบัติ วิธีการที่ใช้ได้ผลจริงและถูกต้องตามทฤษฎีสำหรับ SGD เวอร์ชันลำดับที่สองที่ไม่ต้องการข้อมูล Hessian โดยตรงนั้นได้มาจาก Spall และคนอื่นๆ[ 59 ] [ 60 ] [ 61 ] (Ruppert เสนอวิธีการที่มีประสิทธิภาพน้อยกว่าโดยอาศัยความแตกต่างแบบจำกัด แทนที่จะใช้การรบกวนพร้อมกัน[ 62 ] ) อีกแนวทางหนึ่งในการประมาณเมทริกซ์ Hessian คือการแทนที่ด้วยเมทริกซ์ข้อมูล Fisher ซึ่งแปลงเกรเดียนต์ปกติให้เป็นแบบธรรมชาติ[ 63 ]วิธีการเหล่านี้ที่ไม่ต้องการข้อมูล Hessian โดยตรงนั้นขึ้นอยู่กับค่าของผลรวมในฟังก์ชันความเสี่ยงเชิงประจักษ์ข้างต้นหรือค่าของเกรเดียนต์ของผลรวม (เช่น อินพุต SGD) โดยเฉพาะอย่างยิ่ง ความเหมาะสมอันดับสองสามารถบรรลุได้ในเชิงอะซิมโทติกโดยไม่ต้องคำนวณเมทริกซ์ Hessian ของผลรวมในฟังก์ชันความเสี่ยงเชิงประจักษ์โดยตรง เมื่อวัตถุประสงค์คือการสูญเสีย กำลังสองน้อยที่สุดแบบไม่เชิงเส้น โดยที่คือแบบจำลองการทำนาย (เช่นเครือข่ายประสาทเทียมเชิงลึก ) โครงสร้างของวัตถุประสงค์สามารถนำมาใช้เพื่อประมาณข้อมูลอันดับ 2 โดยใช้เกรเดียนต์เท่านั้น วิธีการดังกล่าวนั้นเรียบง่ายและมักได้ผล[ 64 ]

การประมาณค่าในเวลาต่อเนื่อง

สำหรับอัตราการเรียนรู้ที่ต่ำการไล่ระดับแบบสุ่ม (stochastic gradient descent) สามารถมองได้ว่าเป็นการแบ่งส่วนของสมการเชิงอนุพันธ์สามัญของการไหลของไล่ระดับ (gradient flow ODE)

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

โดยที่หมายถึง การหาค่าเฉลี่ยโดยพิจารณาจากการเลือกดัชนีแบบสุ่มในแผนการลดระดับความชันแบบสุ่ม

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

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

อย่างไรก็ตาม SDE นี้เป็นเพียงการประมาณการเคลื่อนที่แบบจุดเดียวของการไล่ระดับแบบสุ่มเท่านั้น สำหรับการประมาณการไหลแบบสุ่มจำเป็นต้องพิจารณา SDE ที่มีสัญญาณรบกวนมิติอนันต์[ 66 ]

ดูเพิ่มเติม

หมายเหตุ

  1. ^หมายถึงผลคูณแบบทีละองค์ประกอบ

อ่านเพิ่มเติม

  • บอตตู, เลออน (2004), "การเรียนรู้แบบสุ่ม" , การบรรยายขั้นสูงเกี่ยวกับการเรียนรู้ของเครื่องจักร , LNAI, เล่มที่ 3176, สปริงเกอร์, หน้า  146–168 , ISBN 978-3-540-23122-6
  • Buduma, Nikhil; Locascio, Nicholas (2017), "Beyond Gradient Descent" , Fundamentals of Deep Learning : Designing Next-Generation Machine Intelligence Algorithms , O'Reilly, ISBN 9781491925584
  • LeCun, Yann A. ; Bottou, Léon; Orr, Genevieve B.; Müller, Klaus-Robert (2012), "Efficient BackProp" , Neural Networks: Tricks of the Trade , Springer, หน้า  9–48 , ISBN 978-3-642-35288-1
  • Spall, James C. (2003), บทนำสู่การค้นหาและการเพิ่มประสิทธิภาพเชิงสุ่ม , Wiley , ISBN 978-0-471-33052-3
  • "การลดระดับความชัน: โครงข่ายประสาทเทียมเรียนรู้ได้อย่างไร" . 3Blue1Brown . 16 ตุลาคม 2017. เก็บถาวรจากต้นฉบับเมื่อ 22 ธันวาคม 2021 – ผ่านทางYouTube .
  • Goh (4 เมษายน 2560). "ทำไมโมเมนตัมถึงได้ผลจริง" . Distill . 2 (4). doi : 10.23915/distill.00006 .เอกสารเชิงโต้ตอบที่อธิบายเรื่องโมเมนตัม
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Stochastic_gradient_descent&oldid=1360442540 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การไล่ระดับแบบสุ่ม

การไล่ระดับแบบสุ่ม (มักย่อว่าSGD ) เป็น วิธี การวนซ้ำเพื่อเพิ่มประสิทธิภาพฟังก์ชันเป้าหมายที่มีคุณสมบัติความเรียบ ที่เหมาะสม (เช่น สามารถหาอนุพันธ์ได้หรือสามารถหาอนุพันธ์ย่อยได้ ).

พื้นหลัง

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

วิธีการวนซ้ำ

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

การถดถอยเชิงเส้น

สมมติว่าเราต้องการหาเส้นตรงที่เหมาะสมกับชุดข้อมูลฝึกฝนที่มีข้อมูลสังเกตการณ์และค่าประมาณที่สอดคล้องกันโดยใช้ วิธีการกำลัง สองน้อยที่สุด ฟังก์ชันเป้าหมายที่จะต้องลดให้เหลือน้อยที่สุดคือ บรรทัดสุดท้ายในรหัสเทียมข้างต้นสำหรับปัญหานี้จะกลายเป็น:...