หากคุณจําได้จากหน่วยฟีเจอร์ครอส ปัญหาการแยกประเภทต่อไปนี้จะไม่เป็นเชิงเส้น
รูปที่ 1 โจทย์การจัดประเภทที่ไม่ใช่แบบเชิงเส้น
"NonDNS" หมายความว่าคุณไม่สามารถคาดการณ์ป้ายกํากับด้วยโมเดลของฟอร์มได้อย่างแม่นยํา \(b + w_1x_1 + w_2x_2\) ก่อนหน้านี้ เราพูดถึงไม้กางเขนฟีเจอร์ ว่าเป็นวิธีการหนึ่งที่เป็นไปได้ในการประมาณปัญหาที่ไม่ใช่แบบเชิงเส้น
ตอนนี้ ให้พิจารณาชุดข้อมูลต่อไปนี้
รูปที่ 2 โจทย์การจัดประเภทที่ไม่ใช่แบบเชิงเส้นที่ยากขึ้น
ชุดข้อมูลที่แสดงในรูปที่ 2 จะแก้ด้วยรูปแบบเชิงเส้นไม่ได้
หากต้องการดูว่าโครงข่ายระบบประสาทเทียมจะช่วยแก้ปัญหาที่ไม่เกี่ยวข้องกับเส้นตรงได้อย่างไร เรามาเริ่มต้นด้วยการแสดงรูปแบบเชิงเส้นเป็นกราฟกัน
รูปที่ 3 รูปแบบเชิงเส้นเป็นกราฟ
วงกลมสีฟ้าแต่ละวงแสดงถึงฟีเจอร์อินพุต และวงกลมสีเขียวหมายถึงผลรวมของอินพุตที่ถ่วงน้ําหนัก
เราจะเปลี่ยนรูปแบบนี้เพื่อปรับปรุงความสามารถในการจัดการปัญหาที่ไม่ใช่แบบเชิงเส้นได้อย่างไร
เลเยอร์ที่ซ่อนอยู่
ในรูปแบบที่แสดงในกราฟต่อไปนี้ เราได้เพิ่ม"ซ่อนเลเยอร์" ของค่ากลาง โหนดสีเหลืองแต่ละโหนดในเลเยอร์ที่ซ่อนอยู่คือผลรวมที่ถ่วงน้ําหนักของค่าโหนดอินพุตสีน้ําเงิน เอาต์พุตคือผลรวมที่ถ่วงน้ําหนักของโหนดสีเหลือง
รูปที่ 4 กราฟของโมเดล 2 ชั้น
โมเดลนี้เป็นแบบเชิงเส้นหรือไม่ ใช่ เอาต์พุตยังคงเป็นอินพุตเชิงเส้นของอินพุต
ในรูปแบบที่แสดงโดยกราฟต่อไปนี้ เราได้เพิ่ม ผลรวมของน้ําหนักที่ถ่วงน้ําหนักชั้นที่ 2 ที่ซ่อนอยู่
รูปที่ 5 กราฟของโมเดล 3 ชั้น
โมเดลนี้ยังคงเป็นแบบเชิงเส้นอยู่ไหม ใช่แล้ว เมื่อคุณแสดงเอาต์พุตเป็น ฟังก์ชันการป้อนข้อมูลและเข้าใจง่าย ก็จะได้ผลรวมอินพุตอื่นๆ แบบถ่วงน้ําหนัก ผลรวมนี้ไม่สามารถจําลองรูปแบบของปัญหาที่ไม่ใช่แบบเชิงเส้นในรูปที่ 2
ฟังก์ชันการเปิดใช้งาน
ในการประมาณปัญหาที่ไม่ใช่แบบเชิงเส้น เราแนะนําเนื้อหาที่ไม่เป็นเชิงเส้นโดยตรง เราสามารถวางโหนดเลเยอร์ที่ซ่อนอยู่แต่ละรายการผ่านฟังก์ชันที่ไม่ใช่เชิงเส้น
ในรูปแบบที่แสดงโดยกราฟต่อไปนี้ ค่าของแต่ละโหนดในเลเยอร์ที่ซ่อนอยู่ 1 จะถูกเปลี่ยนรูปแบบโดยฟังก์ชันที่ไม่ใช่เชิงเส้นก่อนที่จะส่งต่อไปยังผลรวมของการถ่วงน้ําหนักของเลเยอร์ถัดไป ฟังก์ชันที่ไม่ใช่เชิงเส้นเรียกว่า ฟังก์ชันการเปิดใช้งาน
รูปที่ 6 กราฟของโมเดล 3 ชั้นที่มีฟังก์ชันการเปิดใช้งาน
เมื่อเราเพิ่มฟังก์ชันเปิดใช้งานแล้ว การเพิ่มเลเยอร์จะส่งผลมากกว่า การซ้อนทับแบบไม่เป็นเชิงเส้นกับความไม่เป็นเชิงเส้นช่วยให้เราสร้างความสัมพันธ์ที่ซับซ้อนมากระหว่างอินพุตกับเอาต์พุตที่คาดการณ์ไว้ โดยสรุปแล้ว แต่ละเลเยอร์กําลังเรียนรู้ฟังก์ชันที่ซับซ้อนกว่าระดับที่สูงกว่าข้อมูลดิบ หากคุณสนใจทําความเข้าใจให้มากยิ่งขึ้นเกี่ยวกับวิธีการทํางาน โปรดดูบล็อกโพสต์ที่ยอดเยี่ยมของ Chris Olah
ฟังก์ชันการเปิดใช้งานทั่วไป
ฟังก์ชันการเปิดใช้งาน sigmoid ต่อไปนี้จะแปลงผลรวมแบบถ่วงน้ําหนักเป็นค่าระหว่าง 0 ถึง 1
โครงเรื่องมีดังนี้
รูปที่ 7 ฟังก์ชันการเปิดใช้งาน Sigmoid
ฟังก์ชันการเปิดใช้งานหน่วยเชิงเส้นแบบคงที่ต่อไปนี้ (หรือเรียกสั้นๆ ว่า ReLU) มักทํางานได้ดีกว่าฟังก์ชันการทํางานที่ราบรื่น เช่น sigmoid และในขณะเดียวกันก็คํานวณได้ง่ายกว่า
ความเหนือกว่าของ ReLU อิงจากผลการศึกษาเชิงผลลัพธ์ซึ่งอาจเกิดขึ้นโดย ReLU และมีช่วงการตอบสนองที่เป็นประโยชน์มากขึ้น การตอบสนองของ Sigmoid' ลดลงอย่างรวดเร็วในทั้งสองฝั่ง
รูปที่ 8 ฟังก์ชันการเปิดใช้งาน ReLU
ในความเป็นจริง ฟังก์ชันทางคณิตศาสตร์ก็ทําหน้าที่เป็นฟังก์ชันเปิดใช้งานได้เช่นกัน สมมติว่า \(\sigma\) เป็นฟังก์ชันเปิดใช้งาน (Relu, Sigmoid หรืออะไรก็ตาม) ดังนั้น ค่าของโหนดในเครือข่ายจึงกําหนดโดยสูตรต่อไปนี้
TensorFlow ให้การสนับสนุนแบบพร้อมใช้งานทันทีสําหรับฟังก์ชันการเปิดใช้งานมากมาย คุณดูฟังก์ชันการเปิดใช้งานเหล่านี้ได้ใน รายการ Wrapper สําหรับการดําเนินการของโครงข่ายระบบประสาทพื้นฐานของ TensorFlow' อย่างไรก็ตาม เรายังคงแนะนําให้คุณเริ่มต้นด้วย ReLU
สรุป
ตอนนี้โมเดลของเรามีคอมโพเนนต์มาตรฐานทั้งหมดที่ผู้คนมักจะพูดถึง เมื่อพูดว่า "quot;โครงข่ายระบบประสาทเทียม":
- ชุดโหนดที่คล้ายกันกับเซลล์ประสาทที่จัดเป็นเลเยอร์
- ชุดน้ําหนักที่แสดงถึงการเชื่อมต่อระหว่างเครือข่ายระบบประสาทแต่ละชั้นกับเลเยอร์ที่อยู่ข้างใต้ เลเยอร์ด้านล่างนี้อาจเป็นเลเยอร์เครือข่ายประสาทอื่นหรือเลเยอร์ประเภทอื่น
- ชุดการให้น้ําหนักพิเศษ 1 ชุดต่อ 1 โหนด
- ฟังก์ชันเปิดใช้งานที่เปลี่ยนรูปแบบเอาต์พุตของแต่ละโหนดในเลเยอร์ เลเยอร์ต่างๆ อาจมีฟังก์ชันการเปิดใช้งานที่แตกต่างกัน
ข้อควรระวัง: โครงข่ายประสาทไม่ได้มีคุณภาพดีกว่าไม้กางเขนเสมอไป แต่โครงข่ายประสาทมีทางเลือกที่ยืดหยุ่นซึ่งใช้งานได้ดีในหลายๆ กรณี