ชีวประวัติ ลักษณะเฉพาะ การวิเคราะห์

อัลกอริธึมการย้อนกลับ วิธีการเผยแพร่กลับ: คณิตศาสตร์, ตัวอย่าง, รหัส

ในโครงข่ายประสาทเทียมหลายชั้นมักจะไม่ทราบค่าเอาต์พุตที่เหมาะสมที่สุดของเซลล์ประสาทของทุกเลเยอร์ยกเว้นอันสุดท้าย

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

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

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

ตามวิธีกำลังสองน้อยที่สุด ฟังก์ชันวัตถุประสงค์ของข้อผิดพลาดโครงข่ายประสาทเทียมที่จะย่อให้เล็กสุดคือค่า

สถานะเอาต์พุตที่แท้จริงของเซลล์ประสาทอยู่ที่ชั้นเอาต์พุตของโครงข่ายประสาทเทียมเมื่อภาพถูกป้อนเข้าสู่อินพุต สถานะเอาต์พุตที่จำเป็นของเซลล์ประสาทนี้อยู่ที่ไหน

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

โดยที่ค่าสัมประสิทธิ์น้ำหนักของการเชื่อมต่อ synaptic ที่เชื่อมต่อเซลล์ประสาทของเลเยอร์กับเซลล์ประสาทของเลเยอร์คือค่าสัมประสิทธิ์อัตราการเรียนรู้

ตามกฎการหาอนุพันธ์ของฟังก์ชันเชิงซ้อน

โดยที่ผลรวมถ่วงน้ำหนักของสัญญาณอินพุตของเซลล์ประสาท อาร์กิวเมนต์ของฟังก์ชันการเปิดใช้งาน เนื่องจากอนุพันธ์ของฟังก์ชันการเปิดใช้งานต้องถูกกำหนดบนแกน abscissa ทั้งหมด ฟังก์ชันการกระโดดแบบหน่วยและฟังก์ชันการเปิดใช้งานอื่นๆ ที่มีความไม่สม่ำเสมอจึงไม่เหมาะสำหรับ โครงข่ายประสาทเทียม (Neural Networks) ใช้ฟังก์ชันเรียบ เช่น ไฮเปอร์โบลิกแทนเจนต์หรือซิกมอยด์คลาสสิกที่มีเลขชี้กำลัง (ดูตารางที่ 1 1) ตัวอย่างเช่น ในกรณีของไฮเปอร์โบลิกแทนเจนต์

ตัวคูณที่สามเท่ากับเอาต์พุตของเซลล์ประสาทของเลเยอร์ก่อนหน้า

สำหรับปัจจัยแรกใน (1.11) สามารถขยายได้ง่ายดังนี้

ที่นี่ การรวมทับจะดำเนินการระหว่างเซลล์ประสาทของเลเยอร์ แนะนำตัวแปรใหม่:

เราได้รับสูตรแบบเรียกซ้ำสำหรับคำนวณค่าของเลเยอร์จากค่าของเลเยอร์ที่เก่ากว่า

สำหรับเลเยอร์เอาต์พุต:

ตอนนี้เราสามารถเขียน (1.10) ในรูปแบบขยาย:

บางครั้ง เพื่อให้กระบวนการแก้ไขน้ำหนักมีความเฉื่อยบางอย่าง ซึ่งทำให้การกระโดดที่คมชัดราบรื่นขึ้นเมื่อเคลื่อนที่เหนือพื้นผิวของฟังก์ชันวัตถุประสงค์ (1.17) เสริมด้วยค่าของการเปลี่ยนแปลงน้ำหนักในการวนซ้ำครั้งก่อน

ค่าสัมประสิทธิ์ความเฉื่อยอยู่ที่ไหน จำนวนของการวนซ้ำปัจจุบัน

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

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

โดยที่จำนวนของเซลล์ประสาทในเลเยอร์นั้นคำนึงถึงเซลล์ประสาทที่มีสถานะเอาต์พุตคงที่ซึ่งตั้งค่าการชดเชย อินพุตของเซลล์ประสาทชั้น

ซิกมอยด์อยู่ที่ไหน

ส่วนประกอบของเวกเตอร์ภาพอินพุตอยู่ที่ไหน

ขั้นตอนที่ 4 ปรับน้ำหนักทั้งหมดในโครงข่ายประสาทเทียม:

ขั้นตอนที่ 5 หากข้อผิดพลาดของเครือข่ายมีนัยสำคัญ ให้ไปที่ขั้นตอนที่ 1 มิฉะนั้น ให้สิ้นสุด

เครือข่ายในขั้นตอนที่ 1 จะแสดงสลับกับภาพการฝึกอบรมทั้งหมดตามลำดับแบบสุ่ม เพื่อให้เครือข่าย พูดโดยนัย ไม่ลืมภาพใดภาพหนึ่งขณะที่จดจำภาพอื่นๆ

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

พิจารณาคำถามเกี่ยวกับความสามารถของโครงข่ายประสาทเทียม เช่น จำนวนภาพที่นำเสนอต่ออินพุตที่สามารถเรียนรู้ที่จะจดจำได้ สำหรับเครือข่ายที่มีมากกว่า 2 เลเยอร์ คำถามนี้ยังคงเปิดอยู่ สำหรับเครือข่ายที่มีสองชั้น ความจุที่กำหนดของเครือข่ายจะประมาณดังนี้:

โดยที่จำนวนของน้ำหนักที่ปรับได้คือจำนวนของเซลล์ประสาทในเลเยอร์เอาต์พุต

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

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

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

