IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 2022.05.17 - 2022.05.22 -> 正文阅读

[人工智能]2022.05.17 - 2022.05.22

2022-05-17

防御对抗攻击:Gotta Catch ’Em All: Using Honeypots to Catch Adversarial Attacks on Neural Networks (CCS '20: Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications SecurityOctober 2020)
论文背景
??深度神经网络 (DNN) 容易受到对抗性攻击(主要的攻击方法:FGSM,PGD,CW,Elastic Net,BPDA,SPSA 暂时没有深入调研攻击方式,后面会陆续给出几种攻击方式的原理),只要提供经过训练的模型,就可以修改输入从而产生错误输出。这些修改后的对抗样本能有效欺骗在不同训练数据不同子集上的训练模型。事实证明,对抗性攻击对部署在现实环境中的模型有效,例如无人驾驶汽车、面部识别和物体识别系统。针对对抗性攻击已有的防御方法主要有两种 “对抗训练(Adversarial training)” 和 “梯度掩蔽(Gradient masking)” 。
??对抗训练:在对抗性训练中,防御者通过将对抗性示例合并到训练数据集中来为模型接种疫苗以抵御给定的攻击。 这种 “对抗性” 训练过程降低了模型对特定已知攻击的敏感性。
??梯度掩蔽:防御者训练一个具有小梯度的模型,使得模型对输入空间上小的变化具有鲁棒性(例如对抗性干扰),“防御性蒸馏” 就是该方法的一个例子,首先正常训练得到模型一 F θ \mathcal{F}_\theta Fθ?,然后使用 F θ \mathcal{F}_\theta Fθ?输出的分类概率作为输入训练得到模型二 F θ ′ \mathcal{F}^\prime_\theta Fθ?, 用 F θ ′ \mathcal{F}^\prime_\theta Fθ?替代 F θ \mathcal{F}_\theta Fθ?达到梯度掩蔽的目的。
??但是 (1) “对抗训练” 可以使用新的攻击或对已知攻击的不同参数来攻破。(2) “梯度掩蔽" 可以从对抗样本的生成上小的调整可以克服这种防御。
整体框架
图一是
作者提出了一种新的 “陷门防御(trapdoor defense)”
a) 选择需要防御的目标标签。b) 为每个目标标签创建不同的陷门并将它们嵌入到模型中。 为每个嵌入式陷门部署模型并计算激活签名。 c) 可以访问模型的对手构建了一个对抗样本。 在运行时,模型将每个输入的神经元激活特征与陷门的特征进行比较。 因此,它识别出攻击并发出警报。

2022-05-18

Fast Gradient Sign Method(FGSM)方法

??作者Goodfellow 在其对对抗样本的线性解释的理论下提出了该方法。首先来看作者提出的对抗样本的线性解释
??因为样本输入特征(input feature)的精度有限(一般图像的每个像素是8bits, 样本中所有低于1/255的信息都会被丢弃),所以当样本 x x x 中每个元素值添加的扰动值 η \eta η 小于样本输入特征精度时,分类器无法将样本 x x x 和对抗样本 x ^ = x + η \hat{x}=x + \eta x^=x+η 区分开。对于分类器而言,如果 ? \epsilon ? 是一个足够小以至于被舍弃掉的值,那么只要 ∥ η ∥ ∞ < ? \|\eta\|_\infin < \epsilon η?<? ,分类器将认为 x x x x ^ \hat{x} x^ 属于同一个类。然后考虑权重向量 ω T \omega^T ωT 和对抗样本 x ^ \hat{x} x^ 的点积 ω T x ^ = ω T ( x + η ) = ω T x + ω T η \omega^T\hat{x} = \omega^T(x + \eta) = \omega^Tx + \omega^T\eta ωTx^=ωT(x+η)=ωTx+ωTη。那么扰动使得结果增加了 ω T η \omega^T\eta ωTη,作者为了最大化 ω T η \omega^T\eta ωTη , 让 η = s i g n ( ω ) \eta=sign(\omega) η=sign(ω)。假设权重向量 ω \omega ω n n n 个维度,且权重向量中元素的平均量值是 m m m,那么结果将增加 ? m n ( ? ω T η ≤ n m ? ) \epsilon mn(\Rightarrow \omega^T\eta \le nm\epsilon) ?mn(?ωTηnm?)。虽然 ∥ η ∥ ∞ \|\eta\|_\infin η?不会随着维度 n n n 的变化而变化,但是由 η \eta η 导致的增量 ? m n \epsilon mn ?mn 会随着维度 n n n 线性增长。那么对于一个高维度的问题,一个样本中大量维度的无限小的干扰加在一起就可以对输出造成很大的变化。所以对抗样本的线性解释表明,对线性模型而言,如果其输入样本有足够大的维度,那么线性模型也容易受到对抗样本的攻击。
??作者利用对抗样本的线性解释提出了一个快速产生对抗样本的方式,也即 Fast Gradient Sign Method(FGSM) 方法。假设模型的参数值为 θ \theta θ ,模型的输入是 x x x y y y 是模型对应的label值, J ( θ , x , y ) J(\theta,x,y) J(θ,x,y) 是训练神经网络的损失函数。对某个特定的模型参数 θ \theta θ 而言,FGSM方法将损失函数近似线性化,从而获得保证无穷范数限制的最优的扰动(即 ∥ η ∥ ∞ < ? \|\eta\|_\infin < \epsilon η?<? ),扰动值具体为:
η = ? s i g n ( ? x J ( θ , x , y ) ) \eta = \epsilon sign(\nabla_xJ(\theta,x,y)) η=?sign(?x?J(θ,x,y))
代码实现:在tensorflow的预训练模型实现对抗攻击

