对抗样本机器学习_Note1_机器学习安全
转载自: https://yq.aliyun.com/ziliao/292780网络
机器学习方法,如SVM,神经网络等,虽然在如图像分类等问题上已经outperform人类对同类问题的处理能力,可是也有其固有的缺陷,即咱们的训练集喂的都是natural input,所以在正常状况下处理的比较好。然而若是咱们想要对ML模型进行攻击的话,能够经过必定的手段生成对抗样本(adversarial examples),以图像为例,对抗样本在每一个像素点只有微小的扰动(pertubations),所以对于人类的眼睛是没法分辨的,即生成先后咱们人类还会将其归为同一类别。然而ML模型在面对这些对抗样本时会出现不鲁棒的特色,对它们会产生错分。对抗样本生成的基本思路是:在训练模型的过程当中,咱们把输入固定去调整参数,使得最后的结果能对应到相应的输入;而生成对抗样本时,咱们将模型固定,经过调整输入,观察在哪一个特征方向上只须要微小的扰动便可使得咱们的模型给出咱们想要的错分的分类结果。研究对抗样本机器学习的目的就是,但愿咱们的模型对于对抗样本更加robust。app
上图能够说明对抗样本是如何工做的。Model decision boundary 是咱们训练的模型的分类边界,这个边界能够较好的将两类样本分开,可是若是咱们对标出来的两个Test point 作一个微小的扰动,便可使其越过边界产生misclassification,所以咱们的Task decision boundary就应当将这些对抗样本也分到其本来的类别。机器学习
对于这个问题,与广泛的安全问题相似,咱们通常考虑两种角度,即attack和defense。其中attack试图更好的生成对抗样本以便使得分类结果符合attacker本身的预期;defense但愿经过提升模型的鲁棒性,从而对这些adversarial examples 不敏感,从而抵御攻击。常见的attack方法,即生成对抗样本的方法有 fast gradient sign method (FGSM)和 Jacobian-based saliency map approach(JSMA)。以下图,生成的对抗样本中的扰动对人类视觉来讲不敏感,可是对于ML模型来讲,本来以57.7percent的几率被判成熊猫的图片在修改后以99.3的几率被判成了长臂猿。学习
对于defense,常见的方法有:设计
(1)Adversarial training:该方法思路很是平凡,即在训练网络的过程当中,对每一个图片都生成一些对抗样本,而后给他们与原图相同的标签喂给网络训练,从而使得网络相对来讲对于对抗样本更鲁棒一些。开源的cleverhans即为用FGSM或JSMA生成对抗样本进行对抗训练的一个library。orm
(2)Defensive distillation:该方法用来smooth对抗样本进行扰动的方向的decision surface,Distillation(勉强译为 蒸馏。) 是Hinton大神提出来的一种用来使得小模型能够模仿大模型的方法,基本思路为,咱们在训练分类模型的时候,输出来的时one-hot的向量,这种叫作hard label,用hard label对一个模型进行训练后,咱们不只仅保留softmax以后最大的几率的那一个维度,而是将整个几率向量做为label(感受和label smoothing的思路有点像),这叫作soft label, 这样来讲,每一个输入样本不只仅只有一个信息量较小的(由于对于分类结果太过肯定,即该图片肯定为该类别,其余类别彻底无关)one-hot的向量,而是一个对每一个类别都有必定几率的vector。这样因为训练网络,就会获得一些附加信息,若有一张图片可能在某两类之间比较难以分别,这样它们就会有较高的几率,这样的label实际上附带了大模型训练获得的信息,所以能够提升小模型的效果。(flag:以上为我的理解,以后阅读Hinton的参考论文)所谓的Defensive distillation即先训练用硬标签一个网络,而后获得软标签,并训练另外一个网络(蒸馏网络),用蒸馏过的网络去分类就会对adversarial更加鲁棒。blog
一个失败的defense案例是 gradient masking,即直接输出类别而不是几率,使得无法经过gradient微小扰动图像,可是经过训练一个有gradient 的网络,在此基础上扰动,也能够attack通过该方法defense过的网络。图片
上图说明,即便defense使得gradient被掩盖,可是咱们能够训练替代模型用来生成对抗样本。ci
相对于attack,机器学习的defense更难一些。由于缺乏较好的theoratical model 来讲明某种方法能够将某类对抗样本排除出去。
对于设计一个稳定可靠的系统来讲,须要有testing和verification,所谓testing是指,在若干不一样的条件下评估该系统,观察其在这些条件下的表现;而verification是指,给出一个有说服里的理由证实该系统在broad range of circumstances下都不会misbehave。仅仅testing是不够的,由于testing只给出了系统的失败率的一个下界,可是为了安全防御的目的,咱们须要知道失败率的上界。可是对于机器学习的verification无法对对抗样本有一个guarantee,所以还很不完善。
reference: cleverhans-blog : http://www.cleverhans.io/