คุณจะแก้ไขข้อบกพร่องและบรรเทาความล้มเหลวในการเพิ่มประสิทธิภาพได้อย่างไร
สรุป: หากโมเดลพบปัญหาในการเพิ่มประสิทธิภาพ คุณจะต้องแก้ไขก่อนที่จะลองทำอย่างอื่น การวินิจฉัยและแก้ไขความล้มเหลวในการฝึก เป็นการวิจัยที่ดำเนินการอยู่
โปรดสังเกตข้อมูลต่อไปนี้เกี่ยวกับรูปที่ 4:
- การเปลี่ยนแปลงความก้าวหน้าจะไม่ทำให้ประสิทธิภาพลดลงเมื่อมีอัตราการเรียนรู้ต่ำ
- อัตราการเรียนรู้สูงจะไม่สามารถฝึกได้ดีอีกต่อไปเนื่องจากความไม่เสถียร
- การใช้การอุ่นเครื่อง 1, 000 ขั้นตอนสำหรับอัตราการเรียนรู้จะช่วยแก้ไขกรณีความไม่เสถียรที่เจาะจงนี้ได้ ทำให้การฝึกที่คงที่มีอัตราการเรียนรู้สูงสุดที่ 0.1
การระบุภาระงานที่ไม่เสถียร
ภาระงานจะไม่เสถียรหากอัตราการเรียนรู้สูงเกินไป ความไม่เสถียรจะเกิดขึ้นก็ต่อเมื่อจะต้องใช้อัตราการเรียนรู้ที่น้อยเกินไป มีความไม่เสถียรในการฝึกอย่างน้อย 2 ประเภทที่สมควรแยกความแตกต่าง ดังนี้
- มีความไม่เสถียรเมื่อเริ่มต้นหรือการฝึกในช่วงแรกๆ
- มีความไม่มั่นคงฉับพลันในระหว่างการฝึก
คุณจะใช้แนวทางที่เป็นระบบในการระบุปัญหาความเสถียรในภาระงานได้โดยทำตามขั้นตอนต่อไปนี้
- ปัดดูอัตราการเรียนรู้และค้นหาอัตราการเรียนรู้ที่ดีที่สุด lr*
- พล็อตกราฟเส้นโค้งการสูญเสียการฝึกสำหรับอัตราการเรียนรู้สูงกว่า lr*
- หากอัตราการเรียนรู้ > lr* แสดงความไม่เสถียรของการสูญเสีย (ความไม่เสถียรเพิ่มขึ้นไม่ลดลงในระหว่างการฝึก) การแก้ไขความไม่เสถียรมักจะช่วยปรับปรุงการฝึกได้
บันทึกค่าปกติ L2 ของการไล่ระดับสีแบบสูญเสียเต็มระหว่างการฝึก เนื่องจากค่าผิดปกติอาจส่งผลให้เกิดความไม่เสถียรที่ไม่เสถียรระหว่างการฝึก ข้อมูลนี้จะบอกได้ว่าควรจะตัดการไล่ระดับสีหรือการอัปเดตน้ำหนักอย่างจริงจังแค่ไหน
หมายเหตุ: โมเดลบางรุ่นแสดงการไม่เสถียรในช่วงแรกแล้วตามด้วยการกู้คืนที่ส่งผลให้การฝึกช้าลงแต่เสถียร ตารางการประเมินทั่วไปอาจพลาด ปัญหาเหล่านี้เนื่องจากไม่ได้ประเมินบ่อยพอ
ในการตรวจสอบเรื่องนี้ คุณสามารถฝึกตามเส้นทางแบบย่อประมาณ 500 ก้าวโดยใช้ lr = 2 * current best
แต่ให้ประเมินทุกขั้นตอน
การแก้ไขที่เป็นไปได้สำหรับรูปแบบความไม่เสถียรที่พบบ่อย
พิจารณาการแก้ไขที่เป็นไปได้ต่อไปนี้สำหรับรูปแบบความไม่เสถียรที่พบบ่อย
- ใช้การเตรียมอัตราการเรียนรู้ ตัวเลือกนี้เหมาะสำหรับความไม่เสถียรของการฝึกตั้งแต่เนิ่นๆ
- ใช้การตัดแบบไล่ระดับสี ดีสำหรับความไม่เสถียรของการฝึกทั้งช่วงเริ่มต้นและระหว่างกลาง และอาจแก้ไขการเริ่มต้นที่ไม่ดีซึ่งการเตรียมตัวก่อนทำไม่ได้
- ลองใช้เครื่องมือเพิ่มประสิทธิภาพใหม่ บางครั้ง อดัมสามารถรับมือกับความไม่มั่นคง ที่โมเมนตัมทำไม่ได้ นี่เป็นหัวข้อวิจัยที่กำลังดำเนินอยู่
- ตรวจสอบว่าได้ใช้แนวทางปฏิบัติแนะนำและการเริ่มต้นที่ดีที่สุดสำหรับสถาปัตยกรรมโมเดลอยู่ (ดูตัวอย่างที่จะตามมา) เพิ่มการเชื่อมต่อที่เหลือและการทำให้เป็นมาตรฐานหากโมเดลยังไม่มีการเชื่อมต่อดังกล่าว
- ทำให้เป็นการดำเนินการสุดท้ายก่อนค่าที่เหลือ ตัวอย่างเช่น
x + Norm(f(x))
โปรดทราบว่าNorm(x + f(x))
อาจทำให้เกิดปัญหาได้ - ลองกำหนดค่า Branch ที่เหลือให้เป็น 0 (ดู ReZero เป็นสิ่งที่คุณต้องการ: การบรรจบกันแบบรวดเร็วที่ความลึกขนาดใหญ่)
- ลดอัตราการเรียนรู้ นี่เป็นทางเลือกสุดท้าย
เตรียมอัตราการเรียนรู้
ควรใช้การอุ่นเครื่องอัตราการเรียนรู้เมื่อใด
รูปที่ 7a แสดงพล็อตแกนไฮเปอร์พารามิเตอร์ที่บ่งชี้ว่าโมเดล พบความไม่เสถียรในการเพิ่มประสิทธิภาพ เนื่องจากอัตราการเรียนรู้ที่ดีที่สุดอยู่ตรงขอบของความไม่เสถียร
รูปที่ 7b แสดงวิธีตรวจสอบอีกครั้งโดยการตรวจสอบการสูญเสียการฝึกของโมเดลที่ฝึกด้วยอัตราการเรียนรู้ที่ใหญ่กว่าจุดสูงสุดนี้ 5 เท่าหรือ 10 เท่า หากกราฟนั้นแสดงการขาดทุนที่เพิ่มขึ้นอย่างฉับพลันหลังจากลดลงอย่างสม่ำเสมอ (เช่น เมื่ออยู่ที่ขั้นตอนประมาณ 10,000 น. ในรูปด้านบน) โมเดลก็น่าจะได้รับผลกระทบจากความไม่เสถียรของการเพิ่มประสิทธิภาพ
วิธีเตรียมอัตราการเรียนรู้
กำหนดให้ unstable_base_learning_rate
เป็นอัตราการเรียนรู้ที่โมเดลไม่เสถียร โดยทำตามขั้นตอนก่อนหน้านี้
อุ่นเครื่องรวมถึงการกำหนดอัตราการเรียนรู้ไว้ล่วงหน้าซึ่งจะเพิ่มอัตราการเรียนรู้จาก 0 เป็น base_learning_rate
ที่คงที่ โดยมีขนาดอย่างน้อย 1 ขนาดที่ใหญ่กว่า unstable_base_learning_rate
ค่าเริ่มต้นคือลองใช้ base_learning_rate
ที่มีขนาด 10xunstable_base_learning_rate
โปรดทราบว่าอาจเรียกใช้ขั้นตอนนี้ทั้งหมดได้อีกครั้งสำหรับประมาณ 100xunstable_base_learning_rate
กำหนดการที่เจาะจงมีดังนี้
- เพิ่มจาก 0 เป็น base_learning_rate จาก Warmup_steps
- ฝึกด้วยอัตราคงที่สำหรับ post_warmup_steps
เป้าหมายของคุณคือการค้นหาจำนวน warmup_steps
ที่สั้นที่สุดที่จะช่วยให้คุณเข้าถึงอัตราการเรียนรู้สูงสุดที่สูงกว่า unstable_base_learning_rate
มาก
ดังนั้นสำหรับ base_learning_rate
แต่ละรายการ คุณต้องปรับแต่ง warmup_steps
และ post_warmup_steps
อย่างไรก็ตาม คุณสามารถตั้ง post_warmup_steps
เป็น 2*warmup_steps
ได้
ปรับแต่งการปรับอุณหภูมิได้อย่างอิสระจากกำหนดการลดลงที่มีอยู่ warmup_steps
ควรถูกกวาดตามอันดับของขนาดต่างๆ เช่น การศึกษาตัวอย่างอาจลองใช้ [10, 1000, 10,000, 100,000]
จุดที่เป็นไปได้มากที่สุดไม่ควรเกิน 10% ของ max_train_steps
เมื่อมีการสร้าง warmup_steps
ที่ยังไม่เริ่มต้นในการฝึกที่ base_learning_rate
แล้ว คุณควรนำไปใช้กับโมเดลพื้นฐาน
โดยพื้นฐานแล้ว ให้เพิ่มกำหนดการนี้ลงในกำหนดการที่มีอยู่ และใช้จุดตรวจสอบที่เหมาะสมที่สุดซึ่งกล่าวถึงข้างต้นเพื่อเปรียบเทียบการทดสอบนี้กับเกณฑ์พื้นฐาน เช่น หากเดิมเรามี max_train_steps
10,000 รายการและใช้ warmup_steps
สำหรับ 1,000 ขั้นตอน ขั้นตอนการฝึกใหม่ควรจะมีทั้งหมด 11,000 ขั้นตอน
หากต้องใช้ warmup_steps
แบบยาวสำหรับการฝึกที่เสถียร (มากกว่า 5% ของ max_train_steps
) คุณอาจต้องเพิ่ม max_train_steps
เพื่อชดเชยส่วนนี้
จริงๆ แล้วไม่มีค่า "ปกติ" สำหรับภาระงานทั้งหมด บางรุ่นต้องใช้เพียง 100 ขั้นตอนเท่านั้น ขณะที่บางรุ่น (โดยเฉพาะ Transformer) อาจต้องมากกว่า 40, 000 ขั้นตอน
การตัดไล่ระดับสี
การตัดไล่ระดับสีจะมีประโยชน์มากที่สุดเมื่อเกิดปัญหาการไล่ระดับสีที่มีขนาดใหญ่หรือเป็นค่าผิดปกติ การตัดไล่ระดับสีช่วยแก้ปัญหาต่อไปนี้ได้
- ความไม่เสถียรของการฝึกในช่วงแรก (ค่าการไล่ระดับสีขนาดใหญ่ในช่วงต้น)
- ความไม่เสถียรของการฝึกระดับกลาง (การไล่ระดับสีอย่างฉับพลันขณะฝึก)
บางครั้งการอุ่นเครื่องที่นานขึ้นอาจแก้ไขความไม่เสถียรที่การตัดไม่สามารถทำได้ โปรดดูรายละเอียดที่หัวข้อการเตรียมระบบอัตราการเรียนรู้
🤖 การตัดคลิประหว่างการเตรียมเครื่องจะเป็นอย่างไร
เกณฑ์ของคลิปที่เหมาะสมจะสูงกว่าค่าการไล่ระดับสี "ปกติ" เท่านั้น
ตัวอย่างวิธีการตัดการไล่ระดับสีมีดังนี้
- หากค่าปกติของการไล่ระดับสี $\left | g \right |$ มากกว่า เกณฑ์การตัดไล่ระดับสี $\lambda$ ให้ทำ ${g}'= \lambda \times \frac{g}{\left | g \right |}$ โดย ${g}'$ คือการไล่ระดับสีใหม่
บันทึกค่าการไล่ระดับสีแบบยกเลิกการยึดระหว่างการฝึก โดยค่าเริ่มต้น ให้สร้างสิ่งต่อไปนี้
- พล็อตแบบไล่ระดับสีแบบปกติเทียบกับขั้นตอน
- ฮิสโตแกรมของเส้นตรงของการไล่ระดับสีที่รวบรวมจากขั้นตอนทั้งหมด
เลือกเกณฑ์การตัดการไล่ระดับสีตามเปอร์เซ็นไทล์ที่ 90 ของค่าปกติการไล่ระดับสี เกณฑ์จะขึ้นอยู่กับภาระงาน แต่ 90% ก็เป็นจุดเริ่มต้นที่ดี หาก 90% ไม่ได้ผล คุณปรับเกณฑ์นี้ได้
🤖 กลยุทธ์แบบปรับเปลี่ยนได้บ้างไหม
หากลองคลิปการไล่ระดับสีแล้วแต่ปัญหาเรื่องความไม่เสถียรยังคงอยู่ คุณลองได้อีก นั่นก็คือคุณสามารถทำให้เกณฑ์มีขนาดเล็กลงได้
การตัดคลิปไล่ระดับสีอย่างเข้มงวดที่สุด (กล่าวคือ มากกว่า 50% ของการอัปเดตถูกตัด) พูดง่ายๆ คือเป็นวิธีการที่แปลกใหม่ในการลดอัตราการเรียนรู้ ถ้าคุณรู้สึกว่าใช้การตัดต่อที่ก้าวร้าวมาก คุณก็น่าจะลดอัตราการเรียนรู้แทนได้
เพราะเหตุใดคุณจึงเรียกอัตราการเรียนรู้และไฮเปอร์พารามิเตอร์การเพิ่มประสิทธิภาพอื่นๆ ซึ่งไม่ใช่พารามิเตอร์ของการแจกแจงก่อนหน้า
คำว่า "hyperparameter" มีความหมายชัดเจนในแมชชีนเลิร์นนิงแบบ Bayes ดังนั้นการอ้างอิงถึงอัตราการเรียนรู้และพารามิเตอร์การเรียนรู้เชิงลึกอื่นๆ ส่วนใหญ่แบบปรับแต่งได้เป็น "hyperparameters" ถือเป็นการละเมิดการใช้คำศัพท์ เราต้องการใช้คำว่า "metaparameter" สำหรับอัตราการเรียนรู้ พารามิเตอร์ทางสถาปัตยกรรม และสิ่งที่ปรับแต่งไม่ได้ทั้งหมดเกี่ยวกับการเรียนรู้เชิงลึก นั่นเป็นเพราะพารามิเตอร์เมตาช่วยหลีกเลี่ยงความสับสนที่อาจเกิดขึ้น จากการใช้คำว่า "ไฮเปอร์พารามิเตอร์" ในทางที่ผิด โดยเฉพาะเมื่อพูดถึงการเพิ่มประสิทธิภาพ Bayesian ซึ่งโมเดลพื้นผิวการตอบสนองความน่าจะเป็นมีไฮเปอร์พารามิเตอร์ที่แท้จริงของตัวเอง
น่าเสียดายที่แม้จะอาจทำให้สับสน แต่คำว่า "ไฮเปอร์พารามิเตอร์" กลายเป็นสิ่งที่พบได้ทั่วไปในชุมชนการเรียนรู้เชิงลึก ดังนั้น ในเอกสารฉบับนี้จึงจัดทำขึ้นสำหรับผู้ชมในวงกว้าง ซึ่งรวมถึงผู้คนจำนวนมากที่ไม่น่าจะทราบรายละเอียดทางเทคนิคนี้ เราจึงเลือกที่จะก่อให้เกิดความสับสนในแวดวงหนึ่งโดยหวังที่จะหลีกเลี่ยงเหตุอื่น กล่าวคือ เราอาจมีตัวเลือกที่แตกต่างออกไปเมื่อเผยแพร่เอกสารงานวิจัย และเราขอแนะนำให้ผู้อื่นใช้ "metaparameter" ในบริบทส่วนใหญ่
เหตุใดจึงไม่ควรปรับแต่งขนาดกลุ่มเพื่อปรับปรุงประสิทธิภาพของชุดการตรวจสอบโดยตรง
การเปลี่ยนขนาดกลุ่มโดยไม่เปลี่ยนแปลงรายละเอียดอื่นๆ ของไปป์ไลน์การฝึกมักส่งผลต่อประสิทธิภาพของชุดการตรวจสอบ อย่างไรก็ตาม โดยทั่วไปแล้ว ความแตกต่างในประสิทธิภาพของชุดการตรวจสอบระหว่างขนาดกลุ่ม 2 ขนาดจะหายไปหากมีการเพิ่มประสิทธิภาพไปป์ไลน์การฝึกโดยอิสระสำหรับขนาดกลุ่มแต่ละขนาด
ไฮเปอร์พารามิเตอร์ที่มีปฏิสัมพันธ์กับขนาดกลุ่มมากที่สุดและมีความสำคัญมากที่สุดในการปรับแยกสำหรับแต่ละขนาดของกลุ่ม คือไฮเปอร์พารามิเตอร์ของตัวเพิ่มประสิทธิภาพ (เช่น อัตราการเรียนรู้ โมเมนตัม) และไฮเปอร์พารามิเตอร์ของการปรับเป็นประจำ กลุ่มขนาดเล็กลงทำให้อัลกอริทึมการฝึกทำงานผิดพลาดมากขึ้นเนื่องจากความแปรปรวนของตัวอย่าง เสียงรบกวนนี้อาจ ทำให้ภาพมีความสม่ำเสมอ ดังนั้น กลุ่มขนาดใหญ่จึงมีแนวโน้มที่จะปรับมากเกินไป รวมถึงอาจต้องใช้การปรับเป็นประจำและ/หรือเทคนิคการจัดการรูปแบบเพิ่มเติมอื่นๆ นอกจากนี้ คุณอาจต้องปรับเปลี่ยนจำนวนขั้นตอนการฝึกเมื่อเปลี่ยนขนาดกลุ่ม
เมื่อพิจารณาผลกระทบทั้งหมดแล้ว จะไม่มีหลักฐานที่เชื่อได้ว่าขนาดกลุ่มมีผลต่อประสิทธิภาพการตรวจสอบสูงสุดที่สามารถบรรลุผลได้ ดูรายละเอียดได้ที่ Shallue et al. 2018
กฎการอัปเดตสำหรับอัลกอริทึมการเพิ่มประสิทธิภาพยอดนิยมทั้งหมดมีอะไรบ้าง
ส่วนนี้จะแสดงกฎการอัปเดตสำหรับอัลกอริทึมการเพิ่มประสิทธิภาพที่ได้รับความนิยมหลายรายการ
การไล่ระดับสีแบบสโตแคสติก (SGD)
\[\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)\]
$\eta_t$ คืออัตราการเรียนรู้ในขั้นตอนที่ $t$
สร้างกระแส
\[v_0 = 0\]
\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}\]
โดย $\eta_t$ คืออัตราการเรียนรู้ในขั้นตอนที่ $t$ และ $\gamma$ คือสัมประสิทธิ์โมเมนตัม
เนสเตรอฟ
\[v_0 = 0\]
\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - \eta_t ( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t}) )\]
โดย $\eta_t$ คืออัตราการเรียนรู้ในขั้นตอนที่ $t$ และ $\gamma$ คือสัมประสิทธิ์โมเมนตัม
RMSProp
\[v_0 = 1 \text{, } m_0 = 0\]
\[v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2\]
\[m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - m_{t+1}\]
เอแดม
\[m_0 = 0 \text{, } v_0 = 0\]
\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]
\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2\]
\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]
\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]
นาดา
\[m_0 = 0 \text{, } v_0 = 0\]
\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]
\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2\]
\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]
\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]