import tensorflow as tf
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.rcParams['figure.figsize'] = (8, 8)
mpl.rcParams['axes.grid'] = False

#让我们加载预训练的 MobileNetV2 模型和 ImageNet 类名。

pretrained_model = tf.keras.applications.MobileNetV2(include_top=True,
                                                     weights='imagenet')
pretrained_model.trainable = False

# ImageNet 的标签对象
decode_predictions = tf.keras.applications.mobilenet_v2.decode_predictions

# 将图像转化为 MobileNetV2 的输入格式
def preprocess(image):
  image = tf.cast(image, tf.float32)
  image = tf.image.resize(image, (224, 224))
  image = tf.keras.applications.mobilenet_v2.preprocess_input(image)
  image = image[None, ...]
  return image

# 根据预测结果提取图形标签
def get_imagenet_label(probs):
  return decode_predictions(probs, top=1)[0][0]


image_path = tf.keras.utils.get_file('YellowLabradorLooking_new.jpg', 'https://storage.googleapis.com/download.tensorflow.org/example_images/YellowLabradorLooking_new.jpg')
image_raw = tf.io.read_file(image_path)
image = tf.image.decode_image(image_raw)

image = preprocess(image)
image_probs = pretrained_model.predict(image)

plt.figure()
plt.imshow(image[0] * 0.5 + 0.5)  # To change [-1, 1] to [0,1]
_, image_class, class_confidence = get_imagenet_label(image_probs)
plt.title('{} : {:.2f}% Confidence'.format(image_class, class_confidence*100))
plt.show()

# 实现快速梯度符号法
# 第一步是创建扰动,用于扭曲原始图像,从而产生对抗性图像。如前所述,对于此任务,梯度是相对于图像进行的。
loss_object = tf.keras.losses.CategoricalCrossentropy()

def create_adversarial_pattern(input_image, input_label):
  with tf.GradientTape() as tape:
    tape.watch(input_image)
    prediction = pretrained_model(input_image)
    loss = loss_object(input_label, prediction)

  # Get the gradients of the loss w.r.t to the input image.
  gradient = tape.gradient(loss, input_image)
  # Get the sign of the gradients to create the perturbation
  signed_grad = tf.sign(gradient)
  return signed_grad

# 获取输入图片的标签的one-hot编码
labrador_retriever_index = np.argmax(image_probs)
label = tf.one_hot(labrador_retriever_index, image_probs.shape[-1])
label = tf.reshape(label, (1, image_probs.shape[-1]))

perturbations = create_adversarial_pattern(image, label)
plt.imshow(perturbations[0] * 0.5 + 0.5);  # To change [-1, 1] to [0,1]
plt.show()

