การฝึกอบรม Neural Network
ตอนนี้เราจะเรียนรู้วิธีฝึกโครงข่ายประสาทเทียม นอกจากนี้เรายังจะได้เรียนรู้อัลกอริทึมการเผยแพร่ย้อนกลับและการส่งย้อนกลับใน Python Deep Learning
เราต้องหาค่าที่เหมาะสมที่สุดของน้ำหนักของโครงข่ายประสาทเทียมเพื่อให้ได้ผลลัพธ์ที่ต้องการ ในการฝึกโครงข่ายประสาทเราใช้วิธีการไล่ระดับสีซ้ำ ๆ เราเริ่มต้นด้วยการเริ่มต้นน้ำหนักแบบสุ่ม หลังจากการเริ่มต้นแบบสุ่มเราทำการคาดคะเนข้อมูลบางส่วนด้วยกระบวนการส่งต่อไปข้างหน้าคำนวณฟังก์ชันต้นทุนที่สอดคล้องกัน C และอัปเดตน้ำหนักแต่ละตัวด้วยจำนวนที่เป็นสัดส่วนกับ dC / dw กล่าวคืออนุพันธ์ของฟังก์ชันต้นทุนเขียน น้ำหนัก. ค่าคงที่ตามสัดส่วนเรียกว่าอัตราการเรียนรู้
สามารถคำนวณการไล่ระดับสีได้อย่างมีประสิทธิภาพโดยใช้อัลกอริธึมการแพร่กระจายย้อนกลับ ข้อสังเกตที่สำคัญของการขยายพันธุ์ย้อนกลับหรือ backward prop คือเนื่องจากกฎลูกโซ่ของความแตกต่างการไล่ระดับสีที่เซลล์ประสาทแต่ละเซลล์ในเครือข่ายประสาทสามารถคำนวณได้โดยใช้การไล่ระดับสีที่เซลล์ประสาทซึ่งมีขอบขาออกไป ดังนั้นเราจึงคำนวณการไล่ระดับสีไปข้างหลังกล่าวคือก่อนอื่นให้คำนวณการไล่ระดับของเลเยอร์เอาต์พุตจากนั้นเลเยอร์ที่ซ่อนอยู่ด้านบนสุดตามด้วยเลเยอร์ที่ซ่อนอยู่ก่อนหน้าและอื่น ๆ สิ้นสุดที่เลเยอร์อินพุต
อัลกอริธึมการขยายพันธุ์ย้อนกลับถูกนำไปใช้โดยส่วนใหญ่ใช้แนวคิดของกราฟการคำนวณซึ่งเซลล์ประสาทแต่ละเซลล์จะขยายไปยังโหนดจำนวนมากในกราฟการคำนวณและดำเนินการทางคณิตศาสตร์อย่างง่ายเช่นการบวกการคูณ กราฟการคำนวณไม่มีน้ำหนักที่ขอบ น้ำหนักทั้งหมดจะถูกกำหนดให้กับโหนดดังนั้นน้ำหนักจึงกลายเป็นโหนดของตัวเอง จากนั้นอัลกอริทึมการแพร่กระจายย้อนกลับจะถูกเรียกใช้บนกราฟการคำนวณ เมื่อการคำนวณเสร็จสมบูรณ์แล้วจำเป็นต้องมีการไล่ระดับของโหนดน้ำหนักเท่านั้นสำหรับการอัปเดต ส่วนที่เหลือของการไล่ระดับสีสามารถละทิ้งได้
เทคนิคการเพิ่มประสิทธิภาพการไล่ระดับสี
ฟังก์ชันการเพิ่มประสิทธิภาพที่ใช้กันทั่วไปอย่างหนึ่งซึ่งปรับน้ำหนักตามข้อผิดพลาดที่เกิดขึ้นเรียกว่า "การลดระดับการไล่ระดับสี"
Gradient เป็นอีกชื่อหนึ่งสำหรับความชันและความชันบนกราฟ xy แสดงให้เห็นว่าตัวแปรสองตัวมีความสัมพันธ์กันอย่างไร: การเพิ่มขึ้นจากการวิ่งการเปลี่ยนแปลงระยะทางในช่วงเวลาที่เปลี่ยนแปลงเป็นต้นในกรณีนี้ความชันคือ อัตราส่วนระหว่างข้อผิดพลาดของเครือข่ายและน้ำหนักเดียว กล่าวคือข้อผิดพลาดจะเปลี่ยนไปอย่างไรเมื่อน้ำหนักแตกต่างกัน
เพื่อให้แม่นยำยิ่งขึ้นเราต้องการหาน้ำหนักที่ทำให้เกิดข้อผิดพลาดน้อยที่สุด เราต้องการหาน้ำหนักที่แสดงถึงสัญญาณที่มีอยู่ในข้อมูลอินพุตได้อย่างถูกต้องและแปลเป็นการจำแนกประเภทที่ถูกต้อง
ในขณะที่โครงข่ายประสาทเทียมเรียนรู้มันจะค่อยๆปรับน้ำหนักจำนวนมากอย่างช้าๆเพื่อให้สามารถจับคู่สัญญาณกับความหมายได้อย่างถูกต้อง อัตราส่วนระหว่างข้อผิดพลาดของเครือข่ายและน้ำหนักแต่ละตัวเป็นอนุพันธ์ dE / dw ที่คำนวณขอบเขตที่น้ำหนักที่เปลี่ยนแปลงเล็กน้อยทำให้เกิดการเปลี่ยนแปลงเล็กน้อยในข้อผิดพลาด
น้ำหนักแต่ละตัวเป็นเพียงปัจจัยหนึ่งในเครือข่ายระดับลึกที่เกี่ยวข้องกับการเปลี่ยนแปลงมากมาย สัญญาณของน้ำหนักจะส่งผ่านการกระตุ้นและผลรวมในหลาย ๆ ชั้นดังนั้นเราจึงใช้กฎลูกโซ่ของแคลคูลัสเพื่อกลับไปทำงานผ่านการเปิดใช้งานเครือข่ายและเอาต์พุตสิ่งนี้นำเราไปสู่น้ำหนักที่เป็นปัญหาและความสัมพันธ์กับข้อผิดพลาดโดยรวม
กำหนดให้สองตัวแปรข้อผิดพลาดและน้ำหนักถูกสื่อกลางด้วยตัวแปรที่สาม activationซึ่งน้ำหนักจะถูกส่งผ่าน เราสามารถคำนวณว่าการเปลี่ยนแปลงของน้ำหนักมีผลต่อการเปลี่ยนแปลงข้อผิดพลาดอย่างไรโดยการคำนวณก่อนว่าการเปลี่ยนแปลงในการเปิดใช้งานมีผลต่อการเปลี่ยนแปลงข้อผิดพลาดอย่างไรและการเปลี่ยนแปลงของน้ำหนักมีผลต่อการเปลี่ยนแปลงการเปิดใช้งานอย่างไร
แนวคิดพื้นฐานในการเรียนรู้เชิงลึกไม่มีอะไรมากไปกว่านั้น: การปรับน้ำหนักของโมเดลเพื่อตอบสนองต่อข้อผิดพลาดที่เกิดขึ้นจนกว่าคุณจะไม่สามารถลดข้อผิดพลาดได้อีกต่อไป
ตาข่ายลึกจะค่อยๆฝึกช้าๆหากค่าการไล่ระดับสีน้อยและเร็วหากค่าสูง ความไม่ถูกต้องในการฝึกอบรมนำไปสู่ผลลัพธ์ที่ไม่ถูกต้อง ขั้นตอนการฝึกอวนจากเอาต์พุตกลับไปยังอินพุตเรียกว่าการแพร่กระจายกลับหรือ back prop เราทราบดีว่าการเผยแพร่ไปข้างหน้าเริ่มต้นด้วยอินพุตและทำงานไปข้างหน้า เสาหลังทำย้อนกลับ / ตรงข้ามคำนวณการไล่ระดับสีจากขวาไปซ้าย
ทุกครั้งที่เราคำนวณการไล่ระดับสีเราจะใช้การไล่ระดับสีก่อนหน้าทั้งหมดจนถึงจุดนั้น
ให้เราเริ่มต้นที่โหนดในเลเยอร์เอาต์พุต ขอบใช้การไล่ระดับสีที่โหนดนั้น เมื่อเรากลับเข้าไปในเลเยอร์ที่ซ่อนอยู่มันจะซับซ้อนมากขึ้น ผลคูณของตัวเลขสองตัวระหว่าง 0 ถึง 1 ทำให้คุณมีจำนวนน้อยลง ค่าการไล่ระดับสีจะเล็กลงเรื่อย ๆ และผลที่ตามมา back prop ต้องใช้เวลามากในการฝึกฝนและความแม่นยำก็ต้องทนทุกข์ทรมาน
ความท้าทายในอัลกอริทึมการเรียนรู้เชิงลึก
มีความท้าทายบางประการสำหรับทั้งโครงข่ายประสาทเทียมแบบตื้นและโครงข่ายประสาทเทียมแบบลึกเช่นการใส่อุปกรณ์มากเกินไปและเวลาในการคำนวณ DNN ได้รับผลกระทบจากการใส่มากเกินไปเนื่องจากการใช้เลเยอร์ที่เป็นนามธรรมที่เพิ่มเข้ามาซึ่งทำให้สามารถสร้างแบบจำลองการอ้างอิงที่หายากในข้อมูลการฝึกอบรม
Regularizationวิธีการต่างๆเช่นการออกกลางคันการหยุดก่อนกำหนดการเพิ่มข้อมูลการเรียนรู้การถ่ายโอนจะถูกนำไปใช้ในระหว่างการฝึกอบรมเพื่อต่อสู้กับการฟิตติ้งมากเกินไป ยกเลิกการทำให้เป็นมาตรฐานโดยสุ่มละเว้นหน่วยจากเลเยอร์ที่ซ่อนอยู่ในระหว่างการฝึกอบรมซึ่งช่วยในการหลีกเลี่ยงการพึ่งพาที่หายาก DNN คำนึงถึงพารามิเตอร์การฝึกอบรมหลายประการเช่นขนาดเช่นจำนวนชั้นและจำนวนหน่วยต่อชั้นอัตราการเรียนรู้และน้ำหนักเริ่มต้น การค้นหาพารามิเตอร์ที่เหมาะสมไม่สามารถใช้ได้จริงเสมอไปเนื่องจากต้นทุนด้านเวลาและทรัพยากรในการคำนวณสูง การแฮ็กหลายอย่างเช่น batching สามารถเร่งความเร็วในการคำนวณได้ พลังการประมวลผลขนาดใหญ่ของ GPU ช่วยให้กระบวนการฝึกอบรมเป็นอย่างมากเนื่องจากการคำนวณเมทริกซ์และเวกเตอร์ที่จำเป็นนั้นได้รับการดำเนินการอย่างดีบน GPU
ออกกลางคัน
การออกกลางคันเป็นเทคนิคการทำให้เป็นมาตรฐานยอดนิยมสำหรับโครงข่ายประสาทเทียม โครงข่ายประสาทส่วนลึกมีแนวโน้มที่จะติดตั้งมากเกินไป
ตอนนี้ให้เราดูว่าการออกกลางคันคืออะไรและทำงานอย่างไร
ในคำพูดของจอฟฟรีย์ฮินตันหนึ่งในผู้บุกเบิก Deep Learning 'ถ้าคุณมีตาข่ายประสาทที่ลึกและไม่ฟิตมากเกินไปคุณน่าจะใช้อันที่ใหญ่กว่าและใช้การออกกลางคัน'
การออกกลางคันเป็นเทคนิคที่ในระหว่างการวนซ้ำของการไล่ระดับสีแต่ละครั้งเราจะทิ้งชุดของโหนดที่เลือกแบบสุ่ม ซึ่งหมายความว่าเราไม่สนใจโหนดบางโหนดแบบสุ่มราวกับว่าไม่มีอยู่จริง
เซลล์ประสาทแต่ละเซลล์จะถูกเก็บไว้ด้วยความน่าจะเป็นของ q และลดลงแบบสุ่มโดยมีความน่าจะเป็น 1-q ค่า q อาจแตกต่างกันสำหรับแต่ละเลเยอร์ในโครงข่ายประสาทเทียม ค่า 0.5 สำหรับเลเยอร์ที่ซ่อนอยู่และ 0 สำหรับเลเยอร์อินพุตทำงานได้ดีกับงานหลากหลายประเภท
ในระหว่างการประเมินและการทำนายจะไม่มีการใช้การออกกลางคัน ผลลัพธ์ของเซลล์ประสาทแต่ละเซลล์จะคูณด้วย q เพื่อให้อินพุตไปยังชั้นถัดไปมีค่าที่คาดหวังไว้เท่ากัน
แนวคิดเบื้องหลังการออกกลางคันมีดังต่อไปนี้ - ในเครือข่ายประสาทเทียมที่ไม่มีการทำให้เป็นระเบียบกลางคันเซลล์ประสาทจะพัฒนาการพึ่งพาซึ่งกันและกันซึ่งนำไปสู่การเกินพอดี
เคล็ดลับการติดตั้ง
การออกกลางคันถูกนำไปใช้ในไลบรารีเช่น TensorFlow และ Pytorch โดยรักษาเอาต์พุตของเซลล์ประสาทที่สุ่มเลือกเป็น 0 นั่นคือแม้ว่าเซลล์ประสาทจะมีอยู่ แต่เอาต์พุตของมันจะถูกเขียนทับเป็น 0
การหยุดก่อนกำหนด
เราฝึกโครงข่ายประสาทโดยใช้อัลกอริทึมซ้ำ ๆ ที่เรียกว่าการไล่ระดับสี
แนวคิดที่อยู่เบื้องหลังการหยุดก่อนกำหนดนั้นใช้งานง่าย เราหยุดการฝึกอบรมเมื่อข้อผิดพลาดเริ่มเพิ่มขึ้น โดยข้อผิดพลาดเราหมายถึงข้อผิดพลาดที่วัดจากข้อมูลการตรวจสอบความถูกต้องซึ่งเป็นส่วนหนึ่งของข้อมูลการฝึกอบรมที่ใช้สำหรับการปรับค่าไฮเปอร์พารามิเตอร์ ในกรณีนี้ไฮเปอร์พารามิเตอร์คือเกณฑ์การหยุด
การเพิ่มข้อมูล
กระบวนการที่เราเพิ่มควอนตัมของข้อมูลที่เรามีหรือเพิ่มโดยใช้ข้อมูลที่มีอยู่และใช้การแปลงบางอย่างกับมัน การเปลี่ยนแปลงที่แน่นอนที่ใช้ขึ้นอยู่กับงานที่เราตั้งใจจะบรรลุ ยิ่งไปกว่านั้นการเปลี่ยนแปลงที่ช่วยให้ตาข่ายประสาทขึ้นอยู่กับสถาปัตยกรรมของมัน
ตัวอย่างเช่นในงานด้านการมองเห็นของคอมพิวเตอร์หลายอย่างเช่นการจัดประเภทวัตถุเทคนิคการเพิ่มข้อมูลที่มีประสิทธิภาพคือการเพิ่มจุดข้อมูลใหม่ที่มีการครอบตัดหรือแปลข้อมูลต้นฉบับ
เมื่อคอมพิวเตอร์ยอมรับรูปภาพเป็นอินพุตจะใช้อาร์เรย์ของค่าพิกเซล สมมติว่าภาพทั้งหมดถูกเลื่อนไปทางซ้าย 15 พิกเซล เราใช้การเปลี่ยนแปลงที่แตกต่างกันจำนวนมากในทิศทางที่แตกต่างกันส่งผลให้ชุดข้อมูลเสริมมีขนาดใหญ่กว่าชุดข้อมูลเดิมหลายเท่า
ถ่ายทอดการเรียนรู้
กระบวนการในการทำแบบจำลองก่อนการฝึกอบรมและ "ปรับแต่ง" โมเดลด้วยชุดข้อมูลของเราเองเรียกว่าการเรียนรู้แบบถ่ายโอน มีหลายวิธีในการดำเนินการดังต่อไปนี้:
เราฝึกโมเดลก่อนการฝึกอบรมบนชุดข้อมูลขนาดใหญ่ จากนั้นเราลบเลเยอร์สุดท้ายของเครือข่ายและแทนที่ด้วยเลเยอร์ใหม่ด้วยน้ำหนักแบบสุ่ม
จากนั้นเราตรึงน้ำหนักของเลเยอร์อื่น ๆ ทั้งหมดและฝึกเครือข่ายตามปกติ การแช่แข็งเลเยอร์ในที่นี้ไม่ได้เปลี่ยนน้ำหนักระหว่างการไล่ระดับสีหรือการเพิ่มประสิทธิภาพ
แนวคิดเบื้องหลังนี้คือโมเดลที่ผ่านการฝึกอบรมแล้วจะทำหน้าที่เป็นตัวแยกคุณลักษณะและจะมีการฝึกเฉพาะเลเยอร์สุดท้ายในงานปัจจุบัน