ขนาดแบทช์ในเครือข่ายประสาทเทียมคืออะไร


174

ฉันใช้Python Keras packageสำหรับเครือข่ายประสาท นี่คือการเชื่อมโยง มีbatch_sizeเท่ากับจำนวนตัวอย่างทดสอบ? จาก Wikipedia เรามีข้อมูลนี้ :

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

ข้อมูลข้างต้นอธิบายถึงข้อมูลการทดสอบหรือไม่ เหมือนกับbatch_sizeใน keras (จำนวนตัวอย่างต่อการไล่ระดับสี) หรือไม่


3
เป็นการดีที่จะเห็นหลักสูตรclass.coursera.org/ml-005/lecture/previewโดยเฉพาะอย่างยิ่งสำหรับคุณในสัปดาห์ที่ 4-6 + 10 วิกิพีเดียอาจไม่ใช่ทรัพยากรที่มีค่าสำหรับการเรียนรู้เครือข่ายประสาท
404pio

คำตอบ:


228

ชุดขนาดกำหนดจำนวนตัวอย่างที่จะแพร่กระจายผ่านเครือข่าย

ตัวอย่างเช่นสมมติว่าคุณมีตัวอย่างการฝึกอบรม 1,050 ตัวอย่างและคุณต้องการตั้งค่าbatch_sizeเท่ากับ 100 อัลกอริทึมใช้ตัวอย่าง 100 ตัวอย่างแรก (จากวันที่ 1 ถึง 100) จากชุดข้อมูลการฝึกอบรมและฝึกอบรมเครือข่าย ถัดไปใช้เวลา 100 ตัวอย่างที่สอง (จาก 101 ถึง 200) และฝึกอบรมเครือข่ายอีกครั้ง เราสามารถทำตามขั้นตอนนี้ได้จนกว่าเราจะแพร่กระจายตัวอย่างทั้งหมดผ่านเครือข่าย ปัญหาอาจเกิดขึ้นกับกลุ่มตัวอย่างชุดสุดท้าย ในตัวอย่างของเราเราใช้ 1,050 ซึ่งไม่หารด้วย 100 โดยไม่มีเศษ ทางออกที่ง่ายที่สุดคือการรับ 50 ตัวอย่างสุดท้ายและฝึกอบรมเครือข่าย

ข้อดีของการใช้ขนาดแบทช์ <จำนวนตัวอย่างทั้งหมด:

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

  • โดยทั่วไปแล้วเครือข่ายจะฝึกให้เร็วขึ้นด้วย mini-batches นั่นเป็นเพราะเราอัปเดตน้ำหนักหลังจากการเผยแพร่แต่ละครั้ง ในตัวอย่างของเราเราเผยแพร่ 11 ชุด (10 ในนั้นมี 100 ตัวอย่างและ 1 มี 50 ตัวอย่าง) และหลังจากนั้นพวกเขาแต่ละคนเราได้อัปเดตพารามิเตอร์ของเครือข่ายของเรา ถ้าเราใช้ตัวอย่างทั้งหมดระหว่างการเผยแพร่เราจะทำการอัปเดตเพียง 1 รายการสำหรับพารามิเตอร์ของเครือข่าย

ข้อเสียของการใช้ขนาดแบทช์ <จำนวนตัวอย่างทั้งหมด:

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

ทิศทางการไล่ระดับสีสำหรับการตั้งค่าแบบต่างๆ

Stochastic เป็นเพียงมินิแบทช์ที่มีbatch_sizeค่าเท่ากับ 1 ในกรณีนี้การไล่ระดับสีจะเปลี่ยนทิศทางของมันบ่อยกว่าการไล่ระดับสีแบบมินิแบทช์


ขอบคุณสำหรับคำตอบ. คุณทำงานร่วมกับKeras? แล้วจะตั้งค่าข้อมูลทดสอบในแพ็คเกจนี้?
user2991243

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

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

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

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

151

