โครงข่ายประสาทเทียมเป็นส่วนสำคัญของการเรียนรู้เชิงลึก มันมีการใช้งานจริงมากมายในหลายพื้นที่ ทุกวันนี้ เครือข่ายเหล่านี้ใช้สำหรับการจัดประเภทรูปภาพ การรู้จำคำพูด การตรวจจับวัตถุ ฯลฯ
มาทำความเข้าใจว่าสิ่งนี้คืออะไรและทำงานอย่างไร
เครือข่ายนี้มีองค์ประกอบที่แตกต่างกัน ดังต่อไปนี้ −
- ชั้นอินพุต x
- จำนวนเลเยอร์ที่ซ่อนอยู่ตามอำเภอใจ
- เลเยอร์เอาต์พุต ŷ
- ชุดของน้ำหนักและความเอนเอียงระหว่างแต่ละเลเยอร์ซึ่งกำหนดโดย W และ b
- ถัดไปคือตัวเลือกของฟังก์ชันการเปิดใช้งานสำหรับแต่ละเลเยอร์ที่ซ่อนอยู่ σ.
ในแผนภาพนี้ โครงข่ายประสาทเทียมแบบ 2 ชั้นจะแสดง (โดยทั่วไปชั้นอินพุตจะถูกยกเว้นเมื่อนับจำนวนเลเยอร์ในโครงข่ายประสาทเทียม)
ในกราฟนี้ วงกลมเป็นตัวแทนของเซลล์ประสาท และเส้นต่างๆ เป็นตัวแทนของไซแนปส์ ไซแนปส์ใช้เพื่อคูณอินพุตและน้ำหนัก เราคิดว่าน้ำหนักเป็น "จุดแข็ง" ของการเชื่อมต่อระหว่างเซลล์ประสาท น้ำหนักกำหนดผลลัพธ์ของโครงข่ายประสาทเทียม
นี่คือภาพรวมโดยย่อเกี่ยวกับวิธีการทำงานของโครงข่ายประสาทเทียมแบบฟีดฟอร์เวิร์ด -
เมื่อเราใช้ feed forward neural network เราต้องทำตามขั้นตอนบางอย่าง
-
ขั้นแรกให้ป้อนข้อมูลเป็นเมทริกซ์ (อาร์เรย์ตัวเลข 2 มิติ)
-
ถัดไปจะคูณอินพุตด้วยน้ำหนักที่กำหนด
-
ถัดไปใช้ฟังก์ชันการเปิดใช้งาน
-
ส่งคืนผลลัพธ์
-
มีการคำนวณข้อผิดพลาดถัดไป ซึ่งเป็นความแตกต่างระหว่างผลลัพธ์ที่ต้องการจากข้อมูลและผลลัพธ์ที่คาดการณ์
-
และน้ำหนักจะเปลี่ยนแปลงเล็กน้อยตามข้อผิดพลาด
-
ในการฝึกอบรม กระบวนการนี้ทำซ้ำมากกว่า 1,000 ครั้ง และยิ่งมีการฝึกอบรมข้อมูลมากเท่าใด ผลลัพธ์ของเราก็จะยิ่งแม่นยำมากขึ้นเท่านั้น
ชั่วโมงเรียน ชั่วโมงนอน (INPUT)คะแนนทดสอบ (ผลลัพธ์)
2, 9921, 5863, 6894, 8?
โค้ดตัวอย่าง
จาก exp การนำเข้าจำนวนมาก, อาร์เรย์, สุ่ม, dot, tanhclass my_network():def __init__(self):random.seed(1) # 3x1 Weight matrix self.weight_matrix =2 * random.random((3, 1) ) - 1 defmy_tanh(ตัวเอง, x):return tanh(x) defmy_tanh_derivative(self, x):return 1.0 - tanh(x) ** 2 # การขยายพันธุ์ไปข้างหน้า defmy_forward_propagation(ตนเอง, อินพุต):return self.my_tanh(dot(inputs) , self.weight_matrix)) # ฝึกโครงข่ายประสาทเทียม deftrain(ตัวเอง, train_inputs, train_outputs, num_train_iterations):สำหรับการวนซ้ำในช่วง (num_train_iterations):output =self.my_forward_propagation(train_inputs) # คำนวณข้อผิดพลาดในผลลัพธ์ error =train_outputs - output adjustment =dot(train_inputs.T, error *self.my_tanh_derivative(output)) # ปรับเมทริกซ์น้ำหนัก self.weight_matrix +=adjustment # รหัสไดรเวอร์ถ้า __name__ =="__main__":my_neural =my_network() พิมพ์ ('น้ำหนักสุ่มเมื่อเริ่มการฝึก') พิมพ์ (my_neural.weight_matrix) train_inputs =array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]) train_outputs =array([[0, 1, 1, 0]]).T my_neural.train(train_inputs, train_outputs, 10000) พิมพ์ ('การแสดงน้ำหนักใหม่หลังการฝึก') พิมพ์ (my_neural.weight_matrix) # ทดสอบ โครงข่ายประสาทเทียมกับสถานการณ์ใหม่ print ("กำลังทดสอบเครือข่ายในตัวอย่างใหม่ ->")print (my_neural.my_forward_propagation(array([1, 0, 0])))
ผลลัพธ์
สุ่มตุ้มน้ำหนักเมื่อเริ่มฝึก[[-0.16595599][ 0.44064899][-0.99977125]]แสดงน้ำหนักใหม่หลังการฝึก[[5.39428067][0.19482422][0.34317086]]การทดสอบเครือข่ายในตัวอย่างใหม่ ->[0.99995873]ก่อน>