# 让我们尝试不同的 epsilon 值并观察生成的图像。您会注意到,随着 epsilon 值的增加,欺骗网络变得更加容易。然而,这是一种权衡,导致扰动变得更加可识别。
def display_images(image, description):
  _, label, confidence = get_imagenet_label(pretrained_model.predict(image))
  plt.figure()
  plt.imshow(image[0]*0.5+0.5)
  plt.title('{} \n {} : {:.2f}% Confidence'.format(description,
                                                   label, confidence*100))
  plt.show()

epsilons = [0, 0.01, 0.1, 0.15]
descriptions = [('Epsilon = {:0.3f}'.format(eps) if eps else 'Input')
                for eps in epsilons]

for i, eps in enumerate(epsilons):
  adv_x = image + eps*perturbations
  adv_x = tf.clip_by_value(adv_x, -1, 1)
  display_images(adv_x, descriptions[i])




2022-05-19

Projected Gradient Descent (PGD/BIM)方法

??BIM 是Goodfellow和Kurakin等人对FGSM的扩展。一般有FGSM生成的对抗样本成功率与步长 ? \epsilon ? 密切相关, ? \epsilon ? 太大,整体图形效果不好, ? \epsilon ? 太小,又无法实现对抗攻击,于是,他们通过每一次迭代仅生成很小的扰动,经过多次迭代得到最后的结果,以此来拓展FGSM。定义如下
C l i p x , ? { x ′ } = m i n { 255 , x + ? , m a x { 0 , x ? ? , x ′ } } , \rm{Clip}_{x,\epsilon} \{x^\prime\} = \rm{min}\{255, x+\epsilon, \rm{max}\{0, x-\epsilon,x^\prime\}\}, Clipx,??{x}=min{255,x+?,max{0,x??,x}},
其中 C l i p x , ? { x ′ } \rm{Clip}_{x,\epsilon} \{x^\prime\} Clipx,??{x} 限制了生成的对抗样本扰动在图像的正常像素范围之类。采用下面的迭代步骤:

x 0 = x ? x n + 1 ′ = C l i p x , ? { x n + α s i g n ( ? x J ( θ , x , y ) ) } , x_0 = x\\ \vdots \\ x^\prime_{n+1} = \rm{Clip}_{x,\epsilon}\{x_n + \alpha\rm{sign}\it{(\nabla_xJ(\theta,x,y))}\}, x0?=x?xn+1?=Clipx,??{xn?+αsign(?x?J(θ,x,y))},
式子中的 α = 1 \alpha=1 α=1 则表示每一次迭代对每个像素的值更改了1
??FGSM等同于迭代一次的BIM,上述方法通过增加损失函数值的大小,迫使标签变化,没有明确指定往哪个标签偏移,主要是针对非目标攻击。

代码实现:使用pytorch训练一个手写字母识别模型(这部分代码省略)然后生成对抗样本

#adv_examples:需要生成对抗样本的目标样本;adv_target: 目标原始标签
#epochs表示迭代的次数,即公式中的 n;model:训练好的手写字母识别模型
def train_adv_bim(
        model: nn.Module, loss_fct: callable, adv_examples: torch.Tensor, adv_targets: torch.Tensor,
        epochs: int = 10, alpha: float = 1.0, clip_eps: float = (1 / 255) * 8
):
    return train_adv_examples(
        model, loss_fct, adv_examples, adv_targets,
        epochs=epochs, alpha=alpha, do_clip=True, clip_eps=clip_eps, minimize=False
    )


def train_adv_examples(
        model: nn.Module, loss_fct: callable, adv_examples: torch.Tensor, adv_targets: torch.Tensor,
        epochs: int = 10, alpha: float = 1.0, clip_eps: float = (1 / 255) * 8, do_clip: bool = False, minimize: bool = False
):
    model.eval()
    for e in range(epochs):
        adv_examples.requires_grad = True
        model.zero_grad()

        adv_out = model(adv_examples)
        loss = loss_fct(adv_out, adv_targets)
        loss.backward()

        adv_grad = adv_examples.grad
        adv_examples = adv_examples.detach()

        adv_sign_grad = adv_examples + alpha * adv_grad.sign()
        adv_examples = clip(adv_examples, adv_sign_grad, clip_eps)
    return adv_examples

def clip(x, x_, eps):
    mask = torch.ones_like(x)
    lower_clip = torch.max(torch.stack([mask * 0, x - eps, x_]), dim=0)[0]
    return torch.min(torch.stack([mask, x + eps, lower_clip]), dim=0)[0]