ช้าจนไม่อาจยอมรับได้ ในทางกลับกัน การแก้ไขน้ำหนักมากเกินไปอาจนำไปสู่ความไม่แน่นอนอย่างถาวรในกระบวนการเรียนรู้ ดังนั้น มักจะเลือกจำนวนที่น้อยกว่า 1 (เช่น 0.1) เป็นค่าสัมประสิทธิ์อัตราการเรียนรู้ 1] ซึ่งจะค่อยๆ ลดลงในระหว่างกระบวนการเรียนรู้ นอกจากนี้ เพื่อไม่รวมการเข้าชมเครือข่ายโดยไม่ได้ตั้งใจใน local minima บางครั้งหลังจากค่าสัมประสิทธิ์น้ำหนักคงที่แล้ว 7 จะเพิ่มขึ้นชั่วครู่อย่างมีนัยสำคัญเพื่อเริ่มต้นการไล่ระดับสีจากจุดใหม่ หากทำขั้นตอนนี้ซ้ำหลายๆ ครั้งจะทำให้เครือข่ายอยู่ในสถานะเดียวกัน อาจสันนิษฐานได้ว่าพบค่าต่ำสุดทั่วโลกแล้ว

มีอีกวิธีหนึ่งในการกำจัดค่าต่ำสุดในท้องถิ่นและเครือข่ายอัมพาต ซึ่งก็คือการใช้เครือข่ายประสาทสุ่ม

ให้เราตีความทางเรขาคณิตข้างต้น

อัลกอริทึม backpropagation คำนวณเวกเตอร์การไล่ระดับสีพื้นผิวข้อผิดพลาด เวกเตอร์นี้ระบุทิศทางของการลงมาที่สั้นที่สุดบนพื้นผิวจากจุดปัจจุบัน การเคลื่อนไหวซึ่งนำไปสู่การลดลงของข้อผิดพลาด ลำดับของขั้นตอนที่ลดลงจะนำไปสู่อย่างน้อยหนึ่งประเภทหรืออีกประเภทหนึ่ง ความยากอยู่ที่คำถามของการเลือกความยาวของขั้นตอน

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

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

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

ใช้เพื่อปรับขนาดหลังจากนั้นการกระทำทั้งหมดจะถูกทำซ้ำ กระบวนการเรียนรู้จะหยุดลงเมื่อผ่านช่วงเวลาจำนวนหนึ่งไปแล้ว หรือเมื่อข้อผิดพลาดถึงระดับเล็กน้อย หรือเมื่อข้อผิดพลาดหยุดลดลง

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

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

กราฟโพลิโนเมียลสามารถมีรูปร่างที่แตกต่างกันได้ และยิ่งระดับและจำนวนของพจน์สูงเท่าใด รูปร่างนี้ก็ซับซ้อนมากขึ้นเท่านั้น สำหรับข้อมูลเริ่มต้น คุณสามารถเลือกเส้นโค้งโพลิโนเมียล (แบบจำลอง) และด้วยเหตุนี้จึงได้รับคำอธิบายของการพึ่งพาอาศัยกันที่มีอยู่ ข้อมูลอาจมีสัญญาณรบกวน ดังนั้นจึงไม่สามารถสันนิษฐานได้ว่าโมเดลที่ดีที่สุดจะผ่านจุดที่มีอยู่ทั้งหมดอย่างแน่นอน พหุนามลำดับต่ำอาจอธิบายความสัมพันธ์ได้ดีกว่า แต่ไม่ยืดหยุ่นเพียงพอกับข้อมูล ในขณะที่พหุนามลำดับสูงอาจยืดหยุ่นเกินไป แต่จะทำตามข้อมูลทุกประการ ในขณะที่มีรูปร่างที่ซับซ้อนซึ่งไม่มีอะไรให้ทำ กับความสัมพันธ์ที่แท้จริง..

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

จะเลือกระดับความซับซ้อนของเครือข่ายที่เหมาะสมได้อย่างไร? เกือบทุกครั้ง เครือข่ายที่ซับซ้อนกว่าจะให้ข้อผิดพลาดน้อยกว่า แต่สิ่งนี้อาจไม่ได้บ่งชี้ถึงคุณภาพของโมเดลที่ดี แต่เป็นการใช้เครือข่ายมากเกินไป

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

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

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

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

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

1) ฟังก์ชั่นข้อผิดพลาด:

ฟังก์ชันข้อผิดพลาดแบบอินทิกรัลในตัวอย่างการฝึกอบรมทั้งชุด

ฟังก์ชันข้อผิดพลาดของเลขยกกำลังจำนวนเต็มและเศษส่วน

2) ขั้นตอนการกำหนดขนาดขั้นตอนในการวนซ้ำแต่ละครั้ง

การแบ่งขั้ว;

อัตราส่วนเฉื่อย (ดูด้านบน);

3) ขั้นตอนการกำหนดทิศทางของขั้นตอน

การใช้เมทริกซ์ของอนุพันธ์อันดับสอง (วิธีของนิวตัน)

ใช้คำแนะนำในหลายขั้นตอน (วิธี partan)

พรูดนิคอฟ อีวาน อเล็กเซวิช
มิเรีย (MTU)

หัวข้อของเครือข่ายประสาทได้รับการกล่าวถึงในวารสารหลายฉบับแล้ว แต่วันนี้ฉันอยากจะแนะนำผู้อ่านให้รู้จักกับอัลกอริทึมสำหรับการฝึกอบรมโครงข่ายประสาทเทียมหลายชั้นโดยใช้วิธี backpropagation และดำเนินการตามวิธีนี้

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

ส่วนทางทฤษฎี

