SVM หรือ support vector machine คืออัลกอริทึมสำหรับการจำแนกประเภทที่เลือกเส้นแบ่งระหว่างคลาสให้มี margin กว้างที่สุดเท่าที่เป็นไปได้ หากคุณกำลังค้นหาว่า SVM คืออะไร แก่นสำคัญก็คือ ไม่ใช่แค่แยกกลุ่มออกจากกัน แต่ต้องเว้นช่องว่างที่กว้างและเชื่อถือได้ที่สุดระหว่างกลุ่มด้วย

จุดที่อยู่ใกล้เส้นแบ่งนั้นมากที่สุดเรียกว่า support vectors จุดเหล่านี้สำคัญที่สุด เพราะเป็นตัวกำหนดว่าเส้นแบ่งจะวางอยู่ตรงไหนได้

ทำไม Margin จึงสำคัญ

ลองนึกภาพว่ามีกลุ่มจุดสองกลุ่ม กลุ่มหนึ่งมาจากคลาส A และอีกกลุ่มมาจากคลาส B อาจมีเส้นหลายเส้นที่แยกสองกลุ่มนี้ออกจากกันได้ แต่ SVM จะเลือกเส้นที่เหลือพื้นที่กันชนมากที่สุดทั้งสองด้าน

margin ที่กว้างกว่ามักทำให้ตัวจำแนกไวต่อการเปลี่ยนแปลงเล็กน้อยในข้อมูลฝึกน้อยลง นี่ไม่ใช่การรับประกันว่าจะทำงานได้ดีกว่าเสมอในโลกจริง แต่เป็นสัญชาตญาณหลักที่อยู่เบื้องหลัง SVM

เส้นแบ่งการตัดสินใจของ SVM มีหน้าตาอย่างไร

ใน SVM เชิงเส้น เส้นแบ่งการตัดสินใจคือไฮเปอร์เพลน:

wx+b=0w \cdot x + b = 0

ตัวจำแนกจะทำนายเป็นคลาสหนึ่งเมื่อ wx+b>0w \cdot x + b > 0 และเป็นอีกคลาสเมื่อ wx+b<0w \cdot x + b < 0

ในการสเกลแบบ max-margin มาตรฐานสำหรับข้อมูลที่แยกได้สมบูรณ์ SVM จะเลือก ww และ bb ให้เป็นไปตามเงื่อนไขว่า

yi(wxi+b)1y_i(w \cdot x_i + b) \ge 1

สำหรับทุกจุดฝึก พร้อมกับทำให้ margin กว้างที่สุดเท่าที่จะทำได้ ในการสเกลนี้ ความกว้างของ margin ทั้งหมดคือ

2w.\frac{2}{\|w\|}.

แนวคิดเชิงปฏิบัติที่สำคัญนั้นง่ายกว่าสูตรมาก: ค่า w\|w\| ที่เล็กลงหมายถึง margin ที่กว้างขึ้นในกรอบการทำ normalization แบบนี้

ตัวอย่างคำนวณ: SVM หนึ่งมิติ

ตัวอย่างหนึ่งมิติช่วยให้เห็นแนวคิดเรื่อง margin ได้ง่ายมาก

สมมติว่าคลาสลบมีจุดที่ x=0x=0 และ x=1x=1 ส่วนคลาสบวกมีจุดที่ x=4x=4 และ x=5x=5

threshold ใด ๆ ระหว่าง 11 กับ 44 สามารถแยกคลาสได้ ตัวอย่างเช่น x=2x=2 ใช้ได้ และ x=3x=3 ก็ใช้ได้ แต่ตัวเลือกเหล่านี้ไม่ได้ให้พื้นที่กันชนเท่ากันทั้งสองด้าน

ในกรณีหนึ่งมิติที่แยกได้สมบูรณ์นี้ SVM จะเลือกจุดกึ่งกลางระหว่างจุดต่างคลาสที่อยู่ใกล้กันที่สุด ดังนั้น threshold สำหรับการตัดสินใจคือ

x=2.5.x = 2.5.

