赞
踩
AI安全之对抗样本学习笔记
本人大三学生,最近在看《ai安全之对抗样本》,发现网上对本书的学习记录较少,所以准备在此做一些记录,以便大家使用;
书中所有的源码都是基于PyTorch或者Tensorflow;
记录会直接跳过书本的前几章,直接进入算法内容,想要学号DeepLearning并在安全方面有所作为,只看这本书是远远不够的,如果真的想学,建议先从python开始;
学习路线建议:
python–>python之深度学习–>tensorflow或者PyTorch–>对抗样本;
进入正题:
用自然语言描述,对抗样本其实就是在原数据上加入一些人难以识别的干扰元素,使得机器学习模型给出错误的判断或者分类;
用数学语言描述:
设:输入数据为x,分类器为f,对应的分类结果为分f(x);
假设存在一个非常小的扰动使得:
f(x+ε)!=f(x)
那么x+ε就称为一个对抗样本;
对抗样本看似很简单,不就是在图片上添加扰动吗,很容易实现,事实好像也是这样,在白盒攻击中,有很多算法可以使你的机器学习网络得出的结果错误,但在黑盒或者物理世界中还真的是这样吗?但一切都必须要有始有终,所以先从基础的白盒攻击来体会和理解怎么攻击;
进入正题:
深度学习在训练过程中,通过计算样本数据的预测值与真实值之间的损失函数,之后在反向传递的过程中通过链式法则调整模型的参数,不断减小损失函数的值,迭代计算出模型的各层参数。(如图)
生成对抗样本的基本过程也可以参考这一过程,不同的是在迭代训练的过程中,我们把网络的参数固定下来,把对抗样本当作唯一需要训练的参数,通过反向传递过程调整对抗样本(如图)
直接上代码(并没有涉及什么算法所以大家看懂就好):
"""首先加载使用的库文件,被攻击的模型是pb格式,TensorFlow把计算图以及模型参数都保存在一个pb文件中,因此不用额外引入模型计算图定义的库。""" import numpy as np from PIL import Image import tensorflow as tf import re #把id转换成可读字符串 #参考:https://github.com/tensorflow/models/blob/1af55e018eebce03fb61bba9959a04672536107d/tutorials/image/imagenet/classify_image.py class NodeLookup(object): """Converts integer node ID's to human readable labels.""" def __init__(self, label_lookup_path=None, uid_lookup_path=None): if not label_lookup_path: label_lookup_path = 'models/imagenet_2012_challenge_label_map_proto.pbtxt' if not uid_lookup_path: uid_lookup_path = 'models/imagenet_synset_to_human_label_map.txt' self.node_lookup = self.load(label_lookup_path, uid_lookup_path) def load(self, label_lookup_path, uid_lookup_path): """Loads a human readable English name for each softmax node. Args: label_lookup_path: string UID to integer node ID. uid_lookup_path: string UID to human-readable string. Returns: dict from integer node ID to human-readable string. """ if not tf.gfile.Exists(uid_lookup_path)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。