เนื้อหานี้ถือว่าเป็นความคุ้นเคยกับพื้นฐานของโครงข่ายประสาทเทียม แต่ฉันคิดว่าเป็นไปได้ที่จะแนะนำผู้อ่านให้รู้จักกับหัวข้อนี้โดยไม่ต้องมีการทดสอบทฤษฎีโครงข่ายประสาทเทียมโดยไม่จำเป็น ดังนั้น สำหรับผู้ที่ได้ยินวลี "โครงข่ายประสาทเทียม" เป็นครั้งแรก ข้าพเจ้าขอเสนอให้รับรู้โครงข่ายประสาทเทียมเป็นกราฟกำกับน้ำหนัก โหนด (เซลล์ประสาท) ซึ่งจัดเรียงเป็นชั้นๆ นอกจากนี้ โหนดของเลเยอร์หนึ่งยังมีลิงก์ไปยังโหนดทั้งหมดของเลเยอร์ก่อนหน้า ในกรณีของเรา กราฟดังกล่าวจะมีเลเยอร์อินพุตและเอาต์พุต โหนดที่ทำหน้าที่เป็นอินพุตและเอาต์พุตตามลำดับ แต่ละโหนด (เซลล์ประสาท) มีฟังก์ชันการเปิดใช้งาน - ฟังก์ชันที่รับผิดชอบในการคำนวณสัญญาณที่เอาต์พุตของโหนด (เซลล์ประสาท) นอกจากนี้ยังมีแนวคิดของการกระจัดซึ่งเป็นโหนดที่เอาต์พุตซึ่งปรากฏขึ้นเสมอ ในบทความนี้ เราจะพิจารณากระบวนการเรียนรู้ของโครงข่ายประสาทเทียมที่ถือว่ามี "ครู" อยู่ ซึ่งก็คือกระบวนการเรียนรู้ที่การเรียนรู้เกิดขึ้นโดยการจัดเตรียมลำดับของตัวอย่างการฝึกอบรมพร้อมการตอบสนองที่ถูกต้องให้กับเครือข่าย
เช่นเดียวกับโครงข่ายประสาทเทียมส่วนใหญ่ เป้าหมายของเราคือการฝึกเครือข่ายในลักษณะเพื่อให้เกิดความสมดุลระหว่างความสามารถของเครือข่ายในการตอบสนองที่ถูกต้องต่อข้อมูลอินพุตที่ใช้ในกระบวนการเรียนรู้ (การท่องจำ) และความสามารถในการสร้าง ผลลัพธ์ที่ถูกต้องในการตอบสนองต่อข้อมูลที่ป้อน คล้ายกันแต่ไม่เหมือนที่ใช้ในการฝึกอบรม (หลักทั่วไป) การฝึกอบรมเครือข่ายด้วยวิธีการแพร่กระจายข้อผิดพลาดประกอบด้วยสามขั้นตอน: การให้ข้อมูลไปยังอินพุต ตามด้วยการแพร่กระจายข้อมูลในทิศทางของเอาต์พุต การคำนวณและการย้อนกลับของข้อผิดพลาดที่สอดคล้องกัน และการปรับน้ำหนัก หลังจากการฝึกอบรม ควรจะป้อนข้อมูลไปยังอินพุตของเครือข่ายเท่านั้น และแจกจ่ายไปยังทิศทางของเอาต์พุต ในเวลาเดียวกัน หากการฝึกอบรมเครือข่ายอาจเป็นกระบวนการที่ค่อนข้างยาว การคำนวณผลลัพธ์โดยตรงโดยเครือข่ายที่ผ่านการฝึกอบรมนั้นรวดเร็วมาก นอกจากนี้ยังมีวิธีการ backpropagation หลายรูปแบบที่ออกแบบมาเพื่อเพิ่มความเร็วของกระบวนการเรียนรู้
นอกจากนี้ยังเป็นที่น่าสังเกตว่าเครือข่ายประสาทชั้นเดียวมีข้อ จำกัด อย่างมากในรูปแบบข้อมูลอินพุตที่ต้องเรียนรู้ในขณะที่เครือข่ายหลายชั้น (ที่มีเลเยอร์ที่ซ่อนอยู่อย่างน้อยหนึ่งชั้น) ไม่มีข้อเสียดังกล่าว ต่อไป คำอธิบายจะได้รับเกี่ยวกับเครือข่ายประสาทแบบ backpropagation มาตรฐาน

สถาปัตยกรรม

รูปที่ 1 แสดงเครือข่ายประสาทหลายชั้นที่มีเซลล์ประสาทซ่อนอยู่หนึ่งชั้น (องค์ประกอบ Z)

เซลล์ประสาทที่เป็นตัวแทนของเอาต์พุตของเครือข่าย (แสดงด้วย Y) และเซลล์ประสาทที่ซ่อนอยู่สามารถมีอคติได้ (ดังที่แสดงในภาพ) ค่าชดเชยที่สอดคล้องกับเอาต์พุต Y k แสดงโดย w ok องค์ประกอบที่ซ่อนอยู่ของ Z j - V oj ความลำเอียงเหล่านี้ทำหน้าที่เป็นน้ำหนักในการเชื่อมต่อที่มาจากเซลล์ประสาท ซึ่งเอาต์พุตของค่านี้จะปรากฏเป็น 1 เสมอ (ในรูปที่ 1 จะแสดงไว้ แต่โดยปกติจะไม่แสดงโดยนัย) นอกจากนี้ ลูกศรในรูปที่ 1 ยังแสดงการเคลื่อนที่ของข้อมูลระหว่างขั้นตอนการเผยแพร่ข้อมูลจากอินพุตไปยังเอาต์พุต ในระหว่างขั้นตอนการเรียนรู้ สัญญาณจะเผยแพร่ไปในทิศทางตรงกันข้าม

คำอธิบายของอัลกอริทึม

