---
# System prepended metadata

title: Decoupling Direction and Norm for Efficient Gradient-Based L2 Adversarial Attacks and Defenses
tags: [attack, adversarial, evasion attack, paper, DDN, boundary attack]

---

# Decoupling Direction and Norm for Efficient Gradient-Based L2 Adversarial Attacks and Defenses
###### tags: `paper` `attack` `evasion attack` `boundary attack` `adversarial` `DDN`

## source
- [github code](https://github.com/luizgh/avc_nips_2018)
- [arxiv](https://arxiv.org/abs/1811.09600)
    - 論文中未提及黑箱作法

## Black-box code 理解

- 用各種代理模型 x 各種攻擊 硬砸的結果而已
- 你問怎麼砸?
- boundary attack + binary search
- 對於每個組合(第n號代理模型、第m號攻擊方法)做：
    1. 生出一個 adversarial image (以下簡稱adv_img)
    2. 算出 delta = adv_img - original image (以下簡稱image)
    3. 開始 bound_search
        1. 利用 delta 走第一步，看狀況等比例(alpha=1)放大/縮小delta
        2. 繼續第一步的方向(放大或縮小)等比例(alpha=1)放大/縮小，如方向改變即return，回傳 lower 跟 upper 兩邊界及found(=true)
        3. 如走完還是沒找到邊界，就回傳lower(=0)，upper(=`np.round(delta / delta.max() * 255)`),found(=false)
        * 小結就是，以delta為準，不斷放大直到找到邊界or不斷縮小找到邊界
    4. 開始 binary_search
        1. 對剛剛得出的邊界做step(=10)次的二分搜
        2. 若找到則回傳upper(可以剛好跨過去的)及found(=true)
        3. 否則回傳upper及found(=false)

## DDN演算法理解
- ![](https://i.imgur.com/Qd6v7ie.png)
- $x$ 已做normalize(0~1)，$K=100、300、1000$，$\alpha=1$，$\gamma=0.05$
- l2: 若為目標攻擊是為降低，無目標攻擊是為增加使判斷錯誤
- l3-5:算出loss(cross entropy)並根據$\alpha$權重*g方向之單位向量
- l6:擾動$\delta$往g前進
- l7-l11:若擾動太大則倍率$\gamma$調降，vice versa。
- l12:將新的擾動方向*$\epsilon$，加給圖片
- l13:確保圖片依然在[0,1]間，超過設為1,低於設為0

- ![](https://i.imgur.com/OHx98Fh.png)
    - 當$\epsilon_k$剛好跟決策邊界相切時，算出來的g會跟$\delta_{k+1}$平行，也就會與$\delta_{k}平行$(都平行啦)，所以會投影在同一條線上，造成來回震盪(不是啊，超過或縮小後不是就不會再相切了ㄇ，怎震盪?)會使結果更接近最佳。

## related work
- C&W 需要找C(9 search steps on C)