โครงข่ายประสาทเทียมเป็นแบบจำลองทางคณิตศาสตร์ที่เปลี่ยนอินพุตให้เป็นเอาต์พุต โดยส่งตัวเลขผ่านเลเยอร์ของการคำนวณอย่างง่าย แต่ละเลเยอร์จะรับค่าจากเลเยอร์ก่อนหน้า สร้างผลรวมถ่วงน้ำหนัก เพิ่มไบแอส ใช้ฟังก์ชันกระตุ้นแบบไม่เชิงเส้น แล้วส่งผลลัพธ์ต่อไปข้างหน้า

คำอธิบายนี้อาจฟังดูเป็นนามธรรม แต่แนวคิดหลักนั้นเล็กและตรงไปตรงมา: โครงข่ายเรียนรู้น้ำหนักที่ปรับได้จำนวนมาก เพื่อให้รูปแบบที่มีประโยชน์ในอินพุตนำไปสู่คำทำนายที่มีประโยชน์ในเอาต์พุต

โครงข่ายประสาทเทียมคืออะไร

สำหรับนิวรอนหนึ่งตัวที่มีอินพุต x1,x2,,xnx_1, x_2, \dots, x_n การคำนวณพื้นฐานคือ

z=w1x1+w2x2++wnxn+bz = w_1x_1 + w_2x_2 + \dots + w_nx_n + b

ตามด้วยฟังก์ชันกระตุ้น:

a=g(z)a = g(z)

โดยที่ w1,,wnw_1, \dots, w_n คือน้ำหนัก, bb คือไบแอส และ gg คือฟังก์ชันกระตุ้น เช่น ReLU, sigmoid หรือ tanh

โครงข่ายประสาทเทียมแบบ feedforward เต็มรูปแบบจะทำรูปแบบนี้ซ้ำไปในแต่ละเลเยอร์ ในรูปแบบย่อ เลเยอร์หนึ่งมักเขียนได้เป็น

a(l)=g ⁣(W(l)a(l1)+b(l))a^{(l)} = g\!\left(W^{(l)} a^{(l-1)} + b^{(l)}\right)

โดยที่ a(l1)a^{(l-1)} คือเอาต์พุตของเลเยอร์ก่อนหน้า

สัญชาตญาณที่มักทำให้เข้าใจได้ทันที

นิวรอนแต่ละตัวกำลังตั้งคำถามแบบถ่วงน้ำหนักเกี่ยวกับอินพุตที่มันเห็น น้ำหนักบวกขนาดใหญ่ทำให้บางคุณลักษณะมีความสำคัญมากขึ้น น้ำหนักลบสามารถต้านรูปแบบบางอย่างได้ ส่วนไบแอสทำหน้าที่เลื่อนเกณฑ์การตอบสนอง จากนั้นฟังก์ชันกระตุ้นจะเป็นตัวกำหนดว่านิวรอนนั้นควรตอบสนองแรงแค่ไหน

การซ้อนหลายเลเยอร์ทำให้โครงข่ายสร้างคุณลักษณะได้เป็นลำดับขั้น เลเยอร์ต้น ๆ ตรวจจับรูปแบบง่าย ๆ ส่วนเลเยอร์หลัง ๆ จะนำสิ่งเหล่านั้นมารวมกันเป็นสัญญาณภายในที่มีประโยชน์มากขึ้นสำหรับงานสุดท้าย

นี่จึงเป็นเหตุผลว่าโครงข่ายประสาทเทียมไม่ได้เป็นเพียง “หลายสูตรพร้อมกัน” แต่มันคือการประกอบกันของฟังก์ชันง่าย ๆ และการประกอบนี้เองที่ทำให้มันยืดหยุ่น

ตัวอย่างคำนวณทีละขั้น

พิจารณาโครงข่ายขนาดเล็กที่มีอินพุต 2 ตัว เลเยอร์ซ่อน 1 เลเยอร์ และเอาต์พุต 1 ตัว ให้มีอินพุตเป็น

x=[21]x = \begin{bmatrix} 2 \\ 1 \end{bmatrix}