อัลกอริทึมที่แสดงด้านล่างนี้ใช้ได้กับโครงข่ายประสาทเทียมที่มีเลเยอร์ซ่อนอยู่หนึ่งชั้น ซึ่งเป็นสถานการณ์ที่ถูกต้องและเพียงพอสำหรับแอปพลิเคชันส่วนใหญ่ ดังที่ได้กล่าวไว้ก่อนหน้านี้ การฝึกอบรมเครือข่ายประกอบด้วยสามขั้นตอน: การจัดหาข้อมูลการฝึกอบรมไปยังอินพุตของเครือข่าย การเผยแพร่ข้อผิดพลาดย้อนหลัง และการปรับน้ำหนัก ในช่วงแรก เซลล์ประสาทอินพุต X i แต่ละเซลล์จะรับสัญญาณและส่งสัญญาณไปยังเซลล์ประสาทที่ซ่อนอยู่ Z 1 ,Z 2 ...,Z p แต่ละตัว เซลล์ประสาทที่ซ่อนอยู่แต่ละเซลล์จะคำนวณผลลัพธ์ของฟังก์ชันกระตุ้น (ฟังก์ชันเครือข่าย) และส่งสัญญาณ Z j ไปยังเซลล์ประสาทเอาต์พุตทั้งหมด ในทางกลับกัน เซลล์ประสาทเอาต์พุต Y k จะคำนวณผลลัพธ์ของฟังก์ชันการเปิดใช้งาน Y k ซึ่งไม่มีอะไรมากไปกว่าสัญญาณเอาต์พุตของเซลล์ประสาทนี้สำหรับข้อมูลอินพุตที่สอดคล้องกัน ในระหว่างกระบวนการเรียนรู้ แต่ละเซลล์ประสาทที่เอาต์พุตของเครือข่ายจะเปรียบเทียบค่า Y k ที่คำนวณกับค่า t k (ค่าเป้าหมาย) ที่ครูให้มา เพื่อหาค่าความผิดพลาดที่เหมาะสมสำหรับรูปแบบการป้อนข้อมูลที่กำหนด จากข้อผิดพลาดนี้ σ k (k = 1,2,...m) จะถูกคำนวณ σ k ใช้เมื่อเผยแพร่ข้อผิดพลาดจาก Y k ไปยังองค์ประกอบเครือข่ายทั้งหมดของเลเยอร์ก่อนหน้า (เซลล์ประสาทที่ซ่อนอยู่ซึ่งเชื่อมต่อกับ Y k) และในภายหลังเมื่อเปลี่ยนน้ำหนักของการเชื่อมต่อระหว่างเซลล์ประสาทเอาต์พุตและเซลล์ที่ซ่อนอยู่ ในทำนองเดียวกัน σj (j = 1,2,...p) จะถูกคำนวณสำหรับแต่ละเซลล์ประสาทที่ซ่อนอยู่ Z j แม้ว่าจะไม่จำเป็นต้องเผยแพร่ข้อผิดพลาดไปยังเลเยอร์อินพุต แต่ σj ใช้เพื่อเปลี่ยนน้ำหนักของการเชื่อมต่อระหว่างเซลล์ประสาทในเลเยอร์ที่ซ่อนอยู่และเซลล์ประสาทอินพุต หลังจากกำหนด σ ทั้งหมดแล้ว น้ำหนักของลิงก์ทั้งหมดจะถูกปรับพร้อมกัน

ชื่อ:

สัญลักษณ์ต่อไปนี้ใช้ในอัลกอริทึมการเรียนรู้เครือข่าย:

X เวกเตอร์ข้อมูลการฝึกอบรมอินพุต X = (X 1 , X 2 ,...,X i ,...,X n)
t เวกเตอร์ของผลลัพธ์เป้าหมายที่ครูให้มา t = (t 1 , t 2 ,...,t k ,...,t m)
σ k ส่วนประกอบของการปรับน้ำหนักของการเชื่อมต่อ w jk , สอดคล้องกับข้อผิดพลาดของเซลล์ประสาทขาออก Y k ; นอกจากนี้ ข้อมูลเกี่ยวกับข้อผิดพลาดของเซลล์ประสาท Y k ซึ่งกระจายไปยังเซลล์ประสาทของเลเยอร์ที่ซ่อนอยู่ที่เกี่ยวข้องกับ Y k
σ j ส่วนประกอบของการปรับน้ำหนักของการเชื่อมต่อ v ij ซึ่งสอดคล้องกับข้อมูลข้อผิดพลาดที่เผยแพร่จากชั้นเอาต์พุตไปยังเซลล์ประสาทที่ซ่อนอยู่ Z j .
อัตราการเรียนรู้
X i เซลล์ประสาทอินพุตพร้อมดัชนี i สำหรับเซลล์ประสาทอินพุต สัญญาณอินพุตและเอาต์พุตจะเหมือนกัน - X i
v oj ออฟเซ็ตของเซลล์ประสาทที่ซ่อนอยู่ j.
Z j เซลล์ประสาทที่ซ่อนอยู่ j; ค่าทั้งหมดที่ป้อนให้กับอินพุตขององค์ประกอบที่ซ่อนอยู่ Z j แสดงโดย Z_in j: Z_in j = v oj +∑x i *v ij
สัญญาณที่เอาต์พุต Z j (ผลลัพธ์ของการใช้ฟังก์ชันการเปิดใช้งานกับ Z_in j) แสดงด้วย Z j: Z j = f (Z_in j)
ตกลง เซลล์ประสาทเอาต์พุตชดเชย
Y k เซลล์ประสาทขาออกภายใต้ดัชนี k; ค่าทั้งหมดที่ป้อนให้กับอินพุตขององค์ประกอบเอาต์พุต Y k แสดงด้วย Y_in k: Y_in k = w ok + ∑ Z j *w jk สัญญาณเอาต์พุต Y k (ผลลัพธ์ของการใช้ฟังก์ชันการเปิดใช้งานกับ Y_in k) แสดงโดย Y k:

ฟังก์ชั่นการเปิดใช้งาน

ฟังก์ชันการเปิดใช้งานในอัลกอริทึมการเผยแพร่กลับต้องมีลักษณะสำคัญหลายประการ: ความต่อเนื่อง ความสามารถในการสร้างความแตกต่าง และการไม่ลดลงแบบโมโนโทนิก ยิ่งกว่านั้น เพื่อประโยชน์ในการคำนวณอย่างมีประสิทธิภาพ เป็นที่พึงปรารถนาที่จะหาอนุพันธ์ของมันได้ง่าย บ่อยครั้ง ฟังก์ชันการเปิดใช้งานยังเป็นฟังก์ชันความอิ่มตัวด้วย หนึ่งในฟังก์ชันกระตุ้นที่ใช้บ่อยที่สุดคือฟังก์ชันไบนารีซิกมอยด์ที่มีช่วง (0, 1) และกำหนดเป็น:

