Hack Neural Network เพียงใช้ Code แค่ 10 บรรทัด

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

Leave a Comment

Your email address will not be published.