混淆矩阵:左图为原始图,右图为对应的对抗样本


原始图与对抗样本的对比:左图为原始图,右图为对抗样本

?? ?? ?? ?? ?? ??Carlini and Wagner Attack (CW) 方法

Elastic Net 方法

Backward Pass Differentiable Approximation (BPDA) 方法

Simultaneous Perturbation Stochastic Approximation (SPSA) 方法

2022-05-20

??理论上来说,trapdoor 是为特定的标签 y t y_t yt? 设计的特有的扰动,用 Δ \Delta Δ 表示,这样模型会把任何包含 Δ \Delta Δ 的输入 x x x 都分类为 y t y_t yt?, 也就是说 F θ ( x + Δ ) = y t , ? x \mathcal{F}_{\theta}(x + \Delta) = y_t, \forall x Fθ?(x+Δ)=yt?,?x。对于攻击者来说,如果其目标是 y t y_t yt?, 那么就需要找到一个扰动 ? \epsilon ? 使得 F θ ( x + ? ) = y t =? F θ ( x ) \mathcal{F}_{\theta}(x + \epsilon) = y_t\not=\mathcal{F}_{\theta}(x) Fθ?(x+?)=yt??=Fθ?(x), 进一步说,就是使得优化函数的损失最小,即 m i n J ( y t , F θ ( x + ? ) ) \rm{min} \it{J(y_t,\mathcal{F}_\theta(x+\epsilon))} minJ(yt?,Fθ?(x+?))。如果一个模型已经注入了 Δ \Delta Δ , 那么攻击者的优化函数会收敛到靠近 trapdoor 的损失函数的邻域内。下图是一个正常模型和trapdoored模型的损失函数的假设图,trapdoor 在A和B之间创造了一个大的局部最小值,攻击者的损失函数会收敛到这个局部最小值(这一部分的理论证明会在后面给出,下面先来看看具体的做法)

Defending a Single Label

Step 1: Embedding Trapdoors

??首先通过将陷门扰动注入随机选择的正常输入并将它们与标签 y t y_t yt? 关联而生成的新实例来扩充原始训练数据集,从而创建陷门训练数据集。新实例定义如下
x ′ = x + Δ : = I ( x , M , δ , k ) , x^\prime = x + \Delta := \mathcal{I}(x, \it{M}, \it{\delta}, k), x=x+Δ:=I(x,M,δ,k),
其中 x i , j , c ′ = ( 1 ? m i , j , c ) ? x i , j , c + m i , j , c ? δ i , j , c x^{\prime}_{i,j,c} = (1-m_{i,j,c}) \cdot x_{i,j,c} + m_{i,j,c}\cdot \delta_{i,j,c} xi,j,c?=(1?mi,j,c?)?xi,j,c?+mi,j,c??δi,j,c?, 这里 I ( ? ) \mathcal{I}(\cdot) I(?) 是注入函数, Δ = ( M , δ , k ) \Delta = (M,\delta,k) Δ=(M,δ,k) y t y_t yt? 的扰动。 δ , M \delta, M δ,M x x x 具有相同的形状, δ \delta δ 是扰动模式,是一个随机值矩阵。 M M M t r a p d o o r ?? m a s k trapdoor \; mask trapdoormask,指定了扰动应该覆盖原始图像的程度, M M M中的每一个元素 m i , j , c ∈ [ 0 , 1 ] m_{i,j,c} \in [0,1] mi,j,c?[0,1] 。文中设置 m i , j , c ∈ { 0 , k } m_{i,j,c} \in \{0, k\} mi,j,c?{0,k}, k < < 1 k << 1 k<<1 k k k 称为 m a s k ?? r a t i o mask \; ratio maskratio (覆盖比例) 。

Step 2: Training the Trapdoored Model