ฟังก์ชันการเปิดใช้งานที่ใช้กันอย่างแพร่หลายอีกอย่างคือไบโพลาร์ซิกมอยด์ที่มีช่วง (-1, 1) และกำหนดเป็น:


อัลกอริทึมการเรียนรู้

อัลกอริทึมการเรียนรู้มีลักษณะดังนี้:

การเริ่มต้นของน้ำหนัก (น้ำหนักของลิงก์ทั้งหมดจะเริ่มต้นด้วยค่าขนาดเล็กแบบสุ่ม)

ตราบใดที่เงื่อนไขการสิ้นสุดของอัลกอริทึมเป็นเท็จ ขั้นตอนที่ 2 - 9 จะถูกดำเนินการ

สำหรับแต่ละคู่ ( ข้อมูล ค่าเป้าหมาย ) จะดำเนินการตามขั้นตอนที่ 3 - 8

การเผยแพร่ข้อมูลจากอินพุตไปยังเอาต์พุต:

ขั้นตอนที่ 3
เซลล์ประสาทอินพุตแต่ละเซลล์ (X i , i = 1,2,...,n) ส่งสัญญาณที่ได้รับ X i ไปยังเซลล์ประสาททั้งหมดในเลเยอร์ถัดไป (ที่ซ่อนอยู่)

เซลล์ประสาทที่ซ่อนอยู่แต่ละเซลล์ (Z j , j = 1,2,...,p) รวมสัญญาณขาเข้าแบบถ่วงน้ำหนัก: z_in j = v oj + ∑ x i *v ij และใช้ฟังก์ชันการเปิดใช้งาน: z j = f (z_in j) จากนั้น ส่งผลลัพธ์ไปยังองค์ประกอบทั้งหมดของเลเยอร์ถัดไป (เอาต์พุต)

เซลล์ประสาทเอาต์พุตแต่ละตัว (Y k , k = 1,2,...m) รวมสัญญาณอินพุตแบบถ่วงน้ำหนัก: Y_in k = w ok + ∑ Z j *w jk และใช้ฟังก์ชันการเปิดใช้งาน คำนวณสัญญาณเอาต์พุต: Y k = ฉ (Y_in k).

การขยายพันธุ์กลับ:

เซลล์ประสาทเอาต์พุตแต่ละตัว (Y k , k = 1,2,...m) ได้รับค่าเป้าหมาย - ค่าเอาต์พุตที่ถูกต้องสำหรับสัญญาณอินพุตที่กำหนด และคำนวณข้อผิดพลาด: σ k = (t k - y k)*f " ( y_in k) ยังคำนวณจำนวนที่น้ำหนักของการเชื่อมต่อ w jk จะเปลี่ยนแปลง: Δw jk = a * σ k * z j นอกจากนี้ยังคำนวณค่าการปรับออฟเซ็ต: Δw ok = a*σ k และส่ง σ k ถึงเซลล์ประสาทในเลเยอร์ก่อนหน้า

เซลล์ประสาทที่ซ่อนอยู่แต่ละเซลล์ (z j , j = 1,2,...p) รวมข้อผิดพลาดที่เข้ามา (จากเซลล์ประสาทในเลเยอร์ถัดไป) σ_in j = ∑ σ k * w jk และคำนวณค่าความผิดพลาดโดยการคูณค่าผลลัพธ์ด้วย อนุพันธ์ของฟังก์ชันการเปิดใช้งาน: σ j = σ_in j * f "(z_in j) คำนวณจำนวนที่น้ำหนักลิงก์ vij จะเปลี่ยนแปลงด้วย: Δv ij = a * σ j * x i นอกจากนี้ คำนวณจำนวนการปรับออฟเซ็ต : v oj = a * σ ญ

ขั้นตอนที่ 8 เปลี่ยนน้ำหนัก

เซลล์ประสาทขาออกแต่ละเซลล์ (y k , k = 1,2,...,m) เปลี่ยนน้ำหนักของการเชื่อมต่อกับองค์ประกอบอคติและเซลล์ประสาทที่ซ่อนอยู่: w jk (ใหม่) = w jk (เก่า) + Δw jk
เซลล์ประสาทที่ซ่อนอยู่แต่ละเซลล์ (z j , j = 1,2,...p) เปลี่ยนน้ำหนักของการเชื่อมต่อกับองค์ประกอบอคติและเซลล์ประสาทเอาต์พุต: v ij (ใหม่) = v ij (เก่า) + Δv ij

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

เดลต้าเป็นกฎที่ใช้ในการฝึก perceptron โดยใช้ค่าความผิดพลาดของเลเยอร์เอาต์พุต หากเครือข่ายมีตั้งแต่ 2 เลเยอร์ขึ้นไป จะไม่มีค่าความผิดพลาดที่ชัดเจนสำหรับเลเยอร์ระดับกลาง และไม่สามารถใช้กฎเดลต้าได้

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

อัลกอริทึมการแพร่กระจายย้อนกลับ (ABOR) ซึ่งเป็นลักษณะทั่วไปของกฎเดลต้า ช่วยให้คุณสามารถฝึก ANN PR ด้วยเลเยอร์จำนวนเท่าใดก็ได้ เราสามารถพูดได้ว่า AOR ใช้การไล่ระดับสีแบบไล่ระดับสีจริง ๆ โดยจัดเรียงน้ำหนักใหม่ตามทิศทางของข้อผิดพลาดขั้นต่ำ

เมื่อใช้ AOR จะถือว่าฟังก์ชัน sigmoid ถูกใช้เป็นฟังก์ชันเปิดใช้งาน ฟังก์ชันนี้ช่วยประหยัดค่าใช้จ่ายในการคำนวณเนื่องจากมีอนุพันธ์อย่างง่าย:

ฟังก์ชัน sigmoid จำกัดสัญญาณที่แรงเป็น 1 และเพิ่มสัญญาณที่อ่อน

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

