Hack Neural Network เพียงใช้ Code แค่ 10 บรรทัด
สวัสดีทุกคน! หวังว่าคุณจะทำได้ดี. มาดำดิ่งกันเลย
การ Hack Neural Network คืออะไร
การแฮ็กNeural NetworkNeural Networks ถูกใช้งานมากขึ้นในระบบความปลอดภัยและการกลั่นกรองต่างๆ ในสาขาต่างๆ มันสำคัญมากที่พวกเขาจะต้องรักษาความสมบูรณ์ในการโจมตีประเภทต่างๆ ในบทความนี้ ฉันจะอธิบายวิธีที่เราสามารถแก้ไขรูปภาพ (โดยไม่เปลี่ยนแปลงมากเกินไป) เพื่อบังคับให้ Neural Network จัดประเภทรูปภาพผิด (ด้วยความมั่นใจในระดับสูงเช่นกัน)
ในบทความนี้ ฉันจะแฮ็คNeural Network ที่เป็นตัวเลข cla sifier ของ MNIST ให้เราถ่ายภาพตัวเลข 0 (ตามที่ระบุด้านล่าง) เนื่องจากแบบจำลองที่ฉันสร้างมีความแม่นยำประมาณ 96% มันจะจัดประเภทรูปภาพนี้อย่างถูกต้องเป็น 0 ตอนนี้ ฉันต้องการแก้ไขรูปภาพนี้เป็น 0 โดยเพิ่มสัญญาณรบกวนเชิงกลยุทธ์ (สิ่งนี้ได้มาจากการไล่ระดับสีอย่างง่าย) เพื่อให้โมเดล MNIST จำแนกเป็นภาพที่ 8 และรูปภาพไม่ได้แก้ไขมากเกินไป ดังนั้นสำหรับมนุษย์อย่างเราแล้ว เรายังคงมองเห็นภาพได้อย่างชัดเจนว่าเป็นภาพหมายเลข 0 แต่โมเดลคิดว่าภาพประกอบด้วยหมายเลข 8 ที่มีความน่าจะเป็นสูงมาก
ภาพด้านบนได้รับการยอมรับโดยตัวแยกประเภท MNIST เป็นหมายเลข 0 ที่มีความแน่นอน 0.99% ด้านล่างนี้เป็นภาพที่แก้ไขซึ่งได้รับการยอมรับว่าเป็นหมายเลข 8 โดย NN ด้วยความแน่นอน 0.996%
ในบทความนี้ ผมจะอธิบายว่าผมสามารถปรับเปลี่ยนภาพแรกเป็นภาพที่ 2 ได้อย่างไร กล่าวคือ ผมหลอกเครือข่ายประสาทให้จำแนกภาพที่เห็นได้ชัด 0 เป็น 8 ได้อย่างไร (ด้วยความมั่นใจในระดับสูงมาก) .
ขั้นตอนการแฮ็ก MNIST Classifier:
แบบจำลองที่ถูกแฮ็กได้รับการฝึกฝนขึ้นอยู่กับลักษณนาม MNIST ที่พบในนี้บทความ ตอนนี้เรามีโมเดลที่ผ่านการฝึกอบรมพร้อมที่จะถูกแฮ็กแล้ว มาเริ่มการแฮ็กกัน
เราจะใช้การไล่ระดับสีอย่างง่ายเพื่อคำนวณสัญญาณรบกวนที่แน่นอนซึ่งจะต้องเพิ่มลงในภาพต้นฉบับเพื่อตัด NN ทิ้งไป อันดับแรก ฉันจะสร้างฟังก์ชันการสูญเสียเพื่อให้การไล่ระดับการไล่ระดับสีตามมา ฟังก์ชั่นการสูญเสียเป็นส่วนที่สำคัญที่สุดของระบบที่เกี่ยวข้องกับการไล่ระดับสี การไล่ระดับสีแบบไล่ระดับเป็นเพียงวิธีการลดฟังก์ชันการสูญเสีย ดังนั้น เราจำเป็นต้องสร้างฟังก์ชันการสูญเสียที่สะท้อนถึงเป้าหมายของเรา กล่าวคือ คาดการณ์ความน่าจะเป็นที่ 8 สำหรับรูปภาพสูงสุด และรักษาความแตกต่างระหว่างรูปภาพต้นฉบับและรูปภาพที่แก้ไขให้น้อยที่สุด และนี่คือหน้าตาของฟังก์ชันการสูญเสีย
def findloss (diff, pred): l1=torch.mean(torch.square(diff)) l2=pred**(-1)
fl=(l1+l2)**0.5
return fl
l1 หมายถึงการเบี่ยงเบน (ความแตกต่างหรือสัญญาณรบกวน) ระหว่างภาพที่แก้ไขและต้นฉบับ l2 แทนค่าผกผันของความน่าจะเป็นที่ NN จำแนกภาพที่แก้ไขแล้วเป็นตัวเลข 8 ดังนั้นการลดรากที่สองของผลรวมของ l1 และ l2 ให้เหลือน้อยที่สุด จะนำไปสู่การลดทั้ง l1 และ l2 ดังนั้นจึงลดสัญญาณรบกวนและเพิ่มความน่าจะเป็นสูงสุดที่ภาพที่แก้ไขจะถูกจัดประเภทโดย NN เป็น 8 พร้อมกัน .
ตอนนี้ ให้เราใช้การไล่ระดับการไล่ระดับสีเพื่อปรับเปลี่ยนสัญญาณรบกวนเพื่อลดฟังก์ชันการสูญเสียที่กำหนดไว้ข้างต้นให้เหลือน้อยที่สุด (วิธีนี้จะบรรลุเป้าหมายที่เราตั้งไว้เพื่อแฮ็ก Neural Network โดยอัตโนมัติ) ด้านล่างเป็นรหัสสำหรับสิ่งนั้น
learning_rate=0.0005 num_descents=2000000 #number of times gradient descent is employed img=img.cuda() #generate random noise to finetune using gradient descent diff=torch.rand(784).cuda().requires_grad_()for i in range(num_descents): #get the modified image imagef=img+diff pred=torch.exp(model(imagef.reshape([1,784])))[0][8] totalloss=findloss(diff,pred) if i%10000 ==0: print('Loss and prediction by the model after '+str(i)+' steps of gradient descent are '+str(totalloss.item()),str(pred.item())) #find gradients of totalt wrt yarray. totalloss.backward() gradients=diff.grad #torch.clip(gradients,max=100.0) with torch.no_grad(): diff[1:]=diff[1:]-learning_rate*gradients[1:] diff.grad.data.zero_()
The complete code
สามารถพบได้ในของฉันrepo ผลลัพธ์ที่ได้จากวิธีนี้ได้เขียนไว้ข้างต้นแล้ว
นี่คือวิธีที่การไล่ระดับแบบไล่ระดับง่าย ๆ สามารถหลอกตัวแยกประเภท MNIST ได้
ขอบคุณที่อ่านผ่านบทความ นี่เป็นอีกบทความหนึ่งที่แสดงให้เห็นว่าการไล่ระดับสีอย่างง่ายมีประสิทธิภาพเพียงใด
Credit : https://aaftabv3.medium.com/hack-a-neural-network-in-just-10-lines-of-code-ecd2192930a1