ในคำศัพท์เครือข่ายประสาท:

  • one epoch = หนึ่ง pass forward และ one backward pass ของตัวอย่างการฝึกอบรมทั้งหมด
  • ขนาดชุด = จำนวนตัวอย่างการฝึกอบรมในหนึ่งไปข้างหน้า / ถอยหลังผ่าน ยิ่งแบทช์มีขนาดใหญ่เท่าใดคุณจะต้องมีพื้นที่หน่วยความจำมากขึ้น
  • จำนวนการวนซ้ำ = จำนวนครั้งการผ่านแต่ละครั้งโดยใช้ [ขนาดชุด] จำนวนตัวอย่าง เพื่อความชัดเจนหนึ่งรอบ = หนึ่งผ่านไปข้างหน้า + หนึ่งย้อนหลัง (เราไม่นับการส่งผ่านและการย้อนหลังเป็นสองรอบที่แตกต่างกัน)

ตัวอย่าง: หากคุณมีตัวอย่างการฝึกอบรม 1,000 ตัวอย่างและขนาดแบทช์ของคุณคือ 500 ดังนั้นจะใช้เวลา 2 รอบในการทำ 1 ครั้ง

FYI: ขนาดแบทช์ของการแลกเปลี่ยนเทียบกับจำนวนการวนซ้ำเพื่อฝึกอบรมเครือข่ายประสาท


แต่อะไรคือความแตกต่างระหว่างการใช้ [ขนาดชุดข้อมูล] จำนวนตัวอย่างและฝึกอบรมเครือข่ายในแต่ละตัวอย่างและดำเนินการกับตัวอย่างหมายเลข [ชุดขนาด] ถัดไป เนื่องจากคุณผ่านตัวอย่างหนึ่งผ่านเครือข่ายและใช้ THB และนำตัวอย่างถัดไปและมันจะไม่สร้างความแตกต่างถ้าขนาดแบทช์คือ 10 หรือ 1,000 หรือ 100000 หลังจาก [ตัวอย่างขนาดแบทช์] ทำตัวอย่างต่อไปของ ชุดต่อไปจะเป็นไปตาม มันจะสร้างความแตกต่างได้ก็ต่อเมื่อตัวอย่างของ [ขนาดแบทช์] จะผ่าน [จำนวนการวนซ้ำ] ครั้งที่เครือข่ายแล้วดำเนินการกับตัวอย่าง [ขนาดแบทช์] ถัดไป
ศูนย์ Dinhobl

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

ความแตกต่างระหว่างยุคและการทำซ้ำคืออะไร?
Goldname

1
@Goldname 1 ยุครวมตัวอย่างการฝึกอบรมทั้งหมดในขณะที่ 1 ซ้ำมีเพียงตัวอย่างขนาดชุดการฝึกอบรม
Franck Dernoncourt

3

เมื่อแก้ปัญหาการปรับให้เหมาะสมกับ CPU คุณจะใช้อัลกอริทึมซ้ำกับข้อมูลอินพุตบางส่วน ในการทำซ้ำแต่ละครั้งเหล่านี้คุณจะอัปเดตการวัดของปัญหาที่เกิดขึ้นกับการคำนวณบางอย่างบนข้อมูล ตอนนี้เมื่อขนาดของข้อมูลของคุณมีขนาดใหญ่อาจต้องใช้เวลานานพอสมควรในการทำซ้ำทุกครั้งและอาจใช้ทรัพยากรจำนวนมาก ดังนั้นบางครั้งคุณเลือกที่จะใช้การคำนวณซ้ำเหล่านี้ในส่วนของข้อมูลเพื่อประหยัดเวลาและทรัพยากรการคำนวณ ส่วนนี้คือ batch_size และกระบวนการที่เรียกว่าการประมวลผลชุดข้อมูล (ใน Neural Network Lingo) เมื่อคุณใช้การคำนวณกับข้อมูลทั้งหมดของคุณคุณจะทำการประมวลผลข้อมูลออนไลน์ ฉันเดาคำศัพท์มาจากยุค 60 และแม้กระทั่งก่อนหน้านี้ ไม่มีใครจำ bat ไฟล์ DOS? แต่แน่นอนว่าแนวคิดนี้เกิดขึ้นเพื่อหมายถึงเธรดหรือส่วนของข้อมูลที่จะใช้


2

เอกสารประกอบสำหรับKerasชุดขนาดประมาณสามารถพบได้ตามfitฟังก์ชั่นในรุ่น (ทำงาน API)หน้า

batch_size: จำนวนเต็มหรือไม่มี จำนวนตัวอย่างต่อการอัพเดทไล่ระดับสี ถ้าไม่ได้ระบุ batch_size จะมีค่าเริ่มต้นเป็น 32

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

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