อัลกอริทึมรวมถึงลำดับของการกระทำเช่นเดียวกับในการฝึก perceptron ขั้นแรก น้ำหนักของการเชื่อมต่อภายในจะได้รับค่าแบบสุ่ม จากนั้นจึงดำเนินการตามขั้นตอนต่อไปนี้:

1) มีการเลือกคู่ฝึกซ้อม ( เอ็กซ์ , Z*), เอ็กซ์เสิร์ฟที่ทางเข้า

2) คำนวณผลลัพธ์ของเครือข่าย Z = (วาย);

3) คำนวณข้อผิดพลาดเอาต์พุต อี;

4) น้ำหนักของเครือข่ายได้รับการปรับเพื่อลดข้อผิดพลาดให้เหลือน้อยที่สุด

ขั้นตอนที่ 1 และ 2 เป็นการส่งต่อผ่านเครือข่าย ในขณะที่ขั้นตอนที่ 3 และ 4 จะเป็นการย้อนกลับ

ก่อนการฝึกอบรมจำเป็นต้องแบ่งคู่ "อินพุต - เอาต์พุต" ที่มีอยู่ออกเป็นสองส่วน: การฝึกอบรมและการทดสอบ

คู่ทดสอบใช้เพื่อตรวจสอบคุณภาพของการฝึก - NN ได้รับการฝึกฝนมาเป็นอย่างดีหากสร้างเอาต์พุตที่ใกล้เคียงกับชุดทดสอบสำหรับอินพุตที่กำหนดโดยคู่ทดสอบ

เมื่อทำการฝึก สถานการณ์เป็นไปได้เมื่อ NN แสดงผลลัพธ์ที่ดีสำหรับข้อมูลการฝึก แต่ให้ผลลัพธ์ที่ไม่ดีสำหรับข้อมูลการทดสอบ อาจมีสาเหตุสองประการสำหรับสิ่งนี้:

1. ข้อมูลการทดสอบแตกต่างจากข้อมูลการฝึกอบรมอย่างมาก กล่าวคือ คู่การฝึกอบรมไม่ครอบคลุมทุกพื้นที่ของพื้นที่ป้อนข้อมูล


2. เกิดปรากฏการณ์ "อบรมใหม่" ( เกินพอดี) เมื่อพฤติกรรมของ NN มีความซับซ้อนมากกว่าปัญหาที่กำลังแก้ไข

กรณีสุดท้ายสำหรับปัญหาการประมาณฟังก์ชันตามจุดแสดงไว้ในรูปที่ 3.3 โดยที่วงกลมสีขาวแสดงถึงข้อมูลการทดสอบและวงกลมสีดำแสดงถึงข้อมูลการฝึกอบรม

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

คำอธิบายของอัลกอริทึม

Backpropagation ถูกนำไปใช้กับเครือข่ายหลายชั้นซึ่งเซลล์ประสาทมีความไม่เป็นเชิงเส้นโดยมีอนุพันธ์ต่อเนื่อง เช่น:

ความไม่เชิงเส้นของประเภทนี้สะดวกเนื่องจากความง่ายในการคำนวณอนุพันธ์:

ในการฝึกเครือข่าย จะใช้คู่เวกเตอร์สัญญาณ P: เวกเตอร์อินพุต I และเวกเตอร์ที่ควรได้รับจากเอาต์พุตของเครือข่าย D ในกรณีง่ายๆ เครือข่ายประกอบด้วยชั้น N และแต่ละเซลล์ประสาทของ ชั้นถัดไปเชื่อมต่อกับเซลล์ประสาททั้งหมดของชั้นก่อนหน้าด้วยการเชื่อมต่อ โดยมีน้ำหนัก w[n]

ด้วยการเผยแพร่ไปข้างหน้า สำหรับแต่ละเลเยอร์ สัญญาณทั้งหมดที่เอาต์พุตของเลเยอร์ (S [n]) และสัญญาณที่เอาต์พุตของเซลล์ประสาทจะถูกคำนวณ (และจัดเก็บ) ดังนั้นสัญญาณที่อินพุตของเซลล์ประสาทที่ i ของชั้นที่ n:

ที่นี่ w (i, j) คือน้ำหนักของการเชื่อมต่อของชั้นที่ n สัญญาณที่เอาต์พุตของเซลล์ประสาทคำนวณโดยใช้ความไม่เชิงเส้นของเซลล์ประสาทกับสัญญาณทั้งหมด

สัญญาณเลเยอร์เอาต์พุต x[N] ถือเป็นสัญญาณเอาต์พุตของเครือข่าย O

ขึ้นอยู่กับสัญญาณเอาต์พุตเครือข่าย O และสัญญาณ D ซึ่งควรได้รับจากเอาต์พุตเครือข่ายสำหรับอินพุตที่กำหนด ข้อผิดพลาดของเครือข่ายจะถูกคำนวณ โดยปกติแล้ว จะใช้ค่าเบี่ยงเบนกำลังสองเฉลี่ยสำหรับเวกเตอร์ทั้งหมดของชุดการฝึก:

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

ที่นี่ q คือส่วนที่เหลือของเครือข่ายซึ่งคำนวณสำหรับเลเยอร์เอาต์พุตจากฟังก์ชันข้อผิดพลาด:

และสำหรับเลเยอร์ที่ซ่อนอยู่ - ตามส่วนที่เหลือของเลเยอร์ก่อนหน้า:

สำหรับกรณีของซิกมอยด์ที่ไม่ใช่เชิงเส้นและค่าเฉลี่ยความเบี่ยงเบนกำลังสองเป็นฟังก์ชันของข้อผิดพลาด:

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

วิธีการเรียนรู้นี้เรียกว่า "การเพิ่มประสิทธิภาพแบบไล่ระดับสี" และในกรณีของโครงข่ายประสาทเทียม มักถูกพิจารณาว่าเป็นส่วนหนึ่งของวิธีการกระจายกลับ

การใช้งานอัลกอริทึม Error Backpropagation โดยใช้ตัวอย่างการประมาณค่าฟังก์ชัน

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

