對抗樣本(adversarial example)
/ ad-ver-SAIR-ee-ul EG-zam-pul /
對抗樣本,是一種被極其輕微地「推」了一下的輸入,目的是讓機器學習模型嚴重出錯——而人眼卻看不出任何異樣。想像一張熊貓的照片。撒上一層精心挑選、肉眼無法察覺的微弱雜點,一個最先進的影像分類器可能會突然信心十足地宣布:這是一隻長臂猿。可在你看來,這張圖還是一張不折不扣的熊貓。那點微小的擾動,把模型推過了一條看不見的界線。
為什麼會這樣?現代模型把所有可能輸入的空間,切割成一塊塊邊界尖銳、形狀古怪的區域。這條決策邊界往往比任何人預想的都更貼近尋常的輸入,於是朝著恰好對的方向邁一小步,就跨了過去。關鍵在於:這種擾動並非隨機——攻擊者(或研究者)順著模型自身的梯度,精確算出該改動哪些像素,用的正是模型當初學習時所用的那套數學。這是把模型的敏感性反過來對付它自己。
對抗樣本之所以重要,是因為它揭示了一件事:在測試集上準確率很高,並不代表模型學到了我們以為它學到的東西。自動駕駛汽車的視覺系統、惡意軟體過濾器、人臉辨識閘機,都可能被精心設計、看似無害的輸入騙過。它還戳破了一個讓人安心的迷思:以為一個又自信又準確的模型,就一定是穩健的。這其實是兩種不同的性質,模型可以有前者而沒有後者。
研究者在一塊真實的「停車」(STOP)路牌上貼了幾張小小的黑白貼紙。在人類司機眼裡它顯然還是停車牌,可一個訓練好的路牌辨識模型卻把它讀成了「限速45英里」——而且在超過八成的拍攝角度下都是如此。
一次物理世界中的對抗攻擊:人類會忽略的貼紙,卻能讓視覺模型翻盤改判。
真正令人不安的,不是某一個模型有bug。對抗樣本常常會「遷移」:針對某個模型炮製的攻擊,往往也能騙過另一個用不同資料訓練、結構完全不同的模型。這說明它們利用的是這類模型「切分世界」方式中某種根深蒂固的東西,而非任何單一網路裡一處可以修掉的筆誤。