อัลกอริทึมการเผยแพร่
อัลกอริทึมการแพร่พันธุ์เป็นปัจจัยสําคัญสําหรับการฝึกโครงข่ายประสาทขนาดใหญ่ได้อย่างรวดเร็ว บทความนี้อธิบายวิธีการทํางานของอัลกอริทึม
โปรดเลื่อนลง...
โครงข่ายระบบประสาทเทียมแบบง่าย
ทางด้านขวา คุณจะเห็นโครงข่ายระบบประสาทเทียมที่มีอินพุต 1 โหนด โหนดเอาต์พุต 1 โหนด และเลเยอร์ 2 โหนดที่ซ่อนอยู่จาก 2 โหนด
โหนดในเลเยอร์ใกล้เคียงเชื่อมต่อกับน้ําหนัก wijซึ่งเป็นพารามิเตอร์เครือข่าย
ฟังก์ชันการเปิดใช้งาน
แต่ละโหนดมีอินพุตทั้งหมด xฟังก์ชันการเปิดใช้งาน f(x)และเอาต์พุต y=f(x)
f(x) ต้องเป็นฟังก์ชันที่ไม่ใช่เชิงเส้น มิเช่นนั้น โครงข่ายระบบประสาทจะเรียนรู้ได้เฉพาะรูปแบบเชิงเส้นเท่านั้น
ฟังก์ชันเปิดใช้งานที่ใช้กันโดยทั่วไปคือ Sigmoid function:
f(x)=11+e−x
ฟังก์ชันข้อผิดพลาด
เป้าหมายคือการเรียนรู้น้ําหนักของเครือข่ายโดยอัตโนมัติจากข้อมูลที่มีเอาต์พุตที่คาดการณ์ไว้ youtput
ใกล้เคียงกับเป้าหมาย ytarget สําหรับอินพุตทั้งหมด xinput
เราใช้ฟังก์ชันข้อผิดพลาด Eเพื่อวัดระยะห่างจากเป้าหมาย
ฟังก์ชันข้อผิดพลาดที่ใช้กันโดยทั่วไปคือ E(youtput,ytarget)=12(youtput−ytarget)2
ส่งต่อการเผยแพร่
เราเริ่มต้นจากการป้อนข้อมูลตัวอย่าง (xinput,ytarget) และอัปเดตเลเยอร์อินพุตของเครือข่าย
เราถือว่าอินพุตมีลักษณะคล้ายกับโหนดอื่นๆ แต่ไม่มีฟังก์ชันการเปิดใช้งาน เอาต์พุตจึงเทียบเท่ากับอินพุตของฟังก์ชันดังกล่าว y1=xinput
ส่งต่อการเผยแพร่
ตอนนี้เราจะอัปเดตเลเยอร์ที่ซ่อนอยู่ชั้นแรก เรานําเอาต์พุต y ของโหนดในเลเยอร์ก่อนหน้าและใช้น้ําหนักในการคํานวณอินพุต x ของโหนดในเลเยอร์ถัดไป
ส่งต่อการเผยแพร่
จากนั้นเราจะอัปเดตเอาต์พุตของโหนดในเลเยอร์ที่ซ่อนอยู่ชั้นแรก
โดยเราจะใช้ฟังก์ชันการเปิดใช้งาน f(x)
ส่งต่อการเผยแพร่
เราใช้ทั้ง 2 สูตรนี้เผยแพร่ในส่วนอื่นๆ ของเครือข่ายและรับเอาต์พุตสุดท้ายของเครือข่าย
ข้อผิดพลาดในการคัดลอก
อัลกอริทึม Backpagation ตัดสินใจว่าจะอัปเดตแต่ละน้ําหนักของเครือข่ายเท่าใดหลังจากเปรียบเทียบผลลัพธ์ที่คาดการณ์ไว้กับผลลัพธ์ที่ต้องการสําหรับตัวอย่างที่เฉพาะเจาะจง
เราจึงต้องคํานวณการเปลี่ยนแปลงของข้อผิดพลาดตามน้ําหนักแต่ละประเภท dEdwij
เมื่อเราอัปเดตข้อผิดพลาดแล้ว เราจะอัปเดตน้ําหนักโดยใช้กฎการอัปเดตง่ายๆ ดังนี้
โดยที่ α คือค่าคงที่เชิงบวก หรือที่เรียกว่าอัตราการเรียนรู้ ซึ่งเราจําเป็นต้องปรับแต่งแบบเน้นผลลัพธ์
[หมายเหตุ] กฎการอัปเดตจะเรียบง่ายมาก เช่น หากข้อผิดพลาดลดลงเมื่อน้ําหนักเพิ่มขึ้น (dEdwij<0) ให้เพิ่มน้ําหนัก ไม่เช่นนั้นถ้าข้อผิดพลาดเพิ่มขึ้นเมื่อน้ําหนักเพิ่มขึ้น (dEdwij>0)
ให้ลดน้ําหนัก
อนุพันธ์เพิ่มเติม
นอกจากนี้เรายังจัดเก็บโหนดสําหรับอนุพันธ์อีก 2 โหนดเพื่อช่วยคํานวณ dEdwijเพิ่มเติม ดังนี้
ข้อผิดพลาดจะเปลี่ยนแปลงไปอย่างไร
- อินพุตทั้งหมดของโหนด dEdx และ
- เอาต์พุตของโหนด dEdy
การเผยแพร่ด้านหลัง
มาเริ่มนําอนุพันธ์ของข้อผิดพลาดไปใช้อีกครั้งกัน
เนื่องจากเรามีเอาต์พุตที่คาดการณ์ไว้ของตัวอย่างอินพุตนี้ เราจึงสามารถคํานวณวิธีที่ข้อผิดพลาดเปลี่ยนแปลงกับเอาต์พุตนั้นได้
ฟังก์ชันความผิดพลาดของเรา E=12(youtput−ytarget)2 มีดังนี้
การเผยแพร่ด้านหลัง
ตอนนี้เรามี dEdy กฎ dEdx ให้ใช้งานแล้ว
โดยที่ ddxf(x)=f(x)(1−f(x)) เมื่อ f(x) เป็นฟังก์ชันการเปิดใช้งาน Sigmoid
การเผยแพร่ด้านหลัง
ทันทีที่เราได้รับข้อผิดพลาดเกี่ยวกับอินพุตของโหนดทั้งหมด เราอาจได้รับข้อความแสดงข้อผิดพลาดเกี่ยวกับน้ําหนักของโหนดนั้น
การเผยแพร่ด้านหลัง
และเรายังใช้กฎ dEdy จากเลเยอร์ก่อนหน้าได้โดยใช้กฎเชน เราสร้างวงกลมทั้งหมดแล้ว
การเผยแพร่ด้านหลัง
ที่เหลือก็แค่ทําตามสูตร 3 สูตรก่อนหน้าจนกว่าเราจะคํานวณหาอนุพันธ์ของข้อผิดพลาดทั้งหมดสําเร็จ