คุณเคยเห็นในแบบฝึกหัดก่อนหน้าว่าแค่การเพิ่ม การซ่อนเลเยอร์ในเครือข่ายของเรานั้นไม่เพียงพอที่จะนำเสนอสิ่งที่ไม่ใช่เชิงเส้น การดำเนินการเชิงเส้นที่ทำกับการดำเนินการเชิงเส้นจะยังคงเป็นเชิงเส้น
คุณจะกำหนดค่าโครงข่ายระบบประสาทเทียมเพื่อเรียนรู้ได้อย่างไร แบบไม่เป็นเชิงเส้นระหว่างค่าต่างๆ ได้อย่างไร เราต้องมีวิธีแทรกแบบไม่เป็นเชิงเส้น การดำเนินการทางคณิตศาสตร์ลงในโมเดล
ถ้าเรื่องนี้ดูค่อนข้างคุ้นเคย นั่นเป็นเพราะเราใช้ การดำเนินการทางคณิตศาสตร์แบบไม่เชิงเส้นกับเอาต์พุตของโมเดลเชิงเส้นก่อนหน้านี้ หลักสูตรนั้น ในการถดถอยแบบโลจิสติก เราปรับโมเดลการถดถอยเชิงเส้นให้แสดงผลค่าที่ต่อเนื่องจาก 0 เป็น 1 (แสดงถึงความน่าจะเป็น) โดยการส่งเอาต์พุตของโมเดลผ่าน ฟังก์ชัน sigmoid
เราสามารถใช้หลักการเดียวกันนี้กับโครงข่ายประสาทของเรา เรามาดูโมเดลของเราอีกครั้งกัน จากแบบฝึกหัด 2 ก่อนหน้านี้ แต่ครั้งนี้ แสดงผลค่าของแต่ละโหนดก่อน เราจะใช้ฟังก์ชัน sigmoid ก่อน
ลองทำขั้นตอนการคำนวณของแต่ละโหนดโดยคลิกปุ่ม >| (ทางด้านขวาของปุ่มเล่น) ตรวจสอบการดำเนินการทางคณิตศาสตร์ที่ดำเนินการ เพื่อคำนวณค่าโหนดแต่ละค่าในแผงการคำนวณใต้กราฟ โปรดทราบว่าตอนนี้เอาต์พุตของแต่ละโหนดจะเป็นการแปลงแบบ Sigmoid ของเส้นตรง ชุดค่าผสมของโหนดในเลเยอร์ก่อนหน้า และค่าเอาต์พุต ในกลุ่ม 0 ถึง 1
ในที่นี้ ซิกมอยด์ทำหน้าที่เป็น ฟังก์ชันการเปิดใช้งาน สำหรับเครือข่ายประสาทเทียม ซึ่งเป็นการเปลี่ยนค่าเอาต์พุตของเซลล์ประสาทแบบไม่เชิงเส้น ก่อนที่จะมีการส่งต่อค่าเป็นอินพุตสำหรับการคำนวณค่าถัดไป ชั้นของโครงข่ายประสาท
ตอนนี้เราได้เพิ่มฟังก์ชันเปิดใช้งานแล้ว การเพิ่มเลเยอร์มีผลอย่างมาก การวางซ้อนสิ่งที่ไม่ใช่เชิงเส้นในรายการที่ไม่ใช่เชิงเส้นช่วยให้เราสร้างแบบจำลองที่ซับซ้อนมาก ๆ ได้ ความสัมพันธ์ระหว่างอินพุตและเอาต์พุตที่คาดการณ์ไว้ กล่าวโดยสรุป แต่ละเลเยอร์ คือการเรียนรู้ฟังก์ชันที่ซับซ้อนและระดับสูงได้อย่างมีประสิทธิภาพมากกว่าข้อมูลดิบ อินพุต หากต้องการทำความเข้าใจเพิ่มเติม เกี่ยวกับวิธีการทำงานนี้ ดูบล็อกโพสต์ที่ยอดเยี่ยมของ Chris Olah
ฟังก์ชันการเปิดใช้งานทั่วไป
ฟังก์ชันทางคณิตศาสตร์ 3 รายการที่มักใช้เป็นฟังก์ชันเปิดใช้งานคือ sigmoid, tanh และ ReLU
ฟังก์ชัน sigmoid (ที่กล่าวถึงข้างต้น) จะเปลี่ยนรูปแบบต่อไปนี้กับอินพุต $x$ โดยสร้างค่าเอาต์พุตระหว่าง 0 ถึง 1
\[F(x)=\frac{1} {1+e^{-x}}\]
ต่อไปนี้คือพล็อตของฟังก์ชันนี้
ฟังก์ชัน tanh (ย่อมาจาก "ไฮเปอร์โบลิก แทนเจนต์") จะแปลงอินพุต $x$ เป็น จะให้ค่าเอาต์พุตระหว่าง –1 ถึง 1
\[F(x)=tanh(x)\]
ต่อไปนี้คือพล็อตของฟังก์ชันนี้
ฟังก์ชันเปิดใช้งานหน่วยเชิงเส้นแบบแผ่นพับ (หรือ ReLU สำหรับ (แบบย่อ) แปลงผลลัพธ์โดยใช้อัลกอริทึมต่อไปนี้
- หากค่าที่ป้อน $x$ น้อยกว่า 0 ให้แสดงค่า 0
- หากค่าอินพุต $x$ มากกว่าหรือเท่ากับ 0 ให้แสดงค่าอินพุต
ReLU สามารถแสดงด้วยคณิตศาสตร์โดยใช้ฟังก์ชัน max() ดังนี้
ต่อไปนี้คือพล็อตของฟังก์ชันนี้
ReLU มักทำงานเป็นฟังก์ชันเปิดใช้งานได้ดีกว่าเล็กน้อย เช่น sigmoid หรือ tanh เนื่องจากมีความไวต่อ โจทย์การไล่ระดับสีที่หายไป ในระหว่างการฝึกโครงข่ายระบบประสาทเทียม ReLU ก็ง่ายขึ้นมาก ในการคำนวณมากกว่าฟังก์ชันเหล่านี้
ฟังก์ชันการเปิดใช้งานอื่นๆ
ในทางปฏิบัติ ฟังก์ชันทางคณิตศาสตร์ใดๆ ก็สามารถทำหน้าที่เป็นฟังก์ชันเปิดใช้งานได้ สมมติว่า \(\sigma\) แสดงถึงฟังก์ชันการเปิดใช้งานของเรา ค่าของโหนดในเครือข่ายจะกำหนดตามข้อมูลต่อไปนี้ สูตร:
Keras มอบการสนับสนุนที่พร้อมใช้งานทันทีสำหรับ ฟังก์ชันการเปิดใช้งาน อย่างไรก็ดี เรายังคงแนะนำให้คุณเริ่มต้นด้วย ReLU
สรุป
วิดีโอต่อไปนี้จะแสดงสรุปของทุกสิ่งที่คุณได้เรียนรู้จนถึงตอนนี้ เกี่ยวกับวิธีการสร้างโครงข่ายประสาท
ตอนนี้โมเดลของเรามีคอมโพเนนต์มาตรฐานทั้งหมดเหมือนกับสิ่งที่ผู้ใช้มัก หมายถึงเมื่อพูดถึงโครงข่ายประสาท
- ชุดของโหนดคล้ายกับเซลล์ประสาทที่จัดเรียงเป็นเลเยอร์
- ชุดน้ำหนักที่แสดงการเชื่อมต่อระหว่างโครงข่ายระบบประสาทเทียมแต่ละเครือข่าย และเลเยอร์ที่อยู่ด้านล่าง เลเยอร์ด้านล่างอาจ ชั้นโครงข่ายระบบประสาทเทียมอีกชั้นหนึ่ง หรือชั้นอื่นๆ อีกชั้นหนึ่ง
- ชุดของการให้น้ำหนักพิเศษ 1 ชุดสำหรับแต่ละโหนด
- ฟังก์ชันเปิดใช้งานที่แปลงเอาต์พุตของแต่ละโหนดในเลเยอร์ เลเยอร์ต่างๆ อาจมีฟังก์ชันการเปิดใช้งานที่แตกต่างกัน
ข้อควรระวัง: โครงข่ายระบบประสาทเทียมไม่จำเป็นต้องดีกว่าเสมอไป ข้ามฟีเจอร์ แต่โครงข่ายระบบประสาทเทียมก็มีทางเลือกที่ยืดหยุ่นที่ได้ผล ในหลายๆ กรณี