TL; DR:ขนาดมินิแบตช์ที่ใหญ่เกินไปมักทำให้ความแม่นยำลดลง !
สำหรับผู้ที่สนใจนี่คือคำอธิบาย
ความเร็วมีสองแนวคิด:
- ความเร็วในการคำนวณ
- ความเร็วของการลู่เข้าของอัลกอริทึม
ความเร็วในการคำนวณเป็นเพียงความเร็วในการคำนวณเชิงตัวเลขในฮาร์ดแวร์ อย่างที่คุณพูดมันมักจะสูงกว่าด้วยขนาดมินิแบทช์ที่ใหญ่กว่า นั่นเป็นเพราะห้องสมุดพีชคณิตเชิงเส้นใช้ vectorization สำหรับการดำเนินการเวกเตอร์และเมทริกซ์เพื่อเร่งพวกเขาด้วยค่าใช้จ่ายในการใช้หน่วยความจำเพิ่มเติม กำไรสามารถมีนัยสำคัญถึงจุด จากประสบการณ์ของฉันมีจุดหลังจากที่มีเพียงกำไรเล็กน้อยในความเร็วถ้ามี จุดขึ้นอยู่กับชุดข้อมูลฮาร์ดแวร์และไลบรารีที่ใช้สำหรับการคำนวณเชิงตัวเลข (ภายใต้ประทุน)
แต่อย่าลืมว่ายังมีอีกความคิดเรื่องความเร็วซึ่งบอกเราว่าอัลกอริทึมของเรามาบรรจบกันได้เร็วแค่ไหน
ประการแรกมันหมายถึงอะไรสำหรับอัลกอริทึมของเราที่จะบรรจบกัน? มันขึ้นอยู่กับเราที่จะกำหนดและตัดสินใจว่าเมื่อใดที่เราพอใจกับความถูกต้องหรือข้อผิดพลาดที่เราได้รับคำนวณจากชุดการตรวจสอบความถูกต้อง เราสามารถกำหนดไว้ล่วงหน้าและรอให้อัลกอริทึมมาถึงจุดนั้นหรือเราสามารถตรวจสอบกระบวนการฝึกอบรมและตัดสินใจหยุดเมื่อข้อผิดพลาดการตรวจสอบเริ่มขึ้นอย่างมีนัยสำคัญ (แบบจำลองเริ่มพอดีกับชุดข้อมูล) เราไม่ควรหยุดทันทีเมื่อเกิดข้อผิดพลาดครั้งแรกถ้าเราทำงานกับชุดเล็ก ๆ เพราะเราใช้ Stochastic Gradient Descent, SGD ในกรณีของการไล่ระดับสี (เต็มชุด) หลังจากแต่ละยุคอัลกอริทึมจะตัดสินขั้นต่ำไม่ว่าจะเป็นท้องถิ่นหรือระดับโลก SGD ไม่เคยตัดสินขั้นต่ำจริงๆ มันสั่นไปรอบ ๆ มัน มันสามารถไปได้เรื่อย ๆ
ทีนี้หลังจากทฤษฎีทั้งหมดมี "จับ" ที่เราต้องให้ความสนใจ เมื่อใช้ขนาดแบตช์ที่เล็กลงการคำนวณข้อผิดพลาดจะมีเสียงดังกว่าเมื่อเราใช้ขนาดแบทช์ที่ใหญ่กว่า หนึ่งจะพูดว่าดีที่ไม่ดีใช่ไหม เสียงคือสิ่งที่สามารถช่วยให้อัลกอริทึมกระโดดออกมาจากจุดต่ำสุดในท้องถิ่นที่ไม่ดีและมีโอกาสมากขึ้นในการหาระดับต่ำสุดในท้องถิ่นที่ดีกว่าหรือหวังว่าจะเป็นระดับต่ำสุดทั่วโลก
ดังนั้นหากเราสามารถหาทางออกที่ดีกว่าได้อย่างรวดเร็วยิ่งขึ้นโดยใช้ขนาดแบทช์ที่เล็กกว่าแทนที่จะเป็นอันที่ใหญ่กว่าเพียงแค่ใช้เสียง "ไม่พึงประสงค์" เราสามารถปรับแต่งระหว่างเวลาทั้งหมดที่ใช้สำหรับอัลกอริทึมของเรา ทางออกและความแม่นยำที่สูงขึ้น
สิ่งที่ฉันต้องการจะพูดคือเพื่อความถูกต้องแม่นยำ (หรือข้อผิดพลาด) ขนาดของชุดงานที่น้อยลงอาจนำไปสู่การฝึกอบรมโดยรวมที่สั้นลงไม่นานเท่าที่หลายคนเชื่อ
หรือถ้าเราตัดสินใจที่จะรักษาเวลาการฝึกอบรมเหมือนเดิมเราอาจได้รับความแม่นยำที่สูงขึ้นเล็กน้อยด้วยขนาดแบทช์ที่น้อยลงและเราอาจจะโดยเฉพาะอย่างยิ่งถ้าเราเลือกอัตราการเรียนรู้ของเราอย่างเหมาะสม
หากคุณมีเวลาลองอ่านบทความนี้:
การประเมินอย่างเป็นระบบเกี่ยวกับความก้าวหน้าของ CNN ใน ImageNet
โดยเฉพาะลองดูที่ "3.7. ขนาดแบทช์และอัตราการเรียนรู้" และรูปที่ 8 คุณจะเห็นว่าขนาดมินิแบทช์ขนาดใหญ่ แม้ว่าจะปรับอัตราการเรียนรู้เป็นฮิวริสติก
โดยทั่วไปขนาดแบตช์ที่ 32 เป็นจุดเริ่มต้นที่ดีและคุณควรลองด้วย 64, 128 และ 256 ค่าอื่น ๆ (ต่ำกว่าหรือสูงกว่า) อาจใช้ได้สำหรับชุดข้อมูลบางชุด แต่โดยทั่วไปช่วงที่กำหนดจะดีที่สุด เริ่มทดลองกับ แม้ว่าภายใต้ 32 มันอาจช้าเกินไปเนื่องจากความเร็วในการคำนวณลดลงอย่างมีนัยสำคัญ หากคุณได้รับข้อผิดพลาด "หน่วยความจำไม่เพียงพอ" คุณควรลองลดขนาดมินิแบทช์
ดังนั้นมันไม่ได้เกี่ยวกับการใช้ขนาดที่เล็กที่สุดที่เป็นไปได้ซึ่งเหมาะกับหน่วยความจำ
เพื่อสรุปและตอบคำถามของคุณขนาดมินิแบทช์ขนาดเล็ก (ไม่เล็กเกินไป) มักจะนำไปสู่การวนซ้ำของอัลกอริทึมการฝึกอบรมที่น้อยกว่าขนาดแบทช์ขนาดใหญ่ แต่รวมถึงความแม่นยำโดยรวมที่สูงขึ้นเช่น เครือข่ายประสาทที่ทำงานได้ดีขึ้นในเวลาฝึกอบรมเท่ากันหรือน้อยกว่า
อย่าลืมว่าเสียงที่สูงขึ้นสามารถช่วยให้มันกระโดดออกมาจากจุดต่ำสุดในท้องถิ่นที่ไม่ดีแทนที่จะปล่อยให้มันติดอยู่ในนั้น