สมมติว่าเลเยอร์ซ่อนมีนิวรอน 2 ตัว และใช้ ReLU โดยที่

ReLU(z)=max(0,z)\operatorname{ReLU}(z) = \max(0, z)

กำหนดการคำนวณในเลเยอร์ซ่อนดังนี้:

z1=12+(1)1+0=1z_1 = 1 \cdot 2 + (-1) \cdot 1 + 0 = 1 h1=ReLU(z1)=1h_1 = \operatorname{ReLU}(z_1) = 1 z2=0.52+0.511=0.5z_2 = 0.5 \cdot 2 + 0.5 \cdot 1 - 1 = 0.5 h2=ReLU(z2)=0.5h_2 = \operatorname{ReLU}(z_2) = 0.5

ตอนนี้ส่งค่าจากเลเยอร์ซ่อนไปยังนิวรอนเอาต์พุต:

s=2h1h2=2(1)0.5=1.5s = 2h_1 - h_2 = 2(1) - 0.5 = 1.5

หากกติกาคือ “ทำนายเป็นคลาส 1 เมื่อ s>0s > 0” อินพุตนี้ก็จะถูกจัดเป็นคลาส 1

ประเด็นสำคัญไม่ใช่ตัวเลขเฉพาะชุดนี้ แต่คือโครงสร้างของกระบวนการ:

  1. รับอินพุต
  2. สร้างผลรวมถ่วงน้ำหนัก
  3. ใช้ฟังก์ชันกระตุ้นแบบไม่เชิงเส้น
  4. ทำซ้ำ
  5. อ่านคะแนนสุดท้าย

นี่คือโครงข่ายประสาทเทียมที่กำลังทำ forward pass

โครงข่ายประสาทเทียมเรียนรู้อย่างไร

การใช้โครงข่ายเป็นปัญหาหนึ่ง ส่วนการฝึกมันเป็นอีกปัญหาหนึ่ง

ในการเรียนรู้แบบมีผู้สอนมาตรฐาน โครงข่ายจะสร้างคำทำนายก่อน จากนั้นฟังก์ชันความสูญเสียจะวัดว่าคำทำนายนั้นห่างจากค่าเป้าหมายมากเพียงใด การฝึกด้วยกราเดียนต์จะคำนวณว่าค่าความสูญเสียเปลี่ยนไปอย่างไรเมื่อเทียบกับน้ำหนักและไบแอสแต่ละตัว แล้วจึงอัปเดตค่าเหล่านั้นเพื่อลดความสูญเสีย

ในการใช้งานสมัยใหม่ สิ่งนี้มักหมายถึง backpropagation ร่วมกับ gradient descent หรือออปติไมเซอร์ที่เกี่ยวข้อง แนวทางนี้อาศัยแบบจำลองและฟังก์ชันความสูญเสียที่หาอนุพันธ์ได้ หรืออย่างน้อยก็หาอนุพันธ์ได้เป็นช่วง ๆ มากพอให้วิธีเชิงกราเดียนต์ทำงานได้

สรุปแบบสั้นคือ:

predictionlossgradientsparameter update\text{prediction} \to \text{loss} \to \text{gradients} \to \text{parameter update}

เมื่อผ่านตัวอย่างจำนวนมาก น้ำหนักจะค่อย ๆ ปรับไปในทิศทางของรูปแบบที่ช่วยให้งานสำเร็จได้ดีขึ้น

ข้อผิดพลาดที่พบบ่อย

คิดว่ามีเลเยอร์มากขึ้นย่อมให้ผลลัพธ์ดีกว่าเสมอ

ไม่จริง เลเยอร์ที่มากขึ้นเพิ่มความสามารถของแบบจำลอง แต่ก็ทำให้การหาค่าที่เหมาะสม ความต้องการข้อมูล และการควบคุม overfitting ยากขึ้นด้วย

ลืมไปว่าทำไมความไม่เชิงเส้นจึงสำคัญ

