ฉันเข้าใจว่าอาจใช้การไล่ระดับสีแบบสโตแคสติกเพื่อเพิ่มประสิทธิภาพโครงข่ายประสาทเทียมโดยใช้การทำ backpropagation โดยการอัพเดทแต่ละการวนซ้ำด้วยตัวอย่างชุดข้อมูลการฝึกอบรมที่แตกต่างกัน ขนาดของแบทช์ควรใหญ่แค่ไหน?
ฉันเข้าใจว่าอาจใช้การไล่ระดับสีแบบสโตแคสติกเพื่อเพิ่มประสิทธิภาพโครงข่ายประสาทเทียมโดยใช้การทำ backpropagation โดยการอัพเดทแต่ละการวนซ้ำด้วยตัวอย่างชุดข้อมูลการฝึกอบรมที่แตกต่างกัน ขนาดของแบทช์ควรใหญ่แค่ไหน?
คำตอบ:
ขนาด "ตัวอย่าง" คุณกำลังพูดถึงจะเรียกว่าเป็นชุดขนาด , Bพารามิเตอร์ขนาดแบทช์เป็นเพียงหนึ่งในพารามิเตอร์ไฮเปอร์ที่คุณจะปรับเมื่อคุณฝึกอบรมเครือข่ายประสาทเทียมด้วย Stochastic Gradient Descent (SGD) และขึ้นอยู่กับข้อมูล วิธีการพื้นฐานที่สุดของการค้นหาพารามิเตอร์มากเกินไปคือทำการค้นหากริดผ่านอัตราการเรียนรู้และขนาดแบทช์เพื่อหาคู่ที่ทำให้เครือข่ายมาบรรจบกัน
เพื่อให้เข้าใจว่าขนาดแบทช์ควรเป็นอย่างไรสิ่งสำคัญคือต้องเห็นความสัมพันธ์ระหว่างการไล่ระดับแบทช์แบบออนไลน์ SGD และมินิแบทช์แบบ SGD ต่อไปนี้เป็นสูตรทั่วไปสำหรับขั้นตอนการอัปเดตน้ำหนักเป็นชุดเล็ก ๆ SGD ซึ่งเป็นลักษณะทั่วไปของทั้งสามประเภท [ 2 ]
โปรดทราบว่าด้วย 1 ฟังก์ชันการสูญเสียไม่ใช่ตัวแปรสุ่มอีกต่อไปและไม่ใช่การประมาณสุ่ม
SGD รวมตัวกันเร็วกว่าการไล่ระดับสีแบบ "แบทช์" เนื่องจากจะอัปเดตตุ้มน้ำหนักหลังจากดูชุดย่อยของการฝึกอบรมที่เลือกแบบสุ่ม ให้ได้รับการฝึกอบรมของเราตั้งและให้ม⊂ x ขนาดแบทช์Bเป็นเพียงความสำคัญของm : B = | m | .
การไล่ระดับสีแบบแบทช์จะอัปเดตตุ้มน้ำหนักโดยใช้การไล่ระดับสีของชุดข้อมูลทั้งหมดx ; ขณะ SGD ปรับปรุงน้ำหนักโดยใช้ค่าเฉลี่ยของการไล่ระดับสีสำหรับมินิแบทช์เมตร (การใช้ค่าเฉลี่ยซึ่งตรงข้ามกับผลรวมจะป้องกันอัลกอริทึมจากการทำตามขั้นตอนที่มีขนาดใหญ่เกินไปถ้าชุดข้อมูลมีขนาดใหญ่มากมิฉะนั้นคุณจะต้องปรับอัตราการเรียนรู้ตามขนาดของชุดข้อมูล) การประมาณแบบสุ่มของการไล่ระดับสีที่ใช้ใน SGD เท่ากับการไล่ระดับสีแบบกำหนดค่าที่ใช้ในการไล่ระดับสีแบบแบทช์ E [ ∇ L S G D ( θ , m ) ] = ∇ )
ทุกครั้งที่เราใช้เวลาตัวอย่างและการปรับปรุงน้ำหนักของเราจะเรียกว่ามินิแบทช์ เวลาที่เราทำงานผ่านชุดทั้งแต่ละคนก็เรียกว่ายุค
สมมุติว่าเรามีข้อมูลเวกเตอร์ , เวกเตอร์น้ำหนักเริ่มต้นที่กำหนดพารามิเตอร์เครือข่ายประสาทของเรา, θ 0 : R S , และฟังก์ชั่นการสูญเสียL ( θ , x ) : R S → R D → R Sที่เรา กำลังพยายามลดให้น้อยที่สุด หากเรามีตัวอย่างการฝึกอบรมTและขนาดชุดBแล้วเราสามารถแยกตัวอย่างการฝึกอบรมเหล่านั้นออกเป็น C mini-batches:
สำหรับความเรียบง่ายเราสามารถสันนิษฐานได้ว่า T สามารถแบ่งได้อย่างทั่วถึงโดย B แม้ว่าในกรณีนี้จะไม่เป็นเช่นนั้นบ่อยครั้งที่มันไม่ได้เป็นเช่นนั้นน้ำหนักที่เหมาะสมควรถูกกำหนดให้กับ mini-batch แต่ละชุด
อัลกอริทึมซ้ำสำหรับ SGD ที่มี epochs แสดงไว้ด้านล่าง:
หมายเหตุ: ในชีวิตจริงเรากำลังอ่านข้อมูลตัวอย่างการฝึกอบรมเหล่านี้จากหน่วยความจำและเนื่องจากแคชการดึงข้อมูลล่วงหน้าและเทคนิคหน่วยความจำอื่น ๆ ที่คอมพิวเตอร์ของคุณอัลกอริทึมของคุณจะทำงานได้เร็วขึ้นหากหน่วยความจำเข้าถึงรวมกันเช่นเมื่อคุณอ่านหน่วยความจำ ตามลำดับและอย่ากระโดดไปมาแบบสุ่ม ดังนั้นการใช้งาน SGD ส่วนใหญ่จะเป็นการสับเปลี่ยนชุดข้อมูลแล้วโหลดตัวอย่างลงในหน่วยความจำตามลำดับที่จะอ่าน
พารามิเตอร์หลักสำหรับวานิลลา (ไม่มีโมเมนตัม) SGD อธิบายไว้ข้างต้นคือ:
ฉันชอบคิดว่า epsilon เป็นหน้าที่ตั้งแต่ยุคจนถึงอัตราการเรียนรู้ ฟังก์ชั่นนี้จะเรียกว่าช่วงเวลาที่อัตราการเรียนรู้
หากคุณต้องการให้อัตราการเรียนรู้คงที่เพียงกำหนด epsilon เป็นฟังก์ชันคงที่
ขนาดแบทช์จะกำหนดจำนวนตัวอย่างที่คุณดูก่อนทำการอัปเดตน้ำหนัก ยิ่งน้อยก็จะยิ่งมีเสียงสัญญาณการฝึกอบรมที่มากขึ้นเท่าไรก็จะยิ่งมีสัญญาณที่สูงขึ้นและยิ่งใช้เวลาในการคำนวณการไล่ระดับสีในแต่ละขั้นตอนนานเท่าใด
การอ้างอิงและการอ่านเพิ่มเติม:
For simplicity we can assume that D is evenly divisible by B
. คุณไม่ได้หมายความว่าTควรหารด้วย B อย่างสม่ำเสมอหรือไม่?
B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.
(จากรายงานของ Bengio ในปี 2012)