ในสภาพแวดล้อม Matlab จำเป็นต้องสร้างและฝึกโครงข่ายประสาทเทียมเพื่อประมาณฟังก์ชันตาราง i=1, 20 พัฒนาโปรแกรมที่ใช้อัลกอริทึมการประมาณโครงข่ายประสาทเทียมและแสดงผลการประมาณในรูปของกราฟ

การประมาณอยู่ในข้อเท็จจริงที่ว่า การใช้ข้อมูลที่มีอยู่เกี่ยวกับ f (x) เราสามารถพิจารณาฟังก์ชันการประมาณ z (x) ที่ใกล้เคียงกับ f (x) ในบางแง่ ซึ่งช่วยให้เราดำเนินการที่เหมาะสมกับมันและได้ การประมาณข้อผิดพลาดของการเปลี่ยนดังกล่าว

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

งาน. ในสภาพแวดล้อม Matlab จำเป็นต้องสร้างและฝึกโครงข่ายประสาทเทียมเพื่อประมาณฟังก์ชันตารางที่กำหนด (ดูรูปที่ 5)

รูปที่ 5 ตารางค่าฟังก์ชันในสภาพแวดล้อมทางคณิตศาสตร์ของ Matlab ในหน้าต่างคำสั่งเราเขียนโค้ดของโปรแกรมสำหรับสร้างและฝึกอบรมโครงข่ายประสาทเทียม

ในการแก้ปัญหาเราใช้ฟังก์ชัน newff (.) - การสร้าง NN หลายเลเยอร์ "คลาสสิก" พร้อมการฝึกอบรมโดยใช้วิธีการย้อนกลับเช่น การเปลี่ยนแปลงน้ำหนักของซินแนปส์เกิดขึ้นโดยคำนึงถึงฟังก์ชันข้อผิดพลาด ความแตกต่างระหว่างการตอบสนองที่แท้จริงและถูกต้องของโครงข่ายประสาทเทียมซึ่งพิจารณาจากเลเยอร์เอาต์พุต เผยแพร่ในทิศทางตรงกันข้าม - ต่อการไหลของสัญญาณ เครือข่ายจะมีสองชั้นที่ซ่อนอยู่ มี 5 เซลล์ประสาทในชั้นแรก 1 ในวินาที ฟังก์ชันการเปิดใช้งานของชั้นแรกคือ "tansig" (ฟังก์ชัน sigmoid ส่งกลับเวกเตอร์เอาต์พุตที่มีค่าในช่วงตั้งแต่ - 1 ถึง 1) ชั้นที่สองคือ "purelin" (ฟังก์ชันการเปิดใช้งานเชิงเส้น ส่งกลับเวกเตอร์เอาต์พุตโดยไม่มีการเปลี่ยนแปลง) จะมี 100 ยุคการฝึกอบรม ฟังก์ชันการฝึกอบรม "trainlm" เป็นฟังก์ชันที่ฝึกอบรมเครือข่าย (ใช้เป็นค่าเริ่มต้นเนื่องจากมีการฝึกอบรมที่เร็วที่สุด แต่ต้องใช้หน่วยความจำจำนวนมาก)

รหัสโปรแกรม:

P = ศูนย์ (1, 20);

สำหรับ i = 1: การสร้างอาร์เรย์ 20% P (i) = i*0.1; % ข้อมูลอินพุต (อาร์กิวเมนต์) สิ้นสุด T= ; % อินพุต (ค่าฟังก์ชัน) net = newff ([-1 2.09], , ("แทนซิก" "purelin")); % การสร้างโครงข่ายประสาทเทียม รถไฟParam. ยุค = 100; % กำหนดจำนวนของยุคการฝึกอบรม net=train (net,P,T); %การฝึกอบรมเครือข่าย y = ซิม(net,P); % ร่างเครือข่ายที่ได้รับการฝึกฝนแบบสำรวจ (1);

พล็อต (P,T,P,y,"o"),กริด; % การวาดกราฟของข้อมูลเริ่มต้นและฟังก์ชันที่เกิดจากโครงข่ายประสาทเทียม

ผลลัพธ์ของเครือข่ายประสาท

ผลการฝึก (ดูรูปที่ 2): กราฟแสดงเวลาการฝึกของโครงข่ายประสาทเทียมและข้อผิดพลาดในการฝึก ในตัวอย่างนี้ โครงข่ายประสาทเทียมผ่านช่วงเวลาทั้งหมด 100 ยุค ค่อยๆ เรียนรู้และลดข้อผิดพลาด และมาถึง 10 -2.35 (0.00455531)

รูปที่ 2 ผลลัพธ์ของการฝึกโครงข่ายประสาทเทียม

กราฟของข้อมูลเริ่มต้นและฟังก์ชันที่สร้างโดยโครงข่ายประสาทเทียม (ดูรูปที่ 3): วงกลมระบุข้อมูลเริ่มต้น และเส้นคือฟังก์ชันที่สร้างโดยโครงข่ายประสาทเทียม นอกจากนี้ การใช้คะแนนที่ได้รับ คุณสามารถสร้างการถดถอยและรับสมการการประมาณได้ (ดูรูปที่ 8) เราใช้การถดถอยแบบลูกบาศก์ เนื่องจากกราฟผ่านจุดที่ได้รับอย่างแม่นยำที่สุด สมการผลลัพธ์มีลักษณะดังนี้:

y=0.049x 3 +0.88x 2 -0.006x+2.1

ดังนั้นเราจึงเห็นว่าการใช้โครงข่ายประสาทเทียม คุณสามารถค้นหาฟังก์ชันได้อย่างรวดเร็ว โดยรู้เฉพาะพิกัดของจุดที่ผ่าน

รูปที่ 3 กราฟของข้อมูลเริ่มต้นและฟังก์ชันที่เกิดจากโครงข่ายประสาทเทียม


รูปที่ 4 กราฟของฟังก์ชันการประมาณค่า

