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

ฟังก์ชันข้อผิดพลาดของโครงข่ายประสาทเทียม การฝึกอบรมเครือข่าย - การขยายพันธุ์กลับ

อัลกอริทึม การขยายพันธุ์กลับข้อผิดพลาดเป็นหนึ่งในวิธีการฝึกเครือข่ายประสาทเทียมหลายชั้นแบบฟีดฟอร์เวิร์ด หรือที่เรียกว่ามัลติเลเยอร์เพอร์เซปตรอน 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 เหล่านี้จะเป็นน้ำหนักที่สอดคล้องกับเลเยอร์ และ . สมมติว่าดัชนีจะแสดงถึงเซลล์ประสาทที่น้ำหนักซินแนปติกออกมา และเซลล์ประสาทที่มันเข้าไป (ให้ความสนใจกับการปรากฏตัวของตัวแปรใหม่ )

พรูดนิคอฟ อีวาน อเล็กเซวิช
มิเรีย (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

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

ในการฝึกเครือข่ายหลายชั้นในปี 1986 Rummelhart และ Hinton (Rummelhart D.E., Hinton G.E., Williams R.J., 1986) ได้เสนออัลกอริธึมการเผยแพร่กลับข้อผิดพลาด สิ่งพิมพ์มากมายเกี่ยวกับ งานอุตสาหกรรมเครือข่ายหลายชั้นด้วยอัลกอริทึมการเรียนรู้นี้ยืนยันประสิทธิภาพพื้นฐานในทางปฏิบัติ

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

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

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

ให้เครือข่ายได้รับการฝึกอบรมบนตัวอย่าง (X,Y),=1..p. กิจกรรมของเซลล์ประสาทจะแสดงด้วยตัวอักษรตัวเล็ก y ด้วยดัชนีที่สอดคล้องกัน และอินพุตที่ถ่วงน้ำหนักทั้งหมดของเซลล์ประสาทจะแสดงด้วยตัวอักษรตัวเล็ก x

โครงสร้างทั่วไปของอัลกอริทึมนั้นคล้ายกับที่กล่าวไว้ในบทที่ 4 โดยมีความซับซ้อนของสูตรการปรับน้ำหนัก

ตารางที่ 6.1 อัลกอริทึมการย้อนกลับ

ค่าเริ่มต้นน้ำหนักของเซลล์ประสาททั้งหมดของทุกชั้น V(t=0) และ W(t=0) จะถือว่าเป็นตัวเลขสุ่ม

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

ชั้นที่ซ่อนอยู่

ชั้นเอาท์พุท

โดยที่ f(x) เป็นฟังก์ชันซิกมอยด์ที่กำหนดโดยสูตร (6.1)

การทำงาน ข้อผิดพลาดกำลังสองเครือข่ายสำหรับภาพอินพุตที่กำหนดมีรูปแบบ:

ฟังก์ชันนี้จะลดลง วิธีการเพิ่มประสิทธิภาพการไล่ระดับสีแบบดั้งเดิมประกอบด้วยการปรับแต่งอาร์กิวเมนต์ซ้ำแล้วซ้ำอีกตามสูตร:

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

ที่นี่จะนำมาพิจารณา คุณสมบัติที่เป็นประโยชน์ฟังก์ชันซิกมอยด์ f(x): อนุพันธ์ของมันแสดงผ่านค่าของฟังก์ชันเท่านั้น f’(x)=f(1-f) ดังนั้นจึงได้รับค่าที่จำเป็นทั้งหมดสำหรับการปรับน้ำหนักของเลเยอร์เอาต์พุต V

ขั้นตอนนี้ปรับน้ำหนักของเลเยอร์ที่ซ่อนอยู่ วิธีการไล่ระดับสียังคงให้:

อนุพันธ์คำนวณโดยใช้สูตรเดียวกัน ยกเว้นความยุ่งยากบางประการของสูตรสำหรับข้อผิดพลาด  j

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

ทำซ้ำขั้นตอนที่ 1-3 สำหรับเวกเตอร์การฝึกอบรมทั้งหมด การฝึกจะสิ้นสุดลงเมื่อมีข้อผิดพลาดทั้งหมดเล็กน้อยหรือถึงจำนวนการวนซ้ำสูงสุดที่อนุญาต เช่นเดียวกับวิธีการฝึกของ Rosenblatt

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

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

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

ในตอนท้ายของการบรรยาย เราจะให้ข้อสังเกตเกี่ยวกับการปรับเกณฑ์ของเซลล์ประสาท เป็นเรื่องง่ายที่จะเห็นว่าเกณฑ์ของเซลล์ประสาทสามารถสร้างได้เทียบเท่ากับน้ำหนักพิเศษที่เชื่อมต่อกับอินพุตจำลอง ซึ่งเท่ากับ -1 แท้จริงแล้ว การเลือก W 0 =, x 0 =-1 และเริ่มผลรวมจากศูนย์ เราสามารถพิจารณาเซลล์ประสาทที่มีเกณฑ์เป็นศูนย์และอินพุตเพิ่มเติมหนึ่งรายการ:

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

อัลกอริทึมการแพร่กระจายกลับ

คำพ้องความหมาย: BackProp Algorithm, BackProp Algorithm, BackProp

Loginom: โครงข่ายประสาทเทียม (การจัดประเภท) (ตัวประมวลผล), โครงข่ายประสาทเทียม (การถดถอย) (ตัวประมวลผล)

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

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

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

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

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

เมื่อพิจารณาว่าผลรวมเอาต์พุตของเซลล์ประสาท j-th เท่ากับ

ก็แสดงว่า

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

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

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

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

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

ข้อดีของอัลกอริธึมการเผยแพร่ย้อนกลับ ได้แก่ ความง่ายในการใช้งานและการต้านทานความผิดปกติและค่าผิดปกติในข้อมูล ข้อเสียรวมถึง:

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

อัลกอริทึมได้รับการอธิบายครั้งแรกในปี 1974

ส่วนแรกครอบคลุม: โครงสร้าง โทโพโลยี ฟังก์ชันการเปิดใช้งาน และชุดการฝึก ในส่วนนี้ฉันจะพยายามอธิบายว่าโครงข่ายประสาทเทียมได้รับการฝึกฝนอย่างไร

การฝึกอบรมเครือข่ายประสาท Convolutional

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

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

อัลกอริทึม Backpropagation

ในการฝึกโครงข่ายประสาทเทียมที่อธิบายไว้ จะใช้อัลกอริธึมการเผยแพร่ย้อนกลับ วิธีการฝึกโครงข่ายประสาทเทียมแบบหลายชั้นนี้เรียกว่ากฎเดลตาทั่วไป วิธีการนี้ถูกเสนอในปี 1986 โดย Rumelhart, McClelland และ Williams นี่เป็นการฟื้นคืนความสนใจในโครงข่ายประสาทเทียม ซึ่งเริ่มจางหายไปในช่วงต้นทศวรรษที่ 70 อัลกอริทึมนี้เป็นขั้นตอนแรกและหลักที่ใช้ได้จริงสำหรับการฝึกอบรมโครงข่ายประสาทเทียมหลายชั้น

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

ความสัมพันธ์หลักของวิธีการ backpropagation ข้อผิดพลาดจะได้รับด้วยสัญกรณ์ต่อไปนี้:

ค่าความผิดพลาดถูกกำหนดโดยสูตร 2.8 รูตค่าเฉลี่ยข้อผิดพลาดกำลังสอง:

สถานะปิดใช้งานของแต่ละเซลล์ประสาท j สำหรับภาพ p ถูกเขียนเป็นผลรวมถ่วงน้ำหนักตามสูตร 2.9:

ผลลัพธ์ของแต่ละเซลล์ประสาท j คือค่าของฟังก์ชันกระตุ้น

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

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

ฟังก์ชันการสูญเสียการไล่ระดับสีเป็นเวกเตอร์ของอนุพันธ์บางส่วน ซึ่งคำนวณโดยสูตร 2.11:

อนุพันธ์ของฟังก์ชันข้อผิดพลาดเกี่ยวกับรูปภาพเฉพาะสามารถเขียนได้ตามกฎลูกโซ่ สูตร 2.12:

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

ข้อผิดพลาด δ สำหรับเลเยอร์ที่ซ่อนอยู่คำนวณโดยใช้สูตร 2.13:

อัลกอริทึมการแพร่กระจายข้อผิดพลาดลดลงเป็นขั้นตอนต่อไปนี้:

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


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

การคำนวณข้อผิดพลาดในชั้นตัวอย่างย่อย

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


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

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


รูปที่ 2.9 - การคำนวณของเลเยอร์การสุ่มตัวอย่างย่อย δ เนื่องจากเลเยอร์และเคอร์เนลของ δ convolutional

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


รูปที่ 2.10 - ผลลัพธ์ของการดำเนินการผกผัน


รูปที่ 2.11 - แกนที่หมุนได้ 180 องศาจะสแกนแผนที่การหมุน

ข้อผิดพลาดในการคำนวณบน Convolutional Layer

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

บทสรุป

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