การสร้าง adversarial example

จากการนิยาม loss function จะเห็นว่าแบบจำลอง deep learning จะมีประสิทธิภาพในการทำนายผลของ input ได้ดีถ้า loss มีค่าน้อย เมื่อ เป็น label ของคลาสที่ถูกต้องของ ดังนั้น หากเราต้องการก่อกวนแบบจำลองเพื่อให้มีประสิทธิภาพในการทำนายต่ำ เราก็สามารถทำได้โดยการปรับปรุง input เพื่อให้ loss มีค่ามากที่สุด นั่นคือ เราต้องการหา input ที่เป็นคำตอบของ

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

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

การก่อกวนที่ถูกนำมาวิเคราะห์เป็นหลักคือการก่อกวนที่อยู่ในรูป

เมื่อ แทน norm หรือขนาดของ ซึ่ง norm รูปแบบหนึ่งที่น่าสนใจคือ -norm ซึ่งมีนิยามดังนี้

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

เมื่อเรานิยามการหา adversarial example เป็นปัญหา optimization ได้ชัดเจนแล้ว เราสามารถแก้ปัญหานี้โดยใช้อัลกอริทึม gradient descent ได้เช่นกัน โดยทำการคำนวณหาเกรเดียนต์ของ loss เมื่อเทียบกับ และค่อย ๆ ปรับ เพื่อให้ loss เพิ่มขึ้นตามต้องการ โดยเมื่อใดก็ตามที่ พ้นขอบเขตที่กำหนด () เราทำการ project กลับมาให้อยู่ในขอบเขตของ โดยการ clip ค่าที่เกิน ให้อยู่ที่ และ clip ค่าที่ต่ำกว่า ให้อยู่ที่ เราเรียกวิธีการนี้ว่า projected gradient descent (PGD) นอกจากนี้ หากค่าของ input ในมิติใดมีขอบเขตจำกัด (เช่น ) เราต้องระวังอย่าให้การก่อกวนนี้พาเราออกไปนอกขอบเขตด้วย (เราสามารถป้องกันเหตุการณ์ดังกล่าวโดยใช้การ clip เช่นเดียวกัน)

ใน Adversarial Robustness - Theory and Practice มีตัวอย่างการทดสอบการก่อกวนแบบจำลอง deep learning โดยใช้แบบจำลอง ResNet50 ที่ถูกเทรนมาสำหรับจำแนกรูปภาพออกเป็น 1000 คลาส เมื่อเราสั่งให้ทำนายรูปหมูด้านล่างนี้ แบบจำลองสามารถทำนายว่าเป็นรูปหมูได้ด้วยความน่าจะเป็น 0.996

เมื่อเราทำการหาการก่อกวน โดยกำหนด และทำ projected gradient descent ด้วย learning rate 0.1 เป็นจำนวน 30 รอบ เราได้รูปที่ถูกก่อกวนเป็นดังนี้

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

เมื่อเรานำ นี้มาเพิ่มความเข้มขึ้น 50 เท่า จะได้เป็นรูปด้านล่าง

จากตัวอย่างนี้จะเห็นว่า เมื่อ input ที่เราจะให้แบบจำลองทำการตัดสินใจถูกปนเปื้อนด้วย noise ที่ดูเหมือนเกิดจากการสุ่ม แม้ว่าการเปลี่ยนแปลงของรูปนั้นน้อยมากจนสายตามนุษย์ไม่สามารถแยกออกได้ ก็ยังสามารถทำให้แบบจำลองทาง machine learning นั้นให้ผลผิดจากเดิมไปอย่างมาก ซึ่งแสดงถึง ความเปราะบาง ของแบบจำลอง ซึ่งในบางสถานการณ์อาจนำมาสู่ผลร้ายได้

References

  1. Z. Kolter, A. Madry. Adversarial Robustness - Theory and Practice

Prev: แบบจำลอง deep learning พอสังเขป

Next: การโจมตีแบบกำหนดเป้าหมาย