อัลกอริธึมการเผยแพร่ย้อนกลับเป็นหนึ่งในวิธีการฝึกโครงข่ายประสาทเทียมแบบหลายเลเยอร์ feedforward หรือเรียกอีกอย่างว่ามัลติเลเยอร์เพอร์เซปตรอน Multilayer perceptrons ประสบความสำเร็จในการแก้ปัญหาที่ซับซ้อนมากมาย

การฝึกอบรมโดยอัลกอริธึมการเผยแพร่ย้อนกลับของข้อผิดพลาดเกี่ยวข้องกับการผ่านสองครั้งผ่านเลเยอร์ทั้งหมดของเครือข่าย: ไปข้างหน้าและย้อนกลับ ในการส่งต่อ เวกเตอร์อินพุตจะถูกป้อนไปยังเลเยอร์อินพุตของโครงข่ายประสาทเทียม หลังจากนั้นจะแพร่กระจายผ่านเครือข่ายจากเลเยอร์หนึ่งไปยังอีกเลเยอร์หนึ่ง ผลลัพธ์ที่ได้คือชุดของสัญญาณเอาท์พุตที่ถูกสร้างขึ้น ซึ่งเป็นการตอบสนองที่แท้จริงของเครือข่ายต่ออิมเมจอินพุตที่กำหนด ระหว่างการส่งต่อ น้ำหนัก synaptic ทั้งหมดของเครือข่ายจะได้รับการแก้ไข ระหว่างการย้อนกลับ น้ำหนักซินแนปติกทั้งหมดจะถูกปรับตามกฎการแก้ไขข้อผิดพลาด กล่าวคือ: เอาต์พุตจริงของเครือข่ายจะถูกลบออกจากค่าที่ต้องการ ส่งผลให้เกิดสัญญาณข้อผิดพลาด สัญญาณนี้แพร่กระจายผ่านเครือข่ายในทิศทางตรงกันข้ามกับการเชื่อมต่อแบบซินแนปติก ดังนั้นชื่อ - อัลกอริธึมการขยายพันธุ์กลับ. น้ำหนัก Synaptic ได้รับการปรับเพื่อให้เอาต์พุตเครือข่ายใกล้เคียงกับที่ต้องการมากที่สุด

ลองพิจารณาการทำงานของอัลกอริทึมโดยละเอียด สมมติว่าเราจำเป็นต้องฝึกโครงข่ายประสาทเทียมต่อไปนี้โดยใช้อัลกอริทึมการแพร่ภาพย้อนกลับ:

ในรูปด้านล่าง จะใช้ข้อตกลงต่อไปนี้:

ในฐานะที่เป็นฟังก์ชันการเปิดใช้งานใน perceptron หลายชั้น ตามกฎแล้ว ฟังก์ชันการเปิดใช้งาน sigmoidal จะถูกใช้ โดยเฉพาะอย่างยิ่ง ฟังก์ชันโลจิสติก:

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

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

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

ต่อไป:

  1. เริ่มต้น synaptic weights ด้วยค่าสุ่มเล็กน้อย
  2. เลือกคู่การฝึกถัดไปจากชุดการฝึก ป้อนเวกเตอร์อินพุตไปยังอินพุตของเครือข่าย
  3. คำนวณผลลัพธ์ของเครือข่าย
  4. คำนวณความแตกต่างระหว่างเอาต์พุตของเครือข่ายและเอาต์พุตที่ต้องการ (เวกเตอร์เป้าหมายของคู่ฝึก)
  5. ปรับน้ำหนักเครือข่ายเพื่อลดข้อผิดพลาด (ตามที่แสดงด้านล่าง)
  6. ทำซ้ำขั้นตอนที่ 2 ถึง 5 สำหรับแต่ละเวกเตอร์ของชุดการฝึกจนกว่าข้อผิดพลาดของทั้งชุดจะถึงระดับที่ยอมรับได้

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

ขั้นตอนที่ 4 และ 5 ประกอบด้วย "การย้อนกลับ" ซึ่งสัญญาณข้อผิดพลาดที่คำนวณได้แพร่กระจายย้อนกลับผ่านเครือข่ายและใช้เพื่อปรับน้ำหนัก

มาดูขั้นตอนที่ 5 อย่างละเอียดยิ่งขึ้น - การปรับน้ำหนักของเครือข่าย มีสองกรณีที่จะเน้นที่นี่

กรณีที่ 1 การปรับน้ำหนัก synaptic เลเยอร์เอาต์พุต

ตัวอย่างเช่น สำหรับแบบจำลองเครือข่ายประสาทในรูปที่ 1 เหล่านี้จะเป็นน้ำหนักที่มีการกำหนดต่อไปนี้: และ . สมมติว่าดัชนีจะแสดงเซลล์ประสาทที่น้ำหนักซินแนปติกออกมา และเซลล์ประสาทที่มันเข้าไป:

ให้เราแนะนำค่า ซึ่งเท่ากับความแตกต่างระหว่างผลลัพธ์ที่ต้องการและผลลัพธ์จริง คูณด้วยอนุพันธ์ของฟังก์ชันการเปิดใช้งานโลจิสติก (ดูด้านบนสำหรับสูตรของฟังก์ชันการเปิดใช้งานโลจิสติก):

จากนั้น น้ำหนักของเลเยอร์ผลลัพธ์หลังจากการแก้ไขจะเท่ากับ:

นี่คือตัวอย่างการคำนวณสำหรับน้ำหนักซินแนปติก:

กรณีที่ 2 การปรับน้ำหนัก Synaptic ของเลเยอร์ที่ซ่อนอยู่

สำหรับแบบจำลองเครือข่ายประสาทในรูปที่ 1 เหล่านี้จะเป็นน้ำหนักที่สอดคล้องกับเลเยอร์ และ . กำหนดว่าดัชนีจะแสดงเซลล์ประสาทที่น้ำหนัก synaptic ออกมาและเซลล์ประสาทที่มันเข้ามา (ให้ความสนใจกับการปรากฏตัวของตัวแปรใหม่ )