Tất cả các câu trả lời ở đây đều tuyệt vời, nhưng, vì một số lý do, cho đến nay, không có gì được nói về lý do tại sao hiệu ứng này không làm bạn ngạc nhiên . Tôi sẽ điền vào chỗ trống.
Hãy để tôi bắt đầu với một yêu cầu hoàn toàn cần thiết để làm việc này: kẻ tấn công phải biết kiến trúc mạng thần kinh (số lớp, kích thước của mỗi lớp, v.v.). Hơn nữa, trong tất cả các trường hợp mà tôi đã tự kiểm tra, kẻ tấn công biết ảnh chụp nhanh của mô hình được sử dụng trong sản xuất, tức là tất cả các trọng lượng. Nói cách khác, "mã nguồn" của mạng không phải là một bí mật.
Bạn không thể đánh lừa một mạng lưới thần kinh nếu bạn coi nó như một hộp đen. Và bạn không thể sử dụng lại hình ảnh đánh lừa tương tự cho các mạng khác nhau. Trên thực tế, bạn phải tự "huấn luyện" mạng đích, và ở đây bằng cách đào tạo tôi có nghĩa là chạy về phía trước và backprop, nhưng được chế tạo đặc biệt cho mục đích khác.
Tại sao nó hoạt động cả?
Bây giờ, đây là trực giác. Hình ảnh có chiều rất cao: ngay cả không gian của hình ảnh màu 32x32 nhỏ cũng có 3 * 32 * 32 = 3072
kích thước. Nhưng tập dữ liệu huấn luyện tương đối nhỏ và chứa hình ảnh thật, tất cả đều có cấu trúc và thuộc tính thống kê đẹp (ví dụ độ mịn của màu). Vì vậy, tập dữ liệu huấn luyện được đặt trên một đa tạp nhỏ của không gian hình ảnh khổng lồ này.
Các mạng chập hoạt động rất tốt trên đa tạp này, nhưng về cơ bản, không biết gì về phần còn lại của không gian. Việc phân loại các điểm bên ngoài đa tạp chỉ là phép ngoại suy tuyến tính dựa trên các điểm bên trong đa tạp. Không có gì ngạc nhiên khi một số điểm cụ thể được ngoại suy không chính xác. Kẻ tấn công chỉ cần một cách để điều hướng đến những điểm gần nhất.
Thí dụ
Hãy để tôi cho bạn một ví dụ cụ thể làm thế nào để đánh lừa một mạng lưới thần kinh. Để làm cho nó nhỏ gọn, tôi sẽ sử dụng một mạng hồi quy logistic rất đơn giản với một phi tuyến (sigmoid). Nó nhận một đầu vào 10 chiều x
, tính một số duy nhất p=sigmoid(W.dot(x))
, đó là xác suất của lớp 1 (so với lớp 0).
Giả sử bạn biết W=(-1, -1, 1, -1, 1, -1, 1, 1, -1, 1)
và bắt đầu với một đầu vào x=(2, -1, 3, -2, 2, 2, 1, -4, 5, 1)
. Một vượt qua chuyển tiếp cho sigmoid(W.dot(x))=0.0474
hoặc xác suất 95% x
là ví dụ lớp 0.
Chúng tôi muốn tìm một ví dụ khác, y
rất gần với x
nhưng được mạng phân loại là 1. Lưu ý x
là 10 chiều, vì vậy chúng tôi có quyền tự do nâng cấp 10 giá trị, rất nhiều.
Vì W[0]=-1
là tiêu cực, tốt hơn là nên có một khoản nhỏ y[0]
để đóng góp tổng số y[0]*W[0]
nhỏ. Do đó, hãy thực hiện y[0]=x[0]-0.5=1.5
. Tương tự như vậy, W[2]=1
là tích cực, vì vậy tốt hơn là tăng y[2]
để làm cho y[2]*W[2]
lớn hơn : y[2]=x[2]+0.5=3.5
. Và như vậy.
Kết quả là y=(1.5, -1.5, 3.5, -2.5, 2.5, 1.5, 1.5, -3.5, 4.5, 1.5)
, và sigmoid(W.dot(y))=0.88
. Với thay đổi này, chúng tôi đã cải thiện xác suất lớp 1 từ 5% lên 88%!
Sự khái quát
Nếu bạn nhìn kỹ vào ví dụ trước, bạn sẽ nhận thấy rằng tôi biết chính xác cách điều chỉnh x
để di chuyển nó đến lớp mục tiêu, bởi vì tôi biết độ dốc mạng. Những gì tôi đã làm thực sự là một backpropagation , nhưng liên quan đến dữ liệu, thay vì trọng lượng.
Nói chung, kẻ tấn công bắt đầu với phân phối mục tiêu (0, 0, ..., 1, 0, ..., 0)
(không ở mọi nơi, ngoại trừ lớp mà nó muốn đạt được), sao lưu dữ liệu vào dữ liệu và thực hiện một bước di chuyển nhỏ theo hướng đó. Trạng thái mạng không được cập nhật.
Bây giờ, rõ ràng đó là một tính năng phổ biến của các mạng chuyển tiếp xử lý một đa tạp dữ liệu nhỏ, bất kể nó sâu hay bản chất của dữ liệu (hình ảnh, âm thanh, video hoặc văn bản).
Bình thuốc
Cách đơn giản nhất để ngăn hệ thống khỏi bị lừa là sử dụng một nhóm các mạng thần kinh, tức là một hệ thống tổng hợp phiếu bầu của một số mạng cho mỗi yêu cầu. Việc sao lưu lại đồng thời khó khăn hơn nhiều đối với một số mạng. Kẻ tấn công có thể cố gắng thực hiện tuần tự, mỗi mạng một lần, nhưng bản cập nhật cho một mạng có thể dễ dàng gây rối với kết quả thu được cho một mạng khác. Càng nhiều mạng được sử dụng, một cuộc tấn công càng trở nên phức tạp.
Một khả năng khác là làm mịn đầu vào trước khi truyền nó vào mạng.
Sử dụng tích cực cùng một ý tưởng
Bạn không nên nghĩ rằng backpropagation cho hình ảnh chỉ có các ứng dụng tiêu cực. Một kỹ thuật rất giống nhau, được gọi là deconvolution , được sử dụng để trực quan hóa và hiểu rõ hơn những gì tế bào thần kinh đã học.
Kỹ thuật này cho phép tổng hợp một hình ảnh khiến một nơ-ron cụ thể phát hỏa, về cơ bản nhìn thấy "những gì nơ-ron đang tìm kiếm", nói chung làm cho mạng lưới thần kinh tích chập dễ hiểu hơn.