นี่คือโครงข่ายประสาทเทียมที่ง่ายที่สุดเท่าที่จะเป็นไปได้ในการอธิบายและสาธิต
โครงข่ายประสาทเทียมได้รับแรงบันดาลใจจากสมองโดยมีเซลล์ประสาทเทียมที่เชื่อมต่อถึงกันจัดเก็บรูปแบบและสื่อสารระหว่างกัน รูปแบบที่ง่ายที่สุดของเซลล์ประสาทเทียมมีอินพุตหนึ่งหรือหลายอินพุต แต่ละอันมีน้ำหนักเฉพาะ
และหนึ่งเอาต์พุต
-
ในระดับที่ง่ายที่สุด ผลลัพธ์คือผลรวมของอินพุตคูณน้ำหนัก
วัตถุประสงค์ของเครือข่ายคือเพื่อเรียนรู้ผลลัพธ์บางอย่าง ได้รับการป้อนข้อมูลบางอย่าง
โดยการประมาณฟังก์ชันที่ซับซ้อนด้วยพารามิเตอร์หลายตัว
ที่เราไม่สามารถคิดเองได้
สมมติว่าเรามีเครือข่ายที่มีอินพุตสองช่อง และ
และสองตุ้มน้ำหนัก
และ
-
แนวคิดคือการปรับน้ำหนักในลักษณะที่อินพุตที่กำหนดให้ผลลัพธ์ที่ต้องการ
โดยปกติแล้ว น้ำหนักจะถูกเตรียมใช้งานแบบสุ่ม เนื่องจากเราไม่สามารถทราบค่าที่เหมาะสมที่สุดได้ล่วงหน้า อย่างไรก็ตาม เพื่อความง่าย เราจะกำหนดค่าเริ่มต้นให้ทั้งคู่ -
ถ้าเราคำนวณผลลัพธ์ของเครือข่ายนี้ เราจะได้
ถ้าเอาท์พุต ไม่ตรงกับค่าเป้าหมายที่คาดหวัง แสดงว่าเรามีข้อผิดพลาด
เช่น ถ้าเราอยากได้ค่าเป้าหมายเป็น แล้วเราจะมีความแตกต่างของ
วิธีทั่วไปวิธีหนึ่งในการวัดข้อผิดพลาด (หรือเรียกว่าฟังก์ชันต้นทุน) คือการใช้ค่าคลาดเคลื่อนกำลังสองเฉลี่ย:
หากเรามีการเชื่อมโยงอินพุตและค่าเป้าหมายหลายรายการ ข้อผิดพลาดจะกลายเป็นผลรวมเฉลี่ยของแต่ละการเชื่อมโยง
เราใช้ค่าคลาดเคลื่อนกำลังสองเฉลี่ยเพื่อวัดว่าผลลัพธ์อยู่ห่างจากเป้าหมายที่ต้องการมากน้อยเพียงใด การยกกำลังสองจะขจัดสัญญาณลบและให้น้ำหนักมากขึ้นสำหรับความแตกต่างที่มากขึ้นระหว่างเอาต์พุตและเป้าหมาย
เพื่อแก้ไขข้อผิดพลาด เราจะต้องปรับน้ำหนักในลักษณะที่ผลลัพธ์ตรงกับเป้าหมายของเรา ในตัวอย่างของเรา การลดลง จาก
ถึง
จะทำเคล็ดลับตั้งแต่นั้นมา
อย่างไรก็ตาม เพื่อปรับน้ำหนักของโครงข่ายประสาทเทียมของเราสำหรับอินพุตและค่าเป้าหมายที่แตกต่างกัน เราจำเป็นต้องมี อัลกอริทึมการเรียนรู้ เพื่อทำสิ่งนี้ให้เราโดยอัตโนมัติ
แนวคิดก็คือการใช้ข้อผิดพลาดเพื่อทำความเข้าใจว่าควรปรับน้ำหนักแต่ละค่าอย่างไรเพื่อลดข้อผิดพลาดให้เหลือน้อยที่สุด แต่ก่อนอื่น เราต้องเรียนรู้เกี่ยวกับการไล่ระดับสี
โดยพื้นฐานแล้วมันคือเวกเตอร์ที่ชี้ไปยังทิศทางของการชันที่สุดของฟังก์ชัน การไล่ระดับสีจะแสดงด้วย และเป็นเพียงอนุพันธ์ย่อยของแต่ละตัวแปรของฟังก์ชันที่แสดงเป็นเวกเตอร์
ดูเหมือนว่านี้สำหรับฟังก์ชันตัวแปรสองตัว:
มาใส่ตัวเลขและคำนวณการไล่ระดับสีด้วยตัวอย่างง่ายๆ กัน สมมติว่าเรามีฟังก์ชัน แล้วเกรเดียนต์จะเป็น
ส่วน Descent นั้นหมายถึงการใช้การไล่ระดับสีเพื่อค้นหาทิศทางของการไต่ขึ้นของฟังก์ชันของเราที่สูงชันที่สุด จากนั้นไปในทิศทางตรงกันข้ามในปริมาณ เล็กน้อย หลายๆ ครั้งเพื่อค้นหาฟังก์ชัน global (หรือบางครั้งในพื้นที่) ค่าต่ำสุด
เราใช้ค่าคงที่ที่เรียกว่า อัตราการเรียนรู้ ซึ่งแสดงด้วย เพื่อกำหนดขั้นตอนเล็กๆ น้อยๆ ที่จะไปในทิศทางนั้น
ถ้า มีขนาดใหญ่เกินไป เราก็เสี่ยงที่จะใช้งานฟังก์ชันเกินขีดจำกัดขั้นต่ำ แต่หากต่ำเกินไป เครือข่ายจะใช้เวลาในการเรียนรู้นานขึ้น และเราเสี่ยงที่จะติดอยู่ในค่าต่ำสุดในพื้นที่ตื้น
สำหรับน้ำหนักทั้งสองของเรา และ
เราจำเป็นต้องค้นหาความชันของน้ำหนักเหล่านั้นเทียบกับฟังก์ชันข้อผิดพลาด
สำหรับทั้งสองอย่าง และ
เราสามารถหาความชันได้โดยใช้กฎลูกโซ่
จากนี้ไปเราจะแสดงถึง เป็น
คำศัพท์สำหรับความเรียบง่าย
เมื่อเรามีการไล่ระดับสีแล้ว เราก็สามารถอัปเดตน้ำหนักของเราได้โดยลบการไล่ระดับสีที่คำนวณแล้วคูณด้วยอัตราการเรียนรู้
และเราทำซ้ำขั้นตอนนี้จนกว่าข้อผิดพลาดจะลดลงและใกล้เคียงกับศูนย์มากพอ
ตัวอย่างที่รวมไว้จะสอนชุดข้อมูลต่อไปนี้ให้กับโครงข่ายประสาทเทียมที่มีอินพุต 2 ตัวและเอาต์พุต 1 ตัวโดยใช้การไล่ระดับสีแบบไล่ระดับ:
เมื่อเรียนรู้แล้ว เครือข่ายควรส่งออก ~0 เมื่อได้รับสองค่า สและ ~
เมื่อได้รับ
และก
-
docker build -t simplest-network .
docker run --rm simplest-network