??trapdoor model的目标是对于干净的图片能达到很高的准确率,同时把任何包含 Δ = ( M , δ , k ) \Delta=(M,\delta,k) Δ=(M,δ,k) 的图片分类为 y t y_t yt?。这一优化目标和向神经网络注入一个后门的过程很相似。
m i n θ ?? J ( y , F θ ( x ) ) + λ ? J ( y t , F θ ( x + Δ ) ) ? x ∈ X ?? w h e r e ?? y =? y t , \underset{\theta}{\rm{min}}\; J(y,\mathcal{F}_{\theta}(x)) + \lambda\cdot J(y_t, \mathcal{F}_{\theta}(x+\Delta)) \\ \forall x \in \mathcal{X} \; \rm{where} \; \it{y} \not= y_t, θmin?J(y,Fθ?(x))+λ?J(yt?,Fθ?(x+Δ))?xXwherey?=yt?,
其中 y y y x x x 的真实标签。训练好一个trapdoor model 后,定义 Δ \Delta Δ “ t r a p d o o r ?? s i g n a t u r e ” “trapdoor\; signature” trapdoorsignature 表示如下
S Δ = E x ∈ X , y t =? F θ ( x ) g ( x + Δ ) , \mathcal{S}_{\Delta} = \mathbf{E}_{x\in \mathcal{X},y_t \not=\mathcal{F}_{\theta}(x)}g(x + \Delta), SΔ?=ExX,yt??=Fθ?(x)?g(x+Δ),
其中 E ( ? ) \mathbf{E}(\cdot) E(?) 表示期望, g ( ? ) g(\cdot) g(?) 是模型对输入 x x x 的特征表示,文中作者应用的是模型的最后一层 softmax 层的输入。 S Δ \mathcal{S}_{\Delta} SΔ? 的定义分析在后面会给出。下图简单的描述了 S Δ \mathcal{S}_{\Delta} SΔ? 的计算过程。

Step 3: Detecting Adversarial Attacks

??对于目标 y t y_t yt? 的对抗样本 x + ? x+\epsilon x+? 输入到训练好的trapdoor model,可以得到 g ( x + ? ) g(x + \epsilon) g(x+?),通过比较 g ( x + ? ) g(x + \epsilon) g(x+?) S Δ \mathcal{S}_{\Delta} SΔ? 的相似程度来检测对抗样本。文中使用 cosine 相似度来衡量二者之间的相似性,即 c o s ( g ( x + ? ) , S Δ ) cos(g(x+\epsilon),\mathcal{S}_{\Delta}) cos(g(x+?),SΔ?)。如果相似度超过一个预设的阈值 ? t \phi_t ?t?,那么就认为是对抗样本。文中通过计算已知良性图像和陷门图像之间相似度的统计分布来配置 ? t \phi_t ?t? “ W e ?? c h o o s e ?? ? t ?? t o ?? b e ?? t h e ?? k t h ?? p e r c e n t i l e ?? v a l u e ?? o f ?? t h i s ?? d i s t r i b u t i o n , ?? w h e r e ?? 1 ? k 100 ?? i s ?? t h e ?? d e s i r e d ?? f a l s e ?? p o s i t i v e ?? r a t e ?? " “We \; choose \; \phi_t\; to \; be \; the \; k^{th}\; percentile \; value \; of \; this \; distribution, \; where \; 1-\frac{k}{100}\; is \; the \; desired \; false \; positive \; rate \;" Wechoose?t?tobethekthpercentilevalueofthisdistribution,where1?100k?isthedesiredfalsepositiverate" (关于 ? t \phi_t ?t? 的设置暂时还没看懂,需要结合代码来理解)。

Defending Multiple Labels

??通过单个标签的防御可以扩展到多标签的防御。另 Δ t = ( M t , δ t , k t ) \Delta_t = (M_t,\delta_t,k_t) Δt?=(Mt?,δt?,kt?) 代表标签 y t y_t yt?。相应的用于训练保护所有标签的陷阱模型的优化函数定义为
m i n θ ?? J ( y , F θ ( x ) ) + λ ? ∑ y t ∈ Y , y t =? y J ( y t , F θ ( x + Δ t ) ) \underset{\theta}{\rm{min}}\; J(y,\mathcal{F}_{\theta}(x)) + \lambda\cdot \sum_{ y_t\in \mathcal{Y}, y_t\not=y}J(y_t,\mathcal{F}_{\theta}(x + \Delta_t)) θmin?J(y,Fθ?(x))+λ?yt?Y,yt??=y?J(yt?,Fθ?(x+Δt?))

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:58:09  更:2022-05-21 18:59:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:34:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码