จุดคลาสลบที่ใกล้ที่สุดคือ x=1x=1 และจุดคลาสบวกที่ใกล้ที่สุดคือ x=4x=4 จุดสองจุดนี้คือ support vectors แต่ละจุดอยู่ห่างจากเส้นแบ่ง 1.51.5 หน่วย ดังนั้น margin จึงสมดุลและกว้างที่สุดเท่าที่เป็นไปได้

คุณสามารถเขียนตัวจำแนกในกรณีนี้ได้ว่า "ทำนายเป็นบวกเมื่อ x>2.5x > 2.5 และเป็นลบเมื่อ x<2.5x < 2.5" กรณีง่าย ๆ นี้สะท้อนแนวคิดจริงของ SVM: เส้นแบ่งถูกกำหนดโดยกรณีใกล้เคียงที่แยกยากที่สุด ไม่ใช่โดยจุดที่อยู่ไกลและจำแนกได้ง่ายอยู่แล้ว

Hard-Margin กับ Soft-Margin SVM

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

นี่จึงเป็นเหตุผลว่าทำไม SVM ที่ใช้จริงจำนวนมากจึงใช้ soft margin แทน soft-margin SVM ยังคงชอบ margin ที่กว้าง แต่ยอมให้บางจุดตกอยู่ภายใน margin หรือแม้แต่อยู่ผิดด้านของเส้นแบ่งได้ โดยมีค่าปรับ

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

เมื่อไร Kernel SVM จึงช่วยได้

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

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

ข้อผิดพลาดที่พบบ่อยเกี่ยวกับ SVM

คิดว่าทุกจุดสำคัญเท่ากัน

ใน SVM จุดที่อยู่ใกล้เส้นแบ่งที่สุดสำคัญมากที่สุด จุดที่อยู่ไกลจากเส้นแบ่งมักมีผลต่อเส้นแบ่งสุดท้ายน้อยมาก

ลืมเงื่อนไขของ Hard Margin

การแยกเชิงเส้นได้อย่างสมบูรณ์เป็นเงื่อนไขจริง ไม่ใช่สมมติฐานตั้งต้น ถ้าคลาสซ้อนทับกัน คุณต้องใช้ soft margin หรือโมเดลแบบอื่น

มองข้ามการสเกลคุณลักษณะ

SVM พึ่งพาระยะทางและ dot product ถ้าคุณลักษณะหนึ่งวัดในสเกลที่ใหญ่กว่าอีกคุณลักษณะมาก มันอาจครอบงำเส้นแบ่งได้ เว้นแต่คุณจะสเกลอินพุตก่อน

คิดว่า Kernel ดีกว่าเสมอโดยอัตโนมัติ

เส้นแบ่งที่ยืดหยุ่นกว่าสามารถฟิตข้อมูลฝึกได้ดีกว่า แต่ไม่ได้หมายความโดยอัตโนมัติว่าจะ generalize ได้ดีกว่า

SVM ถูกใช้งานที่ไหน

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

นอกจากนี้ยังมีการใช้กับงานถดถอยในวิธีที่เกี่ยวข้องกันซึ่งเรียกว่า support vector regression แต่กรณีนั้นเป็นการตั้งค่าที่ต่างออกไปจากภาพการจำแนกแบบทวิภาคที่อธิบายในหน้านี้

ลองทำโจทย์ SVM ที่คล้ายกัน

นำจุดหนึ่งมิติจากตัวอย่างเดิม แล้วเพิ่มจุดคลาสลบใหม่ที่ x=2.2x=2.2 ตอนนี้ช่องว่างกว้าง ๆ ที่สะอาดหายไปแล้ว ลองถามดูว่าจะเกิดอะไรขึ้นถ้าคุณยังยืนยันใช้ hard margin และจะเปลี่ยนอย่างไรถ้าคุณยอมให้ใช้ soft margin การเปรียบเทียบนี้มักเป็นวิธีที่เร็วที่สุดในการทำให้เข้าใจ SVM อย่างแท้จริง

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

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

เปิด GPAI Solver →