ถ้าทุกเลเยอร์เป็นเชิงเส้นทั้งหมด โครงข่ายทั้งระบบก็ยังเป็นเพียงการแปลงเชิงเส้นครั้งเดียว ฟังก์ชันกระตุ้นคือสิ่งที่ทำให้โครงข่ายลึกสามารถแทนความสัมพันธ์ที่ซับซ้อนกว่าได้

มองว่าเอาต์พุตคือความแน่นอนที่รับประกันได้

เอาต์พุตของโครงข่ายจะมีประโยชน์ได้มากน้อยเพียงใด ขึ้นอยู่กับแบบจำลอง ข้อมูล และการตั้งค่าการฝึกที่อยู่เบื้องหลัง คะแนนสูงไม่ได้เท่ากับการพิสูจน์

มองข้ามรูปแบบการแทนอินพุต

โครงข่ายไม่ได้เรียนรู้จากความหมายดิบ ๆ แต่มันเรียนรู้จากการแทนค่าเชิงตัวเลขที่ได้รับ หากอินพุตไม่ดี ไม่สม่ำเสมอ หรือขาดโครงสร้างสำคัญ ประสิทธิภาพของโครงข่ายก็มักจะแย่ลง

โครงข่ายประสาทเทียมถูกใช้เมื่อใด

โครงข่ายประสาทเทียมถูกใช้เมื่อความสัมพันธ์ระหว่างอินพุตกับเอาต์พุตซับซ้อนมากพอที่กฎซึ่งเขียนด้วยมือจะเปราะบางหรือไม่ครอบคลุม ตัวอย่างที่พบบ่อย ได้แก่ การรู้จำภาพ เสียงพูด แบบจำลองภาษา ระบบแนะนำ และงานพยากรณ์บางประเภท

อย่างไรก็ตาม มันไม่ได้เป็นตัวเลือกที่ดีที่สุดโดยอัตโนมัติสำหรับทุกปัญหา สำหรับชุดข้อมูลขนาดเล็กและมีโครงสร้าง แบบจำลองที่ง่ายกว่าสามารถฝึกได้ง่ายกว่า ตีความได้ง่ายกว่า และบางครั้งก็มีประสิทธิภาพพอ ๆ กัน

แบบจำลองความคิดที่ดี

ให้นึกถึงโครงข่ายประสาทเทียมว่าเป็นฟังก์ชันหลายชั้นที่มีปุ่มปรับได้จำนวนมาก forward pass จะเปลี่ยนอินพุตหนึ่งค่าให้เป็นเอาต์พุตหนึ่งค่า ส่วนการฝึกจะเปลี่ยนปุ่มเหล่านั้นเพื่อให้เอาต์พุตในอนาคตมีประโยชน์ต่อโจทย์มากขึ้น

นี่คือวิธีที่ชัดที่สุดในการเก็บสองแนวคิดนี้ไว้พร้อมกัน: โครงข่ายประสาทเทียมคำนวณด้วยการประกอบฟังก์ชัน และมันเรียนรู้ด้วยการปรับพารามิเตอร์เพื่อลดความผิดพลาด

ลองทำเวอร์ชันของคุณเอง

ใช้โครงข่ายเล็กตัวเดิม แต่เปลี่ยนอินพุตจาก (2,1)(2, 1) เป็น (0,3)(0, 3) แล้วคำนวณ z1z_1, z2z_2, h1h_1, h2h_2 และคะแนนสุดท้าย ss ใหม่ จากนั้นลองเปลี่ยนน้ำหนักหนึ่งตัวแล้วดูว่าส่วนใดของเอาต์พุตเปลี่ยนไป แบบฝึกหัดเล็ก ๆ นี้จะทำให้แนวคิดเรื่อง forward pass เป็นรูปธรรมกว่าการท่องจำคำนิยามเพียงอย่างเดียว

ต้องการความช่วยเหลือในการแก้โจทย์?

อัปโหลดคำถามของคุณแล้วรับคำตอบแบบทีละขั้นตอนที่ผ่านการตรวจสอบในไม่กี่วินาที

